Subida del módulo y tema de PrestaShop

This commit is contained in:
Kaloyan
2026-04-09 18:31:51 +02:00
parent 12c253296f
commit 16b3ff9424
39262 changed files with 7418797 additions and 0 deletions

View File

@@ -0,0 +1 @@
/* Empty blockreassurance */

View File

@@ -0,0 +1,53 @@
{**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License version 3.0
* that is bundled with this package in the file LICENSE.md.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/AFL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* @author PrestaShop SA and Contributors <contact@prestashop.com>
* @copyright Since 2007 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0
*}
{if isset($blocks) && !empty($blocks)}
<div class="blockreassurance blockreassurance--light">
<div class="blockreassurance--horizontal container">
{foreach from=$blocks item=$block key=$key}
{if $block['type_link'] !== $LINK_TYPE_NONE && !empty($block['link'])}
<a class="reassurance reassurance--link" href="{$block['link']|escape:'htmlall':'UTF-8'}">
{else}
<div class="reassurance">
{/if}
<span class="reassurance__image">
{if $block['custom_icon']}
<img {if $block['is_svg']}class="svg img-fluid invisible" {/if}src="{$block['custom_icon']}">
{elseif $block['icon']}
<img class="svg img-fluid invisible" src="{$block['icon']}">
{/if}
</span>
<span class="reassurance__content">
<span class="reassurance__title">{$block['title']|escape:'htmlall':'UTF-8'}</span>
{if !empty($block['description'])}
<br/>
<small class="reassurance__desc">{$block['description'] nofilter}</small>
{/if}
</span>
{if !empty($block['link']) && $block['type_link'] !== $LINK_TYPE_NONE}
</a>
{else}
</div>
{/if}
{/foreach}
</div>
</div>
{/if}

View File

@@ -0,0 +1,37 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{if isset($blocks) && !empty($blocks)}
<div class="blockreassurance blockreassurance--{$page.page_name}">
{foreach from=$blocks item=$block key=$key}
{if $block['type_link'] !== $LINK_TYPE_NONE && !empty($block['link'])}
<a class="reassurance reassurance--link" href="{$block['link']|escape:'htmlall':'UTF-8'}">
{else}
<div class="reassurance">
{/if}
<span class="reassurance__image">
{if $block['custom_icon']}
<img {if $block['is_svg']}class="svg img-fluid invisible" {/if}src="{$block['custom_icon']}">
{elseif $block['icon']}
<img class="svg img-fluid invisible" src="{$block['icon']}">
{/if}
</span>
<span class="reassurance__content">
<span class="reassurance__title">{$block['title']|escape:'htmlall':'UTF-8'}</span>
{if !empty($block['description'])}
<br/>
<small class="reassurance__desc">{$block['description'] nofilter}</small>
{/if}
</span>
{if !empty($block['link']) && $block['type_link'] !== $LINK_TYPE_NONE}
</a>
{else}
</div>
{/if}
{/foreach}
</div>
{/if}

View File

@@ -0,0 +1,53 @@
{**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License version 3.0
* that is bundled with this package in the file LICENSE.md.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/AFL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* @author PrestaShop SA and Contributors <contact@prestashop.com>
* @copyright Since 2007 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0
*}
{if isset($blocks) && !empty($blocks)}
<div class="blockreassurance blockreassurance--dark">
<div class="blockreassurance--horizontal container">
{foreach from=$blocks item=$block key=$key}
{if $block['type_link'] !== $LINK_TYPE_NONE && !empty($block['link'])}
<a class="reassurance reassurance--link" href="{$block['link']|escape:'htmlall':'UTF-8'}">
{else}
<div class="reassurance">
{/if}
<span class="reassurance__image">
{if $block['custom_icon']}
<img {if $block['is_svg']}class="svg img-fluid invisible" {/if}src="{$block['custom_icon']}">
{elseif $block['icon']}
<img class="svg img-fluid invisible" src="{$block['icon']}">
{/if}
</span>
<span class="reassurance__content">
<span class="reassurance__title">{$block['title']|escape:'htmlall':'UTF-8'}</span>
{if !empty($block['description'])}
<br/>
<small class="reassurance__desc">{$block['description'] nofilter}</small>
{/if}
</span>
{if !empty($block['link']) && $block['type_link'] !== $LINK_TYPE_NONE}
</a>
{else}
</div>
{/if}
{/foreach}
</div>
</div>
{/if}

View File

@@ -0,0 +1,28 @@
<?php
/**
* 2007-2020 PrestaShop and Contributors
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License 3.0 (AFL-3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/AFL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2020 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,28 @@
<?php
/**
* 2007-2020 PrestaShop and Contributors
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License 3.0 (AFL-3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/AFL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2020 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,55 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div
class="wishlist-add-to"
data-url="{$url}"
>
<div
class="wishlist-modal modal fade"
:class="{ldelim}show: !isHidden{rdelim}"
tabindex="-1"
role="dialog"
aria-modal="true"
>
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<p class="h2 modal-title">{l s='Add to wishlist' d='Modules.Blockwishlist.Shop'}</p>
<button
type="button"
class="btn-close"
@click="toggleModal"
data-dismiss="modal"
aria-label="{l s='Close' d='Modules.Blockwishlist.Shop'}"
></button>
</div>
<div class="modal-body">
<choose-list
@hide="toggleModal"
:product-id="productId"
:product-attribute-id="productAttributeId"
:quantity="quantity"
url="{$url}"
add-url="{$addUrl}"
empty-text="{l s='No list found.' d='Modules.Blockwishlist.Shop'}"
></choose-list>
</div>
<div class="modal-footer">
<div role="button" @click="openNewWishlistModal" class="wishlist-add-to-new text-primary-emphasis">
<i class="material-icons text-primary-emphasis" aria-hidden="true">&#xE148;</i> {$newWishlistCTA}
</div>
</div>
</div>
</div>
</div>
<div
class="modal-backdrop fade"
:class="{ldelim}show: !isHidden{rdelim}"
></div>
</div>

View File

@@ -0,0 +1,69 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div
class="wishlist-create"
data-url="{$url}"
data-title="{l s='Create wishlist' d='Modules.Blockwishlist.Shop'}"
data-label="{l s='Wishlist name' d='Modules.Blockwishlist.Shop'}"
data-placeholder="{l s='Add name' d='Modules.Blockwishlist.Shop'}"
data-cancel-text="{l s='Cancel' d='Modules.Blockwishlist.Shop'}"
data-create-text="{l s='Create wishlist' d='Modules.Blockwishlist.Shop'}"
data-length-text="{l s='List title is too short' d='Modules.Blockwishlist.Shop'}"
>
<div
class="wishlist-modal modal fade"
:class="{ldelim}show: !isHidden{rdelim}"
tabindex="-1"
role="dialog"
aria-modal="true"
>
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header px-3">
<p class="h5 modal-title">((title))</p>
<button
type="button"
class="btn-close"
@click="toggleModal"
data-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">
<div class="form-group form-group-lg">
<label class="form-label" for="input2">((label))</label>
<input
type="text"
class="form-control form-control-lg"
v-model="value"
id="input2"
:placeholder="placeholder"
>
</div>
</div>
<div class="modal-footer">
<button
type="button"
class="modal-cancel btn btn-secondary"
data-dismiss="modal"
@click="toggleModal"
>((cancelText))</button>
<button
type="button"
class="btn btn-primary"
@click="createWishlist"
>((createText))</button>
</div>
</div>
</div>
</div>
<div
class="modal-backdrop fade"
:class="{ldelim}show: !isHidden{rdelim}"
></div>
</div>

View File

@@ -0,0 +1,65 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div
class="wishlist-delete"
{if isset($listUrl)}
data-delete-list-url="{$listUrl}"
{/if}
{if isset($deleteProductUrl)}
data-delete-product-url="{$deleteProductUrl}"
{/if}
data-title="{l s='Remove product from wishlist' d='Modules.Blockwishlist.Shop'}"
data-title-list="{l s='Delete wishlist' d='Modules.Blockwishlist.Shop'}"
data-placeholder='{l s='The product will be removed from "%nameofthewishlist%".' d='Modules.Blockwishlist.Shop'}'
data-cancel-text="{l s='Cancel' d='Modules.Blockwishlist.Shop'}"
data-delete-text="{l s='Remove' d='Modules.Blockwishlist.Shop'}"
data-delete-text-list="{l s='Delete' d='Modules.Blockwishlist.Shop'}"
>
<div
class="wishlist-modal modal fade"
:class="{ldelim}show: !isHidden{rdelim}"
tabindex="-1"
role="dialog"
aria-modal="true"
>
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header px-3">
<p class="h5 modal-title">((modalTitle))</p>
<button
type="button"
class="btn-close"
@click="toggleModal"
data-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body" v-if="productId">
<p class="modal-text">((confirmMessage))</p>
</div>
<div class="modal-footer">
<button
type="button"
class="modal-cancel btn btn-secondary"
data-dismiss="modal"
@click="toggleModal"
>((cancelText))</button>
<button
type="button"
class="btn btn-primary"
@click="deleteWishlist"
>((modalDeleteText))</button>
</div>
</div>
</div>
</div>
<div
class="modal-backdrop fade"
:class="{ldelim}show: !isHidden{rdelim}"
></div>
</div>

View File

@@ -0,0 +1,54 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div
class="wishlist-login"
data-login-text="{l s='Sign in' d='Modules.Blockwishlist.Shop'}"
data-cancel-text="{l s='Cancel' d='Modules.Blockwishlist.Shop'}"
>
<div
class="wishlist-modal modal fade"
:class="{ldelim}show: !isHidden{rdelim}"
tabindex="-1"
role="dialog"
aria-modal="true"
>
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header px-3">
<p class="h5 modal-title">{l s='Sign in' d='Modules.Blockwishlist.Shop'}</p>
<button
type="button"
class="btn-close"
@click="toggleModal"
data-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">
<p class="modal-text">{l s='You need to be logged in to save products in your wishlist.' d='Modules.Blockwishlist.Shop'}</p>
</div>
<div class="modal-footer">
<button
type="button"
class="modal-cancel btn btn-secondary"
data-dismiss="modal"
@click="toggleModal"
>((cancelText))</button>
<a
class="btn btn-primary"
:href="prestashop.urls.pages.authentication"
>((loginText))</a>
</div>
</div>
</div>
</div>
<div
class="modal-backdrop fade"
:class="{ldelim}show: !isHidden{rdelim}"
></div>
</div>

View File

@@ -0,0 +1,66 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div
class="wishlist-rename"
data-url="{$url}"
data-title="{l s='Rename wishlist' d='Modules.Blockwishlist.Shop'}"
data-label="{l s='Wishlist name' d='Modules.Blockwishlist.Shop'}"
data-placeholder="{l s='Wishlist name' d='Modules.Blockwishlist.Shop'}"
data-cancel-text="{l s='Cancel' d='Modules.Blockwishlist.Shop'}"
data-rename-text="{l s='Rename wishlist' d='Modules.Blockwishlist.Shop'}"
>
<div
class="wishlist-modal modal fade"
:class="{ldelim}show: !isHidden{rdelim}"
tabindex="-1"
role="dialog"
aria-modal="true"
>
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header px-3">
<p class="h5 modal-title">((title))</p>
<button
type="button"
class="btn-close"
@click="toggleModal"
data-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">
<div class="form-group form-group-lg">
<label class="form-label" for="input2">((label))</label>
<input
type="text"
class="form-control form-control-lg"
v-model="value"
id="input2"
>
</div>
</div>
<div class="modal-footer">
<button
type="button"
class="modal-cancel btn btn-secondary"
data-dismiss="modal"
@click="toggleModal"
>((cancelText))</button>
<button
type="button"
class="btn btn-primary"
@click="renameWishlist"
>((renameText))</button>
</div>
</div>
</div>
</div>
<div
class="modal-backdrop fade"
:class="{ldelim}show: !isHidden{rdelim}"
></div>
</div>

View File

@@ -0,0 +1,68 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div
class="wishlist-share"
data-url="{$url}"
data-title="{l s='Share wishlist' d='Modules.Blockwishlist.Shop'}"
data-copied-text="{l s='Copied!' d='Modules.Blockwishlist.Shop'}"
data-label="{l s='Share link' d='Modules.Blockwishlist.Shop'}"
data-cancel-text="{l s='Cancel' d='Modules.Blockwishlist.Shop'}"
data-copy-text="{l s='Copy text' d='Modules.Blockwishlist.Shop'}"
>
<div
class="wishlist-modal modal fade"
:class="{ldelim}show: !isHidden{rdelim}"
tabindex="-1"
role="dialog"
aria-modal="true"
>
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header px-3">
<p class="h5 modal-title">((title))</p>
<button
type="button"
class="btn-close"
@click="toggleModal"
data-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">
<div class="form-group form-group-lg">
<label class="form-label" for="input2">((label))</label>
<input
type="text"
class="form-control form-control-lg"
v-model="value"
id="input2"
placeholder="Share link"
>
</div>
</div>
<div class="modal-footer">
<button
type="button"
class="modal-cancel btn btn-secondary"
data-dismiss="modal"
@click="toggleModal"
>((cancelText))</button>
<button
type="button"
class="btn btn-primary"
@click="copyLink"
>(( actionText ))</button>
</div>
</div>
</div>
</div>
<div
class="modal-backdrop fade"
:class="{ldelim}show: !isHidden{rdelim}"
></div>
</div>

View File

@@ -0,0 +1,28 @@
{**
* 2007-2020 PrestaShop and Contributors
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License 3.0 (AFL-3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/AFL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2020 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0)
* International Registered Trademark & Property of PrestaShop SA
*}
<a
class="account-menu__link {if $urls.current_url === $url} account-menu__link--active{/if}"
id="wishlist_link"
href="{$url}"
{if $urls.current_url === $url}aria-current="page"{/if}
>
<i class="account-menu__icon material-icons" aria-hidden="true">&#xE87D;</i>
{$wishlistsTitlePage}
</a>

View File

@@ -0,0 +1,28 @@
<?php
/**
* 2007-2020 PrestaShop and Contributors
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License 3.0 (AFL-3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/AFL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2020 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,28 @@
<?php
/**
* 2007-2020 PrestaShop and Contributors
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License 3.0 (AFL-3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/AFL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2020 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,116 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<section class="contact-form">
<form class="form-validation" action="{$urls.pages.contact}" method="post" {if $contact.allow_file_upload}enctype="multipart/form-data"{/if} data-ps-action="form-validation">
{if $notifications}
<div class="alert {if $notifications.nw_error}alert-danger{else}alert-success{/if}" role="alert" tabindex="0">
<ul class="mb-0">
{foreach $notifications.messages as $notif}
<li>{$notif}</li>
{/foreach}
</ul>
</div>
{/if}
{if !$notifications || $notifications.nw_error}
<section class="form-fields">
{include file='components/page-title-section.tpl' title={l s='Contact us' d='Shop.Theme.Global'}}
<div class="mb-3">
<label class="form-label" for="contact-us-subject-select">
{l s='Subject' d='Shop.Forms.Labels'}
</label>
<select id="contact-us-subject-select" name="id_contact" class="form-select">
{foreach from=$contact.contacts item=contact_elt}
<option value="{$contact_elt.id_contact}">{$contact_elt.name}</option>
{/foreach}
</select>
</div>
<div class="mb-3">
<label class="form-label required" for="contact-us-email-input">
{l s='Email address' d='Shop.Forms.Labels'}
</label>
<input
id="contact-us-email-input"
class="form-control"
name="from"
type="email"
value="{$contact.email}"
placeholder="{l s='your@email.com' d='Shop.Forms.Help'}"
autocomplete="email"
required
>
</div>
{if $contact.orders}
<div class="mb-3">
<label class="form-label" for="contact-us-id-order-select">
{l s='Order reference' d='Shop.Forms.Labels'}
</label>
<select id="contact-us-id-order-select" name="id_order" class="form-select">
<option value="">{l s='Select reference' d='Shop.Forms.Help'}</option>
{foreach from=$contact.orders item=order}
<option value="{$order.id_order}">{$order.reference}</option>
{/foreach}
</select>
<span class="form-text">{l s='optional' d='Shop.Forms.Help'}</span>
</div>
{/if}
{if $contact.allow_file_upload}
<div class="mb-3">
<label class="form-label" for="contact-us-attachment-input">
{l s='Attachment' d='Shop.Forms.Labels'}
</label>
<input
id="contact-us-attachment-input"
type="file"
name="fileUpload"
class="form-control"
>
<span class="form-text">{l s='optional' d='Shop.Forms.Help'}</span>
</div>
{/if}
<div class="mb-3">
<label class="form-label required" for="contact-us-message-textarea">
{l s='Message' d='Shop.Forms.Labels'}
</label>
<textarea
id="contact-us-message-textarea"
class="form-control"
name="message"
placeholder="{l s='How can we help?' d='Shop.Forms.Help'}"
required
rows="3"
>{if $contact.message}{$contact.message}{/if}</textarea>
</div>
{if isset($id_module)}
<div class="mb-3">
{hook h='displayGDPRConsent' id_module=$id_module}
</div>
{/if}
</section>
<footer class="buttons-wrapper buttons-wrapper--end">
<input type="hidden" name="url" value="" />
<input type="hidden" name="token" value="{$token}" />
<button
class="btn btn-primary"
type="submit"
name="submitMessage"
data-ps-action="form-validation-submit"
>
{l s='Send your message' d='Shop.Theme.Actions'}
</button>
</footer>
{/if}
</form>
</section>

View File

@@ -0,0 +1 @@
/* Empty productcomments */

Binary file not shown.

After

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 865 B

View File

@@ -0,0 +1 @@
/* productcomments */

View File

@@ -0,0 +1 @@
/* productcomments */

View File

@@ -0,0 +1,2 @@
/* productcomments */

View File

@@ -0,0 +1,36 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{assign var='icon' value=$icon|default:'check'}
{assign var='modal_message' value=$modal_message|default:''}
<div id="{$modal_id}" class="modal fade product-comment-modal" tabindex="-1" aria-labelledby="{$modal_id}-title" aria-hidden="true" data-ps-ref="{$data_ps_ref|default:$modal_id}">
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<p class="h2 modal-title" id="{$modal_id}-title">
{$modal_title}
</p>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="{l s='Close' d='Shop.Theme.Global'}"></button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12 col-sm-12" id="{$modal_id}-message">
{$modal_message}
</div>
</div>
</div>
<div class="modal-footer post-comment-buttons">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">
{l s='Ok' d='Modules.Productcomments.Shop'}
</button>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,15 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{if $nb_comments != 0}
<div class="comments-note" data-ps-ref="comments-note">
<div class="grade-stars" data-ps-ref="grade-stars" data-grade="{$grade}"></div>
{if isset($showNbComments) && $showNbComments}
<div class="comments-number" data-ps-ref="comments-number">({$nb_comments})</div>
{elseif isset($showGradeAverage) && $showGradeAverage}
<div class="average-grade" data-ps-ref="average-grade">({$grade|number_format:1})</div>
{/if}
</div>
{/if}

View File

@@ -0,0 +1,41 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{assign var='icon' value=$icon|default:'check'}
{assign var='modal_message' value=$modal_message|default:''}
<div id="{$modal_id}" class="modal fade product-comment-modal" tabindex="-1" aria-labelledby="{$modal_id}-title"
aria-hidden="true" data-ps-ref="{$data_ps_ref|default:$modal_id}">
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<p class="h2 modal-title" id="{$modal_id}-title">
{$modal_title}
</p>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="{l s='Close' d='Shop.Theme.Global'}"></button>
</div>
<div class="modal-body">
<div id="{$modal_id}-message">
{$modal_message}
</div>
</div>
<div class="modal-footer">
<div class="post-comment-buttons">
<button type="button" class="btn btn-outline-primary me-2 refuse-button" data-bs-dismiss="modal" data-ps-ref="refuse-button"
aria-label="{l s='No' d='Modules.Productcomments.Shop'}">
{l s='No' d='Modules.Productcomments.Shop'}
</button>
<button type="button" class="btn btn-primary confirm-button" data-bs-dismiss="modal" data-ps-ref="confirm-button"
aria-label="{l s='Yes' d='Modules.Productcomments.Shop'}">
{l s='Yes' d='Modules.Productcomments.Shop'}
</button>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,14 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div id="empty-product-comment" data-ps-ref="empty-product-comment" class="product-comment-list-item py-3">
{if $post_allowed == 1}
<button class="btn btn-outline-primary post-product-comment" id="product-footer-review-button" type="button" data-bs-toggle="modal" data-bs-target="#post-product-comment-modal" data-ps-ref="product-post-review-button">
{l s='Be the first to write your review' d='Modules.Productcomments.Shop'}
</button>
{else}
{l s='No customer reviews for the moment.' d='Modules.Productcomments.Shop'}
{/if}
</div>

View File

@@ -0,0 +1,193 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<script type="text/javascript">
var productCommentPostErrorMessage = '{l s='Sorry, your review cannot be posted.' d='Modules.Productcomments.Shop' js=1}';
var productCommentMandatoryMessage = '{l s='Please choose a rating for your review.' d='Modules.Productcomments.Shop' js=1}';
var ratingChosen = false;
</script>
<div id="post-product-comment-modal" class="modal fade product-comment-modal" tabindex="-1" aria-labelledby="product-post-review-modal-title" aria-hidden="true" data-ps-ref="product-post-review-modal">
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
<form class="modal-content" id="post-product-comment-form" action="{$post_comment_url nofilter}" method="POST" data-ps-ref="product-post-review-form" data-ps-action="form-validation">
<div class="modal-header">
<p class="h2 modal-title" id="product-post-review-modal-title">{l s='Write your review' d='Modules.Productcomments.Shop'}</p>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-12 col-sm-2 mb-4">
{if isset($product) && $product}
{block name='product_cover'}
<div class="product-cover">
{if !empty($product.cover)}
<picture>
{if isset($product.cover.bySize.default_xs.sources.avif)}
<source srcset="
{$product.cover.bySize.default_xs.sources.avif},
{$product.cover.bySize.default_md.sources.avif} 2x"
type="image/avif">
{/if}
{if isset($product.cover.bySize.default_xs.sources.webp)}
<source srcset="
{$product.cover.bySize.default_xs.sources.webp},
{$product.cover.bySize.default_md.sources.webp} 2x"
type="image/webp">
{/if}
<img class="js-qv-product-cover rounded img-fluid" srcset="
{$product.cover.bySize.default_xs.url},
{$product.cover.bySize.default_md.url} 2x" loading="lazy"
width="{$product.cover.bySize.default_xs.width}"
height="{$product.cover.bySize.default_xs.height}"
alt="{$product.cover.legend}"
title="{$product.cover.legend}">
</picture>
{else}
<picture>
{if isset($urls.no_picture_image.bySize.default_xs.sources.avif)}
<source srcset="
{$urls.no_picture_image.bySize.default_xs.sources.avif},
{$urls.no_picture_image.bySize.default_md.sources.avif} 2x"
type="image/avif">
{/if}
{if isset($urls.no_picture_image.bySize.default_xs.sources.webp)}
<source srcset="
{$urls.no_picture_image.bySize.default_xs.sources.webp},
{$urls.no_picture_image.bySize.default_md.sources.webp} 2x"
type="image/webp">
{/if}
<img class="rounded img-fluid" srcset="
{$urls.no_picture_image.bySize.default_xs.url},
{$urls.no_picture_image.bySize.default_md.url} 2x"
width="{$urls.no_picture_image.bySize.default_xs.width}"
height="{$urls.no_picture_image.bySize.default_xs.height}" loading="lazy">
</picture>
{/if}
</div>
{/block}
{/if}
</div>
<div class="col-12 col-sm-10">
<p class="h5">{$product.name}</p>
{block name='product_description_short'}
<div itemprop="description">{$product.description_short nofilter}</div>
{/block}
</div>
<div class="col-12">
{if $criterions|@count > 0}
<ul id="criterions_list" data-ps-ref="criterions-list">
{foreach from=$criterions item='criterion'}
<li {if !$criterion@last}class="mb-2"{/if}>
<fieldset class="star-rating-group" aria-labelledby="rating-label-{$criterion.id_product_comment_criterion}">
<legend id="rating-label-{$criterion.id_product_comment_criterion}" class="form-label required">
<span class="visually-hidden">{l s='Rating for ' d='Modules.Productcomments.Shop'}</span>
{$criterion.name|escape:'html':'UTF-8'}
</legend>
<div class="form-check stars-selector" aria-labelledby="rating-label-{$criterion.id_product_comment_criterion}">
{for $i=1 to 5 step 1}
<input
class="stars-selector__input visually-hidden"
type="radio"
id="star-{$i}-criterion-{$criterion.id_product_comment_criterion}"
name="criterion[{$criterion.id_product_comment_criterion}]"
value="{$i}"
{if $i == 1}
aria-label="{l s='%s star out of 5' sprintf=[$i] d='Modules.Productcomments.Shop'}"
{else}
aria-label="{l s='%s stars out of 5' sprintf=[$i] d='Modules.Productcomments.Shop'}"
{/if}
required
>
<label class="stars-selector__input-label" for="star-{$i}-criterion-{$criterion.id_product_comment_criterion}" aria-hidden="true"></label>
{/for}
<div class="invalid-feedback">{l s='Please choose a rating for your review.' d='Modules.Productcomments.Shop'}</div>
</div>
</fieldset>
</li>
{/foreach}
</ul>
{/if}
</div>
</div>
<div class="row">
{if !$logged}
<div class="col-sm-8 mb-3">
<label class="form-label required" for="comment_title">{l s='Title of your review' d='Modules.Productcomments.Shop'} </label>
<input class="form-control" name="comment_title" id="comment_title" type="text" value="" required>
</div>
<div class="col-sm-4 mb-3">
<label class="form-label required" for="customer_name">{l s='Your name' d='Modules.Productcomments.Shop'} </label>
<input class="form-control" name="customer_name" id="customer_name" type="text" value="" required>
</div>
{else}
<div class="mb-3">
<label class="form-label required" for="comment_title">{l s='Title of your review' d='Modules.Productcomments.Shop'} </label>
<input class="form-control" name="comment_title" id="comment_title" type="text" value="" required>
</div>
{/if}
</div>
<div class="mb-3">
<label class="form-label required" for="comment_content">{l s='Your review' d='Modules.Productcomments.Shop'} </label>
<textarea class="form-control" name="comment_content" id="comment_content" required></textarea>
</div>
{capture name='gdprContent'}{hook h='displayGDPRConsent' mod='psgdpr' id_module=$id_module}{/capture}
{if $smarty.capture.gdprContent != ''}
<div class="mb-3">
{$smarty.capture.gdprContent nofilter}
</div>
{/if}
</div>
<div class="modal-footer">
<p class="required">
<sup class="text-danger">*</sup> {l s='Required fields' d='Modules.Productcomments.Shop'}
</p>
<div class="post-comment-buttons d-flex flex-wrap gap-2 w-100 w-md-auto">
<button type="button" class="btn btn-outline-primary w-md-auto w-100" data-bs-dismiss="modal"
aria-label="{l s='Cancel' d='Modules.Productcomments.Shop'}">
{l s='Cancel' d='Modules.Productcomments.Shop'}
</button>
<button type="submit" class="btn btn-primary w-100 w-md-auto order-first order-md-last" aria-label="{l s='Send review' d='Modules.Productcomments.Shop'}" data-ps-action="form-validation-submit">
{l s='Send' d='Modules.Productcomments.Shop'}
</button>
</div>
</div>
</form>
</div>
</div>
{* Comment posted modal *}
{if $moderation_active}
{assign var='comment_posted_message' value={l s='Your comment has been submitted and will be available once approved by a moderator.' d='Modules.Productcomments.Shop'}}
{else}
{assign var='comment_posted_message' value={l s='Your comment has been added!' d='Modules.Productcomments.Shop'}}
{/if}
{include file='module:productcomments/views/templates/hook/alert-modal.tpl'
modal_id='product-post-review-posted-modal'
modal_title={l s='Review sent' d='Modules.Productcomments.Shop'}
modal_message=$comment_posted_message
}
{* Comment post error modal *}
{include file='module:productcomments/views/templates/hook/alert-modal.tpl'
modal_id='product-post-review-error-modal'
modal_title={l s='Your review cannot be sent' d='Modules.Productcomments.Shop'}
icon='error'
}

View File

@@ -0,0 +1,23 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{if $nb_comments != 0 || $post_allowed == 1}
{if $nb_comments > 0}
<div class="product-comments-additional-info">
<a href="#product-comments-list-header"
aria-label="{l s='Rated %average_grade% out of 5 stars. Go to reviews section' sprintf=['%average_grade%' => {$average_grade|round:1}] d='Modules.Productcomments.Shop'}">
{include file='module:productcomments/views/templates/hook/average-grade-stars.tpl' grade=$average_grade showGradeAverage=true}
</a>
</div>
{else}
{if $post_allowed}
<div class="product-comments-additional-info">
<button class="btn btn-outline-primary post-product-comment" id="product-additional-info-review-button" type="button" data-bs-toggle="modal" data-bs-target="#post-product-comment-modal" data-ps-ref="product-post-review-button">
{l s='Write your review' d='Modules.Productcomments.Shop'}
</button>
</div>
{/if}
{/if}
{/if}

View File

@@ -0,0 +1,43 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div class="product-comment-list-item comment" data-ps-ref="product-comment-item" data-product-comment-id="@COMMENT_ID@" data-product-id="@PRODUCT_ID@">
<div class="comment__top">
<div class="comment__author">
@CUSTOMER_NAME@
</div>
<div class="comment__date">
@COMMENT_DATE@
</div>
</div>
<div class="comment__infos">
<div class="grade-stars" data-ps-ref="grade-stars" data-grade="@COMMENT_GRADE@" aria-label="{l s='Rated' d='Modules.Productcomments.Shop'} @COMMENT_GRADE@ {l s='out of 5 stars' d='Modules.Productcomments.Shop'}"></div>
<p class="comment__title">@COMMENT_TITLE@</p>
</div>
<div class="comment__content">
<p class="comment__text">@COMMENT_COMMENT@</p>
</div>
<div class="comment__buttons">
{if $usefulness_enabled}
<button class="useful-review btn btn-sm btn-outline-primary" data-ps-ref="useful-review">
<i class="material-icons fs-6" aria-hidden="true">&#xE8DC;</i>
<span class="useful-review-value" data-ps-ref="useful-review-value">@COMMENT_USEFUL_ADVICES@</span>
<span class="visually-hidden">{l s='useful review(s). Mark this review as useful.' d='Modules.Productcomments.Shop'}</span>
</button>
<button class="not-useful-review btn btn-sm btn-outline-primary" data-ps-ref="not-useful-review">
<i class="material-icons fs-6" aria-hidden="true">&#xE8DB;</i>
<span class="not-useful-review-value" data-ps-ref="not-useful-review-value">@COMMENT_NOT_USEFUL_ADVICES@</span>
<span class="visually-hidden">{l s='not useful review(s). Mark this review as not useful.' d='Modules.Productcomments.Shop'}</span>
</button>
{/if}
<button class="report-abuse btn btn-sm btn-outline-primary" data-ps-ref="report-abuse">
<i class="material-icons fs-6" aria-hidden="true">&#xE153;</i> {l s='Report abuse' d='Modules.Productcomments.Shop'}
</button>
</div>
</div>

View File

@@ -0,0 +1,97 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div class="product-comments-wrapper">
<script type="text/javascript">
var productCommentUpdatePostErrorMessage = '{l|escape:'javascript' s='Sorry, your review appreciation cannot be sent.' d='Modules.Productcomments.Shop'}';
var productCommentAbuseReportErrorMessage = '{l|escape:'javascript' s='Sorry, your abuse report cannot be sent.' d='Modules.Productcomments.Shop'}';
</script>
<div id="product-comments-list-header">
<h2 class="section-title">
{l s='Comments' d='Modules.Productcomments.Shop'} ({$nb_comments})
</h2>
{include file='module:productcomments/views/templates/hook/average-grade-stars.tpl' grade=$average_grade showGradeAverage=true showNbComments=false}
</div>
{if $nb_comments > 0 && $post_allowed}
<div id="product-comments-list-btn-group">
<button class="w-100 w-sm-auto btn btn-outline-primary post-product-comment" id="product-comments-list-review-button" type="button" data-bs-toggle="modal" data-bs-target="#post-product-comment-modal" data-ps-ref="product-post-review-button">
{l s='Write your review' d='Modules.Productcomments.Shop'}
</button>
</div>
{elseif $nb_comments == 0}
{include file='module:productcomments/views/templates/hook/empty-product-comment.tpl'}
{/if}
{include file='module:productcomments/views/templates/hook/product-comment-item-prototype.tpl' assign="comment_prototype"}
<div id="product-comments-list" class="{if $nb_comments > 0}has-comments{/if}"
data-ps-ref="product-comments-list"
data-list-comments-url="{$list_comments_url nofilter}"
data-update-comment-usefulness-url="{$update_comment_usefulness_url nofilter}"
data-report-comment-url="{$report_comment_url nofilter}"
data-comment-item-prototype="{$comment_prototype}"
data-current-page="1"
data-total-pages="{$list_total_pages}"
aria-live="polite"></div>
{if $list_total_pages > 1}
<div id="product-comments-list-footer">
<nav id="product-comments-list-pagination" data-ps-ref="product-comments-pagination" aria-label="{l s='Product comments pagination' d='Modules.Productcomments.Shop'}">
<ul class="pagination justify-content-center">
<li class="page-item disabled" data-ps-ref="pagination-item" data-ps-action="prev">
<button class="page-link btn prev" aria-label="{l s='Go to previous page' d='Shop.Theme.Actions'}">
<i class="material-icons" aria-hidden="true">&#xE5CB;</i>
</button>
</li>
{for $pageCount = 1 to $list_total_pages}
<li class="page-item {if $pageCount == 1}active{/if}" data-ps-ref="pagination-item" data-ps-action="page" data-ps-data="{$pageCount}">
<button class="page-link btn" {if $pageCount == 1}aria-current="page"{/if} aria-label="{l s='Go to page %pageCount%' d='Modules.Productcomments.Shop' sprintf=['%pageCount%' => $pageCount]}">{$pageCount}</button>
</li>
{/for}
<li class="page-item" data-ps-ref="pagination-item" data-ps-action="next">
<button class="page-link btn next" aria-label="{l s='Go to next page' d='Shop.Theme.Actions'}">
<i class="material-icons" aria-hidden="true">&#xE5CC;</i>
</button>
</li>
</ul>
</nav>
</div>
{/if}
{* Appreciation post error modal *}
{include file='module:productcomments/views/templates/hook/alert-modal.tpl'
modal_id='update-comment-usefulness-post-error'
data_ps_ref='update-comment-usefulness-post-error'
modal_title={l s='Your review appreciation cannot be sent' d='Modules.Productcomments.Shop'}
icon='error'
}
{* Confirm report modal *}
{include file='module:productcomments/views/templates/hook/confirm-modal.tpl'
modal_id='report-comment-confirmation'
data_ps_ref='report-comment-confirmation'
modal_title={l s='Report comment' d='Modules.Productcomments.Shop'}
modal_message={l s='Are you sure that you want to report this comment?' d='Modules.Productcomments.Shop'}
icon='feedback'
}
{* Report comment posted modal *}
{include file='module:productcomments/views/templates/hook/alert-modal.tpl'
modal_id='report-comment-posted'
data_ps_ref='report-comment-post-success'
modal_title={l s='Report sent' d='Modules.Productcomments.Shop'}
modal_message={l s='Your report has been submitted and will be considered by a moderator.' d='Modules.Productcomments.Shop'}
}
{* Report abuse error modal *}
{include file='module:productcomments/views/templates/hook/alert-modal.tpl'
modal_id='report-comment-post-error'
data_ps_ref='report-comment-post-error'
modal_title={l s='Your report cannot be sent' d='Modules.Productcomments.Shop'}
icon='error'
}
</div>

View File

@@ -0,0 +1,14 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div class="product-list-review" data-ps-ref="product-list-review" data-id="{$product.id}" data-url="{$product_comment_grade_url nofilter}">
<div class="grade-stars small-stars" data-ps-ref="grade-stars"></div>
<div class="product-list-comments-number" data-ps-ref="product-list-comments-number">
<span class="visually-hidden">
{l s='Rated' d='Modules.Productcomments.Shop'} <span data-ps-ref="grade-value"></span> {l s='out of 5 stars based on ' d='Modules.Productcomments.Shop'}
</span>
<span data-ps-ref="number-value"></span> {l s='review(s)' d='Modules.Productcomments.Shop'}
</div>
</div>

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;

View File

@@ -0,0 +1,8 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div class="advertising-block">
<a href="{$adv_link}" title="{$adv_title}"><img src="{$image}" alt="{$adv_title}" title="{$adv_title}" loading="lazy"/></a>
</div>

View File

@@ -0,0 +1,25 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{if isset($banner_img)}
<section class="ps-banner">
<div class="container">
<a class="banner d-block text-center" href="{$banner_link}" title="{$banner_desc}">
<img
src="{$banner_img}"
alt="{$banner_desc}"
title="{$banner_desc}"
class="img-fluid"
loading="lazy"
{if !empty($banner_width)}
width="{$banner_width}"
{/if}
{if !empty($banner_height)}
height="{$banner_height}"
{/if}
>
</a>
</div>
</section>
{/if}

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,19 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{extends file="components/module-products.tpl"}
{block name='module_products_name'}ps-bestsellers{/block}
{block name='module_products_title'}
{include file='components/section-title.tpl' title={l s='Best sellers' d='Shop.Theme.Catalog'}}
{/block}
{block name='module_products_footer'}
<a class="btn btn-outline-primary" href="{$allBestSellers}">
{l s='All best sellers' d='Shop.Theme.Catalog'}
<i class="material-icons" aria-hidden="true">&#xE315;</i>
</a>
{/block}

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,27 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div class="brands-sort dropdown">
<button
class="select-title"
rel="nofollow"
data-bs-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false">
{l s='All brands' d='Shop.Theme.Catalog'}
<i class="material-icons float-end" aria-hidden="true">&#xE5C5;</i>
</button>
<div class="dropdown-menu dropdown-menu-start">
{foreach from=$brands item=brand}
<a
rel="nofollow"
href="{$brand['link']}"
class="dropdown-item select-list js-search-link"
>
{$brand['name']}
</a>
{/foreach}
</div>
</div>

View File

@@ -0,0 +1,17 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{$componentName = 'search-filters-modules'}
<ul class="{$componentName}__list">
{foreach from=$brands item=brand name=brand_list}
{if $smarty.foreach.brand_list.iteration <= $text_list_nb}
<li class="{$componentName}__item facet-label">
<a class="{$componentName}__item__link" href="{$brand['link']}" title="{$brand['name']}">
{$brand['name']}
</a>
</li>
{/if}
{/foreach}
</ul>

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,27 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{$componentName = 'search-filters-modules'}
<div id="search_filters_brands">
<section class="{$componentName} facet">
{if $display_link_brand}
<a href="{$page_link}" class="{$componentName}-title d-block mb-3" title="{l s='brands' d='Shop.Theme.Catalog'}">
{l s='Brands' d='Shop.Theme.Catalog'}
</a>
{else}
<p class="{$componentName}-title">
{l s='Brands' d='Shop.Theme.Catalog'}
</p>
{/if}
<div>
{if $brands}
{include file="module:ps_brandlist/views/templates/_partials/$brand_display_type.tpl" brands=$brands}
{else}
<p class="mb-0">{l s='No brand' d='Shop.Theme.Catalog'}</p>
{/if}
</div>
</section>
</div>

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;

View File

@@ -0,0 +1,23 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div id="ps_cashondelivery-displayOrderConfirmation" class="card border-1 mb-3">
<div class="card-body">
<p class="h2">{l s='Payment information' d='Shop.Theme.Checkout'}</p>
<p class="h3 card-subtitle text-secondary mb-3">{l s='Pay by Cash on Delivery' d='Modules.Cashondelivery.Shop'}</p>
<p class="mb-0">
{l s='Your order on %s is complete.' sprintf=[$shop_name] d='Modules.Cashondelivery.Shop'}<br aria-hidden="true">
{l s='You have chosen the cash on delivery method.' d='Modules.Cashondelivery.Shop'}<br aria-hidden="true">
{l s='Your order will be sent very soon.' d='Modules.Cashondelivery.Shop'}
</p>
</div>
<div class="card-footer p-3 border-1">
{l s='For any questions or for further information, please contact our' d='Modules.Cashondelivery.Shop'}
<a href="{$contact_url}" rel="nofollow">{l s='customer support' d='Modules.Cashondelivery.Shop'}</a>.
</div>
</div>

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;

View File

@@ -0,0 +1,24 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div id="ps_cashondelivery-displayOrderConfirmation" class="card border-1 mb-3">
<div class="card-body">
<p class="h2">{l s='Payment information' d='Shop.Theme.Checkout'}</p>
<p class="h3 card-subtitle text-secondary mb-3">{l s='Pay by Cash on Delivery' d='Modules.Cashondelivery.Shop'}</p>
<p class="mb-0">
{l s='Your order on %s is complete.' sprintf=[$shop_name] d='Modules.Cashondelivery.Shop'}<br aria-hidden="true">
{l s='You have chosen the cash on delivery method.' d='Modules.Cashondelivery.Shop'}<br aria-hidden="true">
{l s='Your order will be sent very soon.' d='Modules.Cashondelivery.Shop'}
</p>
</div>
<div class="card-footer p-3 border-1">
{l s='For any questions or for further information, please contact our' d='Modules.Cashondelivery.Shop'}
<a href="{$contact_url}" rel="nofollow">{l s='customer support' d='Modules.Cashondelivery.Shop'}</a>.
</div>
</div>

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,19 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{extends file="components/module-products.tpl"}
{block name='module_products_variables'}
{assign var="need_container" value=false}
{/block}
{block name='module_products_name'}ps-categoryproducts{/block}
{block name='module_products_title'}
{if $products|@count == 1}
{include file='components/section-title.tpl' title={l s='%s other product in the same category' sprintf=[$products|@count] d='Shop.Theme.Catalog'}}
{else}
{include file='components/section-title.tpl' title={l s='%s other products in the same category' sprintf=[$products|@count] d='Shop.Theme.Catalog'}}
{/if}
{/block}

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,68 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{$componentName = 'category-tree'}
{function name="categories" nodes=[] depth=0}
{strip}
{if $nodes|count}
<ul class="{$componentName}__list" data-depth="{$depth|escape:'htmlall':'UTF-8'}">
{foreach from=$nodes item=node name="categories"}
<li class="{$componentName}__item {if $node.children}accordion-item{/if}">
<div class="{$componentName}__item-header nosplit {if $node.children} split parent{/if}">
<a class="{$componentName}__item-link" href="{$node.link|escape:'htmlall':'UTF-8'}">
{$node.name|escape:'htmlall':'UTF-8'}
</a>
{if $node.children}
<button
class="accordion-button collapsed"
type="button"
data-bs-toggle="collapse"
data-bs-target="#category-tree-{$node.id|escape:'htmlall':'UTF-8'}"
aria-expanded="false"
aria-controls="category-tree-{$node.id|escape:'htmlall':'UTF-8'}"
aria-label="{l s='Subcategories for %s' sprintf=[$node.name] d='Shop.Theme.Catalog'}"
>
</button>
{/if}
</div>
{if $node.children}
<div
class="accordion-collapse collapse"
id="category-tree-{$node.id|escape:'htmlall':'UTF-8'}"
>
<div class="accordion-body">
{categories nodes=$node.children depth=$depth+1}
</div>
</div>
{/if}
</li>
{/foreach}
</ul>
{/if}
{/strip}
{/function}
{if !empty($categories.children)}
<div class="ps-categorytree {$componentName} left-block">
<p class="left-block__title">
<a class="left-block__title-link" href="{$categories.link nofilter}">
{$categories.name|escape:'htmlall':'UTF-8'}
</a>
</p>
<div class="accordion accordion-flush accordion--category">
<nav aria-label="{l s='Categories' d='Shop.Theme.Catalog'}">
{if !empty($categories.children)}
<div class="{$componentName}__child">
{categories nodes=$categories.children}
</div>
{/if}
</nav>
</div>
</div>
{/if}

View File

@@ -0,0 +1,14 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,14 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,14 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,50 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div class="card border-1 mb-3">
<div class="card-body">
<p class="h2">{l s='Payment information' d='Shop.Theme.Checkout'}</p>
<p class="h3 card-subtitle text-secondary mb-3">{l s='Pay by Check' d='Modules.Checkpayment.Shop'}</p>
{if $status === 'ok'}
<p>
{l s='You have chosen payment by check.' d='Modules.Checkpayment.Shop'}<br/>
{l s='Your check must include following details:' d='Modules.Checkpayment.Shop'}
</p>
<dl class="dl-list mb-3">
<dt>{l s='Payment amount' d='Modules.Checkpayment.Shop'}</dt>
<dd>{$total_to_pay}</dd>
<dt>{l s='Payable to the order of' d='Modules.Checkpayment.Shop'}</dt>
<dd>{if $checkName}{$checkName}{else}___________{/if}</dd>
<dt>{l s='Mail to' d='Modules.Checkpayment.Shop'}</dt>
<dd>{if $checkAddress}{$checkAddress nofilter}{else}___________{/if}</dd>
</dl>
<p class="mb-0">
{if !isset($reference)}
{l s='Do not forget to insert your order number #%d.' sprintf=[$id_order] d='Modules.Checkpayment.Shop'}<br aria-hidden="true">
{else}
{l s='Do not forget to insert your order reference %s.' sprintf=[$reference] d='Modules.Checkpayment.Shop'}<br aria-hidden="true">
{/if}
{l s='An email has been sent to you with this information.' d='Modules.Checkpayment.Shop'}<br aria-hidden="true">
{l s='Your order will be sent as soon as we receive your payment.' d='Modules.Checkpayment.Shop'}
</p>
{else}
<div class="alert alert-warning mb-0" role="alert">
{l s='We have noticed that there is a problem with your order. If you think this is an error, you can contact our' d='Modules.Checkpayment.Shop'}
<a class="alert-link" href="{$link->getPageLink('contact', true)|escape:'html'}">{l s='customer service department.' d='Modules.Checkpayment.Shop'}</a>
</div>
{/if}
</div>
{if $status === 'ok'}
<div class="card-footer p-3 border-1">
{l s='For any questions or for further information, please contact our' d='Modules.Checkpayment.Shop'}
<a href="{$link->getPageLink('contact', true)|escape:'html'}">{l s='customer service department.' d='Modules.Checkpayment.Shop'}</a>
</div>
{/if}
</div>

View File

@@ -0,0 +1,14 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,17 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div id="_desktop_ps_contactinfo">
<div class="ps-contactinfo">
{if $contact_infos.phone}
<a class="ps-contactinfo__phone" href="tel:{$contact_infos.phone}" aria-label="{l s='Call us at: %phone%' sprintf=['%phone%' => $contact_infos.phone] d='Shop.Theme.Global'}">
{l s='Call us: %phone%' sprintf=['%phone%' => $contact_infos.phone] d='Shop.Theme.Global'}
</a>
{else}
<a class="ps-contactinfo__email" href="{$urls.pages.contact}">
{l s='Contact us' d='Shop.Theme.Global'}
</a>
{/if}
</div>
</div>

View File

@@ -0,0 +1,63 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div class="ps-contactinfo">
<p class="h2 ps-contactinfo__title">{l s='Store information' d='Shop.Theme.Global'}</p>
<div class="ps-contactinfo__item">
<i class="material-icons" aria-hidden="true">&#xF00F;</i>
<address class="ps-contactinfo__info">
{$contact_infos.address.formatted nofilter}
</address>
</div>
{if $contact_infos.phone}
<hr>
<div class="ps-contactinfo__item">
<i class="material-icons" aria-hidden="true">&#xE0CD;</i>
<div class="ps-contactinfo__info">
<a href="tel:{$contact_infos.phone}"
aria-label="{l s='Call us at: %phone%' sprintf=['%phone%' => $contact_infos.phone] d='Shop.Theme.Global'}">
{$contact_infos.phone}
</a>
</div>
</div>
{/if}
{if $contact_infos.fax}
<hr>
<div class="ps-contactinfo__item">
<i class="material-icons" aria-hidden="true">&#xE8AD;</i>
<div class="ps-contactinfo__info">
<a href="tel:{$contact_infos.fax}"
aria-label="{l s='Send us a fax to: %fax%' sprintf=['%fax%' => $contact_infos.fax] d='Shop.Theme.Global'}">
{$contact_infos.fax}
</a>
</div>
</div>
{/if}
{if $contact_infos.email && $display_email}
<hr>
<div class="ps-contactinfo__item">
<i class="material-icons" aria-hidden="true">&#xE158;</i>
<div class="ps-contactinfo__info ps-contactinfo__info--email">
<a href="mailto:{$contact_infos.email}"
aria-label="{l s='Send us an email to: %email%' sprintf=['%email%' => $contact_infos.email] d='Shop.Theme.Global'}">
{$contact_infos.email}
</a>
</div>
</div>
{/if}
{if !empty($contact_infos.details)}
<hr>
<div class="ps-contactinfo__item">
<i class="material-icons" aria-hidden="true">&#xE88E;</i>
<div class="ps-contactinfo__info">
{$contact_infos.details|nl2br nofilter}
</div>
</div>
{/if}
</div>

View File

@@ -0,0 +1,68 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<section
class="ps-contactinfo footer-block col-md-6 col-lg-3"
aria-labelledby="footer_contactinfo_title"
>
<p
id="footer_contactinfo_title"
class="footer-block__title footer-block__title--toggle"
>
{l s='Store information' d='Shop.Theme.Global'}
<button
class="stretched-link collapsed d-md-none"
type="button"
data-bs-toggle="collapse"
data-bs-target="#footer_contactinfo"
aria-expanded="false"
aria-controls="footer_contactinfo"
>
<span class="visually-hidden">
{l s='Toggle store information' d='Shop.Theme.Global'}
</span>
<i class="material-icons" aria-hidden="true">&#xE313;</i>
</button>
</p>
<div class="footer-block__content collapse" id="footer_contactinfo">
{if $contact_infos.address.formatted}
<address class="ps-contactinfo__infos">
{$contact_infos.address.formatted nofilter}
</address>
{/if}
{if $contact_infos.phone}
<div class="ps-contactinfo__phone">
<i class="material-icons" aria-hidden="true">&#xE0CD;</i>
<a href="tel:{$contact_infos.phone}"
aria-label="{l s='Call us at: %phone%' sprintf=['%phone%' => $contact_infos.phone] d='Shop.Theme.Global'}">
{$contact_infos.phone}
</a>
</div>
{/if}
{if $contact_infos.fax}
<div class="ps-contactinfo__fax">
<i class="material-icons" aria-hidden="true">&#xE8AD;</i>
<a href="tel:{$contact_infos.fax}"
aria-label="{l s='Send us a fax to: %fax%' sprintf=['%fax%' => $contact_infos.fax] d='Shop.Theme.Global'}">
{$contact_infos.fax}
</a>
</div>
{/if}
{if $contact_infos.email && $display_email}
<div class="ps-contactinfo__email">
<i class="material-icons" aria-hidden="true">&#xE158;</i>
<a href="mailto:{$contact_infos.email}"
aria-label="{l s='Send us an email to: %email%' sprintf=['%email%' => $contact_infos.email] d='Shop.Theme.Global'}">
{$contact_infos.email}
</a>
</div>
{/if}
</div>
</section>

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,12 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{extends file="components/module-products.tpl"}
{block name='module_products_name'}ps-crossselling{/block}
{block name='module_products_title'}
{include file='components/section-title.tpl' title={l s='Clients also bought' d='Shop.Theme.Catalog'}}
{/block}

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,14 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div id="_desktop_ps_currencyselector">
<div class="ps-currencyselector">
<select class="form-select js-currency-selector" aria-label="{l s='Change currency' d='Shop.Theme.Global'}">
{foreach from=$currencies item=currency}
<option value="{$currency.url}"{if $currency.current} selected="selected"{/if}>{$currency.iso_code}{if $currency.sign !== $currency.iso_code} {$currency.sign}{/if}</option>
{/foreach}
</select>
</div>
</div>

View File

@@ -0,0 +1,115 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<nav
class="ps-customeraccountlinks footer-block col-md-6 col-lg-3"
role="navigation"
aria-labelledby="footer_customeraccount_title">
<p
id="footer_customeraccount_title"
class="footer-block__title footer-block__title--toggle"
>
<a href="{$urls.pages.my_account}" rel="nofollow">
{l s='Your account' d='Shop.Theme.Customeraccount'}
</a>
<button
class="stretched-link collapsed d-md-none"
type="button"
aria-expanded="false"
aria-controls="footer_customeraccountlinks"
data-bs-target="#footer_customeraccountlinks"
data-bs-toggle="collapse"
>
<span class="visually-hidden">
{l s='Toggle your account links' d='Shop.Theme.Customeraccount'}
</span>
<i class="material-icons" aria-hidden="true">&#xE313;</i>
</button>
</p>
<div class="footer-block__content collapse" id="footer_customeraccountlinks">
<ul class="footer-block__list">
{if $customer.is_logged}
<li>
<a href="{$urls.pages.identity}" rel="nofollow">
{l s='Information' d='Shop.Theme.Customeraccount'}
</a>
</li>
{if $customer.addresses|count}
<li>
<a href="{$urls.pages.addresses}" rel="nofollow">
{l s='Addresses' d='Shop.Theme.Customeraccount'}
</a>
</li>
{else}
<li>
<a href="{$urls.pages.address}" rel="nofollow">
{l s='Add first address' d='Shop.Theme.Customeraccount'}
</a>
</li>
{/if}
{if !$configuration.is_catalog}
<li>
<a href="{$urls.pages.history}" rel="nofollow">
{l s='Orders' d='Shop.Theme.Customeraccount'}
</a>
</li>
{/if}
{if !$configuration.is_catalog}
<li>
<a href="{$urls.pages.order_slip}" rel="nofollow">
{l s='Credit slips' d='Shop.Theme.Customeraccount'}
</a>
</li>
{/if}
{if $configuration.voucher_enabled && !$configuration.is_catalog}
<li>
<a href="{$urls.pages.discount}" rel="nofollow">
{l s='Vouchers' d='Shop.Theme.Customeraccount'}
</a>
</li>
{/if}
{if $configuration.return_enabled && !$configuration.is_catalog}
<li>
<a href="{$urls.pages.order_follow}" rel="nofollow">
{l s='Merchandise returns' d='Shop.Theme.Customeraccount'}
</a>
</li>
{/if}
{hook h='displayMyAccountBlock'}
<li>
<a class="logout text-danger-on-dark" href="{$urls.actions.logout}" rel="nofollow">
{l s='Sign out' d='Shop.Theme.Actions'}
</a>
</li>
{else}
<li>
<a href="{$urls.pages.guest_tracking}" rel="nofollow">
{l s='Order tracking' d='Shop.Theme.Customeraccount'}
</a>
</li>
<li>
<a href="{$urls.pages.my_account}" rel="nofollow">
{l s='Sign in' d='Shop.Theme.Actions'}
</a>
</li>
<li>
<a href="{$urls.pages.register}" rel="nofollow">
{l s='Create an account' d='Shop.Theme.Customeraccount'}
</a>
</li>
{hook h='displayMyAccountBlock'}
{/if}
</ul>
</div>
</nav>

View File

@@ -0,0 +1,148 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div id="_desktop_ps_customersignin">
<div class="ps-customersignin">
{if $customer.is_logged}
<div class="dropdown header-block">
<button
class="dropdown-toggle header-block__action-btn border-0 bg-transparent"
id="userMenuButton"
data-bs-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false"
aria-label="{l s='View my account (%customerName%)' sprintf=['%customerName%' => $customerName] d='Shop.Theme.Customeraccount'}"
>
<i class="material-icons header-block__icon" aria-hidden="true">&#xE853;</i>
<span class="header-block__title d-none d-md-block d-lg-none">
{$customer.firstname|capitalize|truncate:2:".":true}{$customer.lastname|capitalize|truncate:2:".":true}
</span>
<span class="header-block__title d-lg-inline d-none">
{$customerName|capitalize|truncate:22:"...":true}
</span>
</button>
<div class="dropdown-menu dropdown-menu-start" aria-labelledby="userMenuButton">
<a
href="{$urls.pages.my_account}"
class="dropdown-item"
rel="nofollow"
{if $urls.current_url == $urls.pages.my_account}aria-current="page"{/if}
>
<i class="material-icons me-2" aria-hidden="true">&#xF02E;</i>
{l s='Your account' d='Shop.Theme.Customeraccount'}
</a>
<div class="dropdown-divider"></div>
<a
href="{$urls.pages.identity}"
class="dropdown-item"
rel="nofollow"
{if $urls.current_url == $urls.pages.identity}aria-current="page"{/if}
>
<i class="material-icons me-2" aria-hidden="true">&#xE853;</i>
{l s='Information' d='Shop.Theme.Customeraccount'}
</a>
{if $customer.addresses|count}
<a
href="{$urls.pages.addresses}"
class="dropdown-item"
rel="nofollow"
{if $urls.current_url == $urls.pages.addresses}aria-current="page"{/if}
>
<i class="material-icons me-2" aria-hidden="true">&#xF00F;</i>
{l s='Addresses' d='Shop.Theme.Customeraccount'}
</a>
{else}
<a
href="{$urls.pages.address}"
class="dropdown-item"
rel="nofollow"
{if $urls.current_url == $urls.pages.address}aria-current="page"{/if}
>
<i class="material-icons me-2" aria-hidden="true">&#xEF3A;</i>
{l s='Add first address' d='Shop.Theme.Customeraccount'}
</a>
{/if}
{if !$configuration.is_catalog}
<a
href="{$urls.pages.history}"
class="dropdown-item"
rel="nofollow"
{if $urls.current_url == $urls.pages.history}aria-current="page"{/if}
>
<i class="material-icons me-2" aria-hidden="true">&#xE916;</i>
{l s='Orders' d='Shop.Theme.Customeraccount'}
</a>
{/if}
{if !$configuration.is_catalog}
<a
href="{$urls.pages.order_slip}"
class="dropdown-item"
rel="nofollow"
{if $urls.current_url == $urls.pages.order_slip}aria-current="page"{/if}
>
<i class="material-icons me-2" aria-hidden="true">&#xE8B0;</i>
{l s='Credit slips' d='Shop.Theme.Customeraccount'}
</a>
{/if}
{if $configuration.voucher_enabled && !$configuration.is_catalog}
<a
href="{$urls.pages.discount}"
class="dropdown-item"
rel="nofollow"
{if $urls.current_url == $urls.pages.discount}aria-current="page"{/if}
>
<i class="material-icons me-2" aria-hidden="true">&#xE54E;</i>
{l s='Vouchers' d='Shop.Theme.Customeraccount'}
</a>
{/if}
{if $configuration.return_enabled && !$configuration.is_catalog}
<a
href="{$urls.pages.order_follow}"
class="dropdown-item"
rel="nofollow"
{if $urls.current_url == $urls.pages.order_follow}aria-current="page"{/if}
>
<i class="material-icons me-2" aria-hidden="true">&#xE860;</i>
{l s='Merchandise returns' d='Shop.Theme.Customeraccount'}
</a>
{/if}
<div class="dropdown-divider"></div>
<a
href="{$logout_url}"
class="dropdown-item"
rel="nofollow"
>
<i class="material-icons me-2" aria-hidden="true">&#xE879;</i>
{l s='Sign out' d='Shop.Theme.Actions'}
</a>
</div>
</div>
{else}
<div class="header-block">
<a
href="{$urls.pages.authentication}?back={$urls.current_url|urlencode}"
class="header-block__action-btn"
rel="nofollow"
aria-label="{l s='Sign in' d='Shop.Theme.Actions'}"
>
<i class="material-icons header-block__icon" aria-hidden="true">&#xE853;</i>
<span class="d-none d-md-inline header-block__title">
{l s='Sign in' d='Shop.Theme.Actions'}
</span>
</a>
</div>
{/if}
</div>
</div>

View File

@@ -0,0 +1,14 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../');
exit;

View File

@@ -0,0 +1,10 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<section class="ps-customtext">
<div class="container">
{$cms_infos.text nofilter}
</div>
</section>

View File

@@ -0,0 +1 @@
/* mailalert.js */

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,36 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<li class="ps-emailalerts__product" data-ps-ref="emailalerts-product">
<a href="{$mailAlert.link}" class="ps-emailalerts__product-image-link" rel="nofollow">
<img class="ps-emailalerts__product-image img-fluid" src="{$mailAlert.cover_url}" alt="{$mailAlert.name}" loading="lazy">
</a>
<div class="ps-emailalerts__product-content">
<a href="{$mailAlert.link}">
<span class="ps-emailalerts__product-name">{$mailAlert.name}</span>
</a>
{if $mailAlert.attributes_small}
<span class="ps-emailalerts__product-attributes">
{l s='Attributes: %attributes%' sprintf=['%attributes%' => $mailAlert.attributes_small] d='Modules.Emailalerts.Shop'}
</span>
{/if}
{capture name='deleteData'}{strip}{ldelim}
"id_product": "{$mailAlert.id_product|intval}",
"id_product_attribute": "{$mailAlert.id_product_attribute|intval}",
"url": "{url entity='module' name='ps_emailalerts' controller='actions' params=['process' => 'remove']}"
{rdelim}{/strip}{/capture}
<button type="button"
aria-label="{l s='Delete %productName% mail alert' sprintf=['%productName%' => $mailAlert.name] d='Modules.Emailalerts.Shop'}"
class="link-danger ps-emailalerts__product-delete"
data-ps-action="emailalerts-delete"
data-ps-data="{$smarty.capture.deleteData}"
>
{l s='Delete' d='Modules.Emailalerts.Shop'}
</button>
</div>
</li>

View File

@@ -0,0 +1,25 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{extends file='customer/page.tpl'}
{block name='page_title'}
{l s='My alerts' d='Modules.Emailalerts.Shop'}
{/block}
{block name='page_content'}
<p>{l s='Manage your mail alerts to stay informed about product availability and updates.' d='Modules.Emailalerts.Shop'}</p>
{if $mailAlerts}
<ul class="ps-emailalerts__product-list" data-ps-ref="emailalerts-product-list">
{foreach from=$mailAlerts item=mailAlert}
{include 'module:ps_emailalerts/views/templates/front/mailalerts-account-line.tpl' mailAlert=$mailAlert}
{/foreach}
</ul>
<div class="alert alert-info d-none" role="alert" data-ps-ref="emailalerts-account-no-alerts">{l s='You do not have any mail alerts.' d='Modules.Emailalerts.Shop'}</div>
{else}
<div class="alert alert-info" role="alert" data-ps-ref="emailalerts-account-no-alerts">{l s='You do not have any mail alerts.' d='Modules.Emailalerts.Shop'}</div>
{/if}
{/block}

View File

@@ -0,0 +1,14 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,10 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<li>
<a href="{url entity='module' name='ps_emailalerts' controller='account'}" rel="nofollow">
{l s='My alerts' d='Shop.Theme.Catalog'}
</a>
</li>

View File

@@ -0,0 +1,14 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<a
class="account-menu__link {if $urls.current_url === $link->getModuleLink(ps_emailalerts, 'account')} account-menu__link--active{/if}"
id="emailalerts_link"
href="{$link->getModuleLink(ps_emailalerts, 'account')}"
{if $urls.current_url === $link->getModuleLink(ps_emailalerts, 'account')}aria-current="page"{/if}
>
<i class="account-menu__icon material-icons" aria-hidden="true">&#xE151;</i>
{l s='My alerts' d='Shop.Theme.Catalog'}
</a>

View File

@@ -0,0 +1,87 @@
{*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*}
<div class="ps-emailalerts ps-emailalerts--product"
data-ps-ref="emailalerts"
data-ps-component="gdpr"
data-url="{url entity='module' name='ps_emailalerts' controller='actions' params=['process' => 'add']}">
{if empty($has_notification)}
<div class="ps-emailalerts__content" data-ps-ref="emailalerts-content">
<p class="h4 mb-0">
{l s='Notify me when available' d='Modules.Emailalerts.Shop'}
</p>
{if isset($email) AND $email}
<p class="mb-0">
{l s='Interested in this product? Drop us an email and we will let you know when it\'s available for order.' d='Modules.Emailalerts.Shop'}
</p>
<input class="form-control"
type="email"
name="email"
data-ps-ref="emailalerts-email"
placeholder="{l s='Your email address' d='Modules.Emailalerts.Shop'}"
aria-label="{l s='Your email address' d='Modules.Emailalerts.Shop'}"
autocomplete="email"
>
{else}
<p class="mb-0">
{l s='Interested in this product? Click below and we will let you know when it\'s available for order.' d='Modules.Emailalerts.Shop'}
</p>
{/if}
{capture name='subscribeData'}{strip}{ldelim}
"id_product": "{$product.id_product|intval}",
"id_product_attribute": "{$product.id_product_attribute|intval}"
{rdelim}{/strip}{/capture}
<button data-ps-action="emailalerts-subscribe"
data-ps-ref="gdpr-submit"
data-ps-data="{$smarty.capture.subscribeData}"
class="btn btn-primary"
rel="nofollow"
role="button"
>
{l s='Notify me when available' d='Modules.Emailalerts.Shop'}
</button>
{if !empty($id_module)}
{capture name='gdprContent'}{hook h='displayGDPRConsent' id_module=$id_module}{/capture}
{if $smarty.capture.gdprContent}
<div class="fs-6 text-body-secondary">
{$smarty.capture.gdprContent nofilter}
</div>
{/if}
{/if}
</div>
<div class="d-none" data-ps-target="emailalerts-alerts" aria-live="assertive"></div>
{else}
<div class="alert alert-info" role="alert">
{l s='You will be notified when this product is available.' d='Modules.Emailalerts.Shop'}
</div>
{/if}
</div>

View File

@@ -0,0 +1,14 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,35 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<section class="ps-emailsubscription ps-emailsubscription--column left-block" id="emailsubscription_anchor_{$hookName}">
<p class="left-block__title">
{l s='Get our latest news and special sales' d='Shop.Theme.Global'}
</p>
<form action="{$urls.current_url}#emailsubscription_anchor_{$hookName}" method="post">
{if $msg}
<div class="alert {if $nw_error}alert-danger{else}alert-success{/if} alert-dismissible fade show mb-2" role="alert" tabindex="0">
{$msg}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{/if}
<input class="form-control mb-2" type="email" name="email" value="{$value}" placeholder="{l s='Your email address' d='Modules.Emailsubscription.Shop'}" aria-label="{l s='Your email address' d='Modules.Emailsubscription.Shop'}" autocomplete="email" required />
<input class="btn btn-primary mb-2 w-100" type="submit" name="submitNewsletter" value="{l s='Subscribe' d='Shop.Theme.Actions'}" aria-label="{l s='Subscribe to our newsletter' d='Modules.Emailsubscription.Shop'}" id="alert-email-subscription" />
{capture name="display_gdpr_consent"}{hook h='displayGDPRConsent' id_module=$id_module}{/capture}
{if isset($smarty.capture.display_gdpr_consent) && $smarty.capture.display_gdpr_consent}
<div class="fs-6 mb-2">
{$smarty.capture.display_gdpr_consent nofilter}
</div>
{/if}
{if $conditions}
<p class="fs-6 text-body-secondary mb-0">{$conditions}</p>
{/if}
{hook h='displayNewsletterRegistration'}
<input type="hidden" value="{$hookName}" name="blockHookName" />
<input type="hidden" name="action" value="0" />
</form>
</section>

View File

@@ -0,0 +1,41 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<section class="ps-emailsubscription bg-body-tertiary py-3 py-lg-4" id="emailsubscription_anchor_{$hookName}">
<div class="container">
<div class="row justify-content-center">
<p class="h3 col-lg-4">
{l s='Get our latest news and special sales' d='Shop.Theme.Global'}
</p>
<form class="col-lg-6" action="{$urls.current_url}#emailsubscription_anchor_{$hookName}" method="post">
{if $msg}
<div class="alert {if $nw_error}alert-danger{else}alert-success{/if} alert-dismissible fade show mb-2" role="alert" tabindex="0">
{$msg}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{/if}
<div class="d-flex gap-2 align-items-center mb-2">
<input class="form-control flex-grow-1" type="email" name="email" value="{$value}" placeholder="{l s='Your email address' d='Modules.Emailsubscription.Shop'}" aria-label="{l s='Your email address' d='Modules.Emailsubscription.Shop'}" autocomplete="email" required />
<input class="btn btn-primary" type="submit" name="submitNewsletter" value="{l s='Subscribe' d='Shop.Theme.Actions'}" aria-label="{l s='Subscribe to our newsletter' d='Modules.Emailsubscription.Shop'}" />
</div>
{capture name="display_gdpr_consent"}{hook h='displayGDPRConsent' id_module=$id_module}{/capture}
{if isset($smarty.capture.display_gdpr_consent) && $smarty.capture.display_gdpr_consent}
<div class="fs-6 mb-2">
{$smarty.capture.display_gdpr_consent nofilter}
</div>
{/if}
{if $conditions}
<p class="fs-6 text-body-secondary mb-0">{$conditions}</p>
{/if}
{hook h='displayNewsletterRegistration'}
<input type="hidden" value="{$hookName}" name="blockHookName" />
<input type="hidden" name="action" value="0" />
</form>
</div>
</div>
</section>

View File

@@ -0,0 +1,22 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{if isset($listing.rendered_facets) && !empty($listing.rendered_facets)}
<div id="search_filters_wrapper" class="ps-facetedsearch d-none d-md-block left-block">
<div id="_desktop_faceted">
{$listing.rendered_facets nofilter}
</div>
</div>
<div class="ps-facetedsearch ps-facetedsearch--mobile offcanvas offcanvas-start" tabindex="-1" id="offcanvas-faceted" aria-labelledby="faceted-offcanvas-label">
<div class="offcanvas-header">
<p class="h5 offcanvas-title" id="faceted-offcanvas-label">{l s='Filter By' d='Shop.Theme.Actions'}</p>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<div id="_mobile_faceted"></div>
</div>
</div>
{/if}

View File

@@ -0,0 +1 @@
/* front.js */

View File

@@ -0,0 +1,32 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{$componentName = 'active-filters'}
<div id="js-active-search-filters" class="{$componentName}">
{if $activeFilters|count}
<ul class="{$componentName}__list">
{block name='active_filters_title'}
<li class="{$componentName}__item">
<span class="{$componentName}__title">{l s='Active filters' d='Shop.Theme.Global'}</span>
</li>
{/block}
{foreach from=$activeFilters item="filter"}
{block name='active_filters_item'}
<li class="{$componentName}__item">
<a
class="{$componentName}__link btn btn-outline-tertiary rounded-pill btn-sm js-search-link"
href="{$filter.nextEncodedFacetsURL}"
rel="nofollow"
aria-label="{l s='Remove %1$s filter: %2$s' d='Shop.Theme.Catalog' sprintf=[$filter.facetLabel|lower, $filter.label]}"
>
{l s='%1$s:' d='Shop.Theme.Catalog' sprintf=[$filter.facetLabel]} {$filter.label}
<i class="material-icons" aria-hidden="true">&#xE14C;</i>
</a>
</li>
{/block}
{/foreach}
</ul>
{/if}
</div>

View File

@@ -0,0 +1,265 @@
{**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License 3.0 (AFL-3.0)
* that is bundled with this package in the file LICENSE.md.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/AFL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright Since 2007 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0)
*}
{$componentName = 'search-filters'}
{if $displayedFacets|count}
<div id="search-filters" class="{$componentName}" role="region" aria-label="{l s='Product filters' d='Shop.Theme.Global'}">
{block name='facets_title'}
<p class="left-block__title d-none d-md-block">
{l s='Filter By' d='Shop.Theme.Actions'}
</p>
{/block}
{block name='facets_clearall_button'}
{if $activeFilters|count}
<div class="{$componentName}__clear">
<button
data-search-url="{$clear_all_link}"
class="btn btn-outline-tertiary js-search-filters-clear-all"
>
<i class="material-icons" aria-hidden="true">&#xE5CD;</i>
{l s='Clear all' d='Shop.Theme.Actions'}
</button>
</div>
{/if}
{/block}
<div class="accordion accordion-flush accordion--small">
{foreach from=$displayedFacets item="facet" name="facets"}
<section class="accordion-item" data-type="{$facet.type}" data-name="{$facet.label}">
{assign var=_expand_id value=10|mt_rand:100000}
{assign var=_collapse value=true}
{foreach from=$facet.filters item="filter"}
{if $filter.active}{assign var=_collapse value=false}{/if}
{/foreach}
<button
class="accordion-button {if $_collapse} collapsed{/if}"
type="button"
data-bs-target="#facet_{$_expand_id}"
data-bs-toggle="collapse"
aria-expanded="{if !$_collapse}true{else}false{/if}"
>
{$facet.label}
</button>
<div id="facet_{$_expand_id}" class="accordion-collapse collapse{if !$_collapse} show{/if}">
{if in_array($facet.widgetType, ['radio', 'checkbox'])}
{block name='facet_item_other'}
<ul class="accordion-body">
{foreach from=$facet.filters key=filter_key item="filter"}
{assign var="isColorOrTexture" value=(isset($filter.properties.color) || isset($filter.properties.texture))}
{if !$filter.displayed}
{continue}
{/if}
<li>
<div class="{$componentName}__item facet-label{if $filter.active} active {/if}">
{if $facet.multipleSelectionAllowed}
<div class="{$componentName}__form-check{if $isColorOrTexture} {$componentName}__form-check--color{/if} form-check">
<input
class="form-check-input{if $isColorOrTexture} d-none{/if}"
id="facet_input_{$_expand_id}_{$filter_key}"
data-search-url="{$filter.nextEncodedFacetsURL}"
type="checkbox"
{if $filter.active }checked{/if}
>
<label
class="{$componentName}__form-label form-check-label"
for="facet_input_{$_expand_id}_{$filter_key}"
data-ps-ref="color-label"
>
{if isset($filter.properties.color)}
<span
class="color color-sm{if $filter.active } active{/if}"
style="background-color:{$filter.properties.color}"
role="checkbox"
aria-checked="{if $filter.active}true{else}false{/if}"
tabindex="0"
aria-labelledby="facet_label_{$_expand_id}_{$filter_key}"
></span>
<span class="{$componentName}__color-label" id="facet_label_{$_expand_id}_{$filter_key}">
{$filter.label}
{if $filter.magnitude and $show_quantities}
<span class="{$componentName}__magnitude">
({$filter.magnitude}<span class="visually-hidden">{if $filter.magnitude == 1}{l s='result' d='Shop.Theme.Global'}{else}{l s='results' d='Shop.Theme.Global'}{/if}</span>)
</span>
{/if}
</span>
{elseif isset($filter.properties.texture)}
<span
class="color color-sm{if $filter.active } active{/if}"
style="background-image:url({$filter.properties.texture})"
role="checkbox"
aria-checked="{if $filter.active}true{else}false{/if}"
tabindex="0"
aria-labelledby="facet_label_{$_expand_id}_{$filter_key}"
></span>
<span class="{$componentName}__color-label" id="facet_label_{$_expand_id}_{$filter_key}">
{$filter.label}
{if $filter.magnitude and $show_quantities}
<span class="{$componentName}__magnitude">
({$filter.magnitude}<span class="visually-hidden">{if $filter.magnitude == 1}{l s='result' d='Shop.Theme.Global'}{else}{l s='results' d='Shop.Theme.Global'}{/if}</span>)
</span>
{/if}
</span>
{else}
<a
href="{$filter.nextEncodedFacetsURL}"
class="{$componentName}__link search-link js-search-link"
rel="nofollow"
tabindex="-1"
>
{$filter.label}
{if $filter.magnitude and $show_quantities}
<span class="{$componentName}__magnitude">
({$filter.magnitude}<span class="visually-hidden">{if $filter.magnitude == 1}{l s='result' d='Shop.Theme.Global'}{else}{l s='results' d='Shop.Theme.Global'}{/if}</span>)
</span>
{/if}
</a>
{/if}
</label>
</div>
{else}
<div class="{$componentName}__form-check form-check">
<input
class="form-check-input"
id="facet_input_{$_expand_id}_{$filter_key}"
data-search-url="{$filter.nextEncodedFacetsURL}"
type="radio"
name="filter {$facet.label}"
{if $filter.active }checked{/if}
>
<label class="{$componentName}__form-label form-check-label" for="facet_input_{$_expand_id}_{$filter_key}">
<a
href="{$filter.nextEncodedFacetsURL}"
class="{$componentName}__link search-link js-search-link"
rel="nofollow"
tabindex="-1"
>
{$filter.label}
{if $filter.magnitude and $show_quantities}
<span class="{$componentName}__magnitude">
({$filter.magnitude}<span class="visually-hidden">{if $filter.magnitude == 1}{l s='result' d='Shop.Theme.Global'}{else}{l s='results' d='Shop.Theme.Global'}{/if}</span>)
</span>
{/if}
</a>
</label>
</div>
{/if}
</div>
</li>
{/foreach}
</ul>
{/block}
{elseif $facet.widgetType == 'dropdown'}
{block name='facet_item_dropdown'}
<ul class="accordion-body">
<li>
<div class="{$componentName}__item facet-dropdown dropdown">
<button class="{$componentName}__dropdown-toggle btn btn-outline-tertiary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
{assign var="active_found" value=false}
{foreach from=$facet.filters item="filter"}
{if $filter.active}
{$filter.label}
{if $filter.magnitude and $show_quantities}
<span class="{$componentName}__magnitude">
({$filter.magnitude}<span class="visually-hidden">{if $filter.magnitude == 1}{l s='result' d='Shop.Theme.Global'}{else}{l s='results' d='Shop.Theme.Global'}{/if}</span>)
</span>
{/if}
{$active_found = true}
{/if}
{/foreach}
{if !$active_found}
{l s='(No option selected)' d='Shop.Theme.Global'}
{/if}
</button>
<div class="{$componentName}__dropdown-menu dropdown-menu dropdown-menu-start">
{foreach from=$facet.filters item="filter"}
{if !$filter.active}
<a
rel="nofollow"
href="{$filter.nextEncodedFacetsURL}"
class="dropdown-item select-list js-search-link"
>
{$filter.label}
{if $filter.magnitude and $show_quantities}
<span class="{$componentName}__magnitude">
({$filter.magnitude}<span class="visually-hidden">{if $filter.magnitude == 1}{l s='result' d='Shop.Theme.Global'}{else}{l s='results' d='Shop.Theme.Global'}{/if}</span>)
</span>
{/if}
</a>
{/if}
{/foreach}
</div>
</div>
</li>
</ul>
{/block}
{elseif $facet.widgetType == 'slider'}
{block name='facet_item_slider'}
{foreach from=$facet.filters item="filter"}
<div class="{$componentName}__slider-container accordion-body js-faceted-filter-slider">
<div
class="{$componentName}__slider js-faceted-slider-container"
data-slider-min="{$facet.properties.min}"
data-slider-max="{$facet.properties.max}"
data-slider-id="{$_expand_id}"
data-slider-values="{$filter.value|@json_encode}"
data-slider-unit="{$facet.properties.unit}"
{if isset($facet.properties.specifications.currencyCode) && $facet.properties.specifications.currencyCode != ''}
data-slider-currency="{$facet.properties.specifications.currencyCode}"
{/if}
data-slider-label="{$facet.label}"
data-slider-specifications="{$facet.properties.specifications|@json_encode}"
data-slider-encoded-url="{$filter.nextEncodedFacetsURL}"
data-slider-direction="{$language.is_rtl}"
></div>
<div class="{$componentName}__slider-values js-faceted-values"></div>
<input
type="hidden"
class="form-range-start js-faceted-slider js-faceted-slider-start"
id="slider-range_{$_expand_id}-start"
>
<input
type="hidden"
class="form-range-start js-faceted-slider js-faceted-slider-end"
id="slider-range_{$_expand_id}-end"
>
</div>
{/foreach}
{/block}
{/if}
</div>
</section>
{/foreach}
</div>
</div>
{/if}

View File

@@ -0,0 +1,19 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{extends file="components/module-products.tpl"}
{block name='module_products_name'}ps-featuredproducts{/block}
{block name='module_products_title'}
{include file='components/section-title.tpl' title={l s='Featured products' d='Shop.Theme.Catalog'}}
{/block}
{block name='module_products_footer'}
<a class="btn btn-outline-primary" href="{$allProductsLink}">
{l s='All featured products' d='Shop.Theme.Catalog'}
<i class="material-icons" aria-hidden="true">&#xE315;</i>
</a>
{/block}

View File

@@ -0,0 +1 @@
/* homeslider.js */

View File

@@ -0,0 +1 @@
/* responsiveslides.min.js */

View File

@@ -0,0 +1,56 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{if $homeslider.slides}
<section class="ps-imageslider">
<div
id="ps_imageslider"
class="carousel slide"
{if $homeslider.speed > 0}data-bs-ride="carousel"{/if}
{if $homeslider.pause !== "hover"}data-bs-pause="false"{/if}
{if $homeslider.wrap === "false"}data-bs-wrap="false"{/if}
>
<div class="carousel-indicators">
{foreach from=$homeslider.slides item=slide name='homeslider'}
<button
type="button"
data-bs-target="#ps_imageslider"
data-bs-slide-to="{$slide@index}"
aria-label="{l s='Go to slide %slide_index%' sprintf=['%slide_index%'=> $slide@iteration] d='Shop.Theme.Global'}"
class="outline {if $slide@first}active{/if}"
{if $slide@first}aria-current="true"{/if}
></button>
{/foreach}
</div>
<div class="carousel-inner" role="list" aria-label="{l s='Carousel container' d='Shop.Theme.Global'}">
{foreach from=$homeslider.slides item=slide name='homeslider'}
<div class="carousel-item{if $slide@first} active{/if}" role="listitem"{if $homeslider.speed > 0} data-bs-interval="{$homeslider.speed}"{/if}>
{if !empty($slide.url)}<a class="ps-imageslider__link outline d-block h-100 text-body" href="{$slide.url}">{/if}
<figure class="ps-imageslider__figure">
<img class="w-100" src="{$slide.image_url}" alt="{$slide.legend|escape}" {if $slide@first}fetchpriority="high"{else}loading="lazy"{/if} width="{$slide.sizes[0]}" height="{$slide.sizes[1]}">
{if $slide.title || $slide.description}
<figcaption class="ps-imageslider__figcaption carousel-caption d-none d-lg-block fs-5">
{if $slide.title}<h2 class="h1 text-uppercase">{$slide.title}</h2>{/if}
{if $slide.description}<div>{$slide.description nofilter}</div>{/if}
</figcaption>
{/if}
</figure>
{if !empty($slide.url)}</a>{/if}
</div>
{/foreach}
</div>
<button class="carousel-control-prev outline outline--rounded" type="button" data-bs-target="#ps_imageslider" data-bs-slide="prev" aria-label="{l s='Previous' d='Shop.Theme.Actions'}">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
</button>
<button class="carousel-control-next outline outline--rounded" type="button" data-bs-target="#ps_imageslider" data-bs-slide="next" aria-label="{l s='Next' d='Shop.Theme.Actions'}">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
</button>
</div>
</section>
{/if}

View File

@@ -0,0 +1,14 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<div id="_desktop_ps_languageselector">
<div class="ps-languageselector">
<select class="form-select js-language-selector" aria-label="{l s='Change language' d='Shop.Theme.Global'}">
{foreach from=$languages item=language}
<option value="{url entity='language' id=$language.id_lang}"{if $language.id_lang == $current_language.id_lang} selected="selected"{/if} data-iso-code="{$language.iso_code}">{$language.name_simple}</option>
{/foreach}
</select>
</div>
</div>

View File

@@ -0,0 +1,26 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{foreach $linkBlocks as $linkBlock}
<div class="ps-linklist left-block">
<p class="left-block__title">{$linkBlock.title}</p>
<ul id="left-block__{$linkBlock.id}" class="left-block__content left-block__content--list">
{foreach $linkBlock.links as $link}
<li>
<a
id="{$link.id}-{$linkBlock.id}"
class="left-block__link {$link.class}"
href="{$link.url}"
title="{$link.description}"
{if !empty($link.target)} target="{$link.target}" {/if}
>
{$link.title}
</a>
</li>
{/foreach}
</ul>
</div>
{/foreach}

View File

@@ -0,0 +1,56 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{if !empty($linkBlocks)}
{foreach $linkBlocks as $linkBlock}
<nav
class="ps-linklist footer-block col-md-6 col-lg-3"
role="navigation"
aria-labelledby="footer_title_{$linkBlock.id}"
>
<p
id="footer_title_{$linkBlock.id}"
class="footer-block__title footer-block__title--toggle"
>
{$linkBlock.title}
<button
class="stretched-link collapsed d-md-none"
type="button"
aria-expanded="false"
aria-controls="footer_linklist_{$linkBlock.id}"
data-bs-target="#footer_linklist_{$linkBlock.id}"
data-bs-toggle="collapse"
>
<span class="visually-hidden">
{l s='Toggle %s links' sprintf=[$linkBlock.title|lower] d='Shop.Theme.Global'}
</span>
<i class="material-icons" aria-hidden="true">&#xE313;</i>
</button>
</p>
<div class="footer-block__content collapse" id="footer_linklist_{$linkBlock.id}">
<ul class="footer-block__list">
{foreach $linkBlock.links as $link}
<li>
<a
id="{$link.id}-{$linkBlock.id}"
class="{$link.class}"
href="{$link.url}"
{if !empty($link.target)} target="{$link.target}" {/if}
{if !empty($link.description)} aria-describedby="desc-{$link.id}-{$linkBlock.id}" {/if}
>
{$link.title}
</a>
{if !empty($link.description)}
<span id="desc-{$link.id}-{$linkBlock.id}" class="visually-hidden">
{$link.description}
</span>
{/if}
</li>
{/foreach}
</ul>
</div>
</nav>
{/foreach}
{/if}

View File

@@ -0,0 +1,238 @@
{* PrestaShop license placeholder *}
{function name="generateLinks" links=[] class="menu-item" parent=null}
{* GENERATE LINKS *}
{if $parent.depth === 1}
{foreach from=$links item=link}
{if $link.depth === 3}
<ul class="{$class}__group--{($link.children|count) ? 'child' : 'nochild'}">
{/if}
<li>
<a
class="{$class} {if $link.depth === 3}{$class}__group-main-item{/if}"
href="{$link.url}"
data-depth="{$link.depth}"
{if $link.open_in_new_window}target="_blank"{/if}
>
{$link.label}
</a>
</li>
{call name=generateLinks links=$link.children parent=$parent}
{if $link.depth === 3}
</ul>
{/if}
{/foreach}
{/if}
{/function}
{* GENERATE SUBMENU *}
{function name="desktopSubMenu" nodes=[] depth=0 parent=null}
{if $nodes|count}
{if $depth === 1}
<div class="js-sub-menu submenu" role="menu" aria-label="{l s='%s submenu' sprintf=[$parent.label] d='Shop.Theme.Menu'}" id="submenu-{$parent.page_identifier}" data-ps-ref="desktop-submenu">
<div class="container">
<div class="submenu__row row gx-5">
{/if}
{if $depth === 1 }
<div class="submenu__left col-sm-3" role="tablist" aria-label="{l s='%s submenu tabs' sprintf=[$parent.label] d='Shop.Theme.Menu'}" data-ps-ref="desktop-submenu-left">
{foreach from=$nodes item=node}
<a
class="submenu__left-item"
href="{$node.url}"
data-depth="{$node.depth}"
aria-selected="{if $smarty.foreach.node.first}true{else}false{/if}"
tabindex="{if $smarty.foreach.node.first}0{else}-1{/if}"
data-ps-ref="desktop-submenu-left-item"
data-ps-has-child="{if $node.children|count}true{else}false{/if}"
{if $node.children|count}
role="tab"
id="tab_{$node.label|lower|classname}_{$node.depth}_{$node.page_identifier}"
data-open-tab="submenu_{$node.label|lower|classname}_{$node.depth}_{$node.page_identifier}"
aria-controls="submenu_{$node.label|lower|classname}_{$node.depth}_{$node.page_identifier}"
{/if}
{if $node.open_in_new_window}target="_blank" rel="noopener noreferrer"{/if}
>
{$node.label}
</a>
{/foreach}
</div>
{/if}
{if $depth === 1 }
<div class="submenu__right col-sm-9" data-ps-ref="desktop-submenu-right">
{foreach from=$nodes item=node}
<div
class="submenu__right-items"
role="tabpanel"
data-ps-ref="desktop-submenu-right-items"
{if $node.children|count}
id="submenu_{$node.label|lower|classname}_{$node.depth}_{$node.page_identifier}"
aria-labelledby="tab_{$node.label|lower|classname}_{$node.depth}_{$node.page_identifier}"
{/if}
>
{generateLinks links=$node.children parent=$parent}
</div>
{/foreach}
</div>
{/if}
{foreach from=$nodes item=node}
{if $node.children|count}
{desktopSubMenu nodes=$node.children depth=$node.depth parent=$node}
{/if}
{/foreach}
{if $depth === 1}
</div>
</div>
</div>
{/if}
{/if}
{/function}
{* GENERATE DESKTOP FIRST LEVEL *}
{function name="desktopFirstLevel" itemsFirstLevel=[]}
{if $itemsFirstLevel|count}
<ul class="ps-mainmenu__tree" id="top-menu" data-ps-ref="desktop-menu-tree">
{foreach from=$itemsFirstLevel item=menuItem}
<li class="ps-mainmenu__tree-item type-{$menuItem.type} {if $menuItem.current} current{/if}" data-id="{$menuItem.page_identifier}" data-ps-ref="desktop-menu-item">
<div class="ps-mainmenu__tree-item-wrapper">
<a
class="ps-mainmenu__tree-link"
href="{$menuItem.url}"
data-depth="1"
data-ps-ref="desktop-menu-link"
{if $menuItem.current}aria-current="page"{/if}
{if $menuItem.open_in_new_window}target="_blank" rel="noopener noreferrer"{/if}
>
{$menuItem.label}
</a>
{if $menuItem.children|count}
<button
class="ps-mainmenu__tree-dropdown-toggle dropdown-toggle"
type="button"
aria-haspopup="menu"
aria-expanded="false"
aria-controls="submenu-{$menuItem.page_identifier}"
aria-label="{l s='Open %s submenu' sprintf=[$menuItem.label] d='Shop.Theme.Menu'}"
data-ps-ref="desktop-menu-dropdown-toggle"
></button>
{/if}
</div>
{desktopSubMenu nodes=$menuItem.children depth=$menuItem.depth parent=$menuItem}
</li>
{/foreach}
</ul>
{/if}
{/function}
{* GENERATE DESKTOP MENU *}
{function name="desktopMenu" nodes=[] depth=0 parent=null}
{desktopFirstLevel itemsFirstLevel=$nodes}
{/function}
{* GENERATE MOBILE MENU *}
{function name="mobileMenu" nodes=[] depth=0 parent=null}
{$children = []}
{if $nodes|count}
<nav
class="menu menu--mobile{if $depth === 0} menu--current js-menu-current{else} menu--child js-menu-child{/if}"
{if $depth === 0}id="menu-mobile"{else}data-parent-title="{$parent.label}"{/if}
{if $depth > 1}data-back-title="{$backTitle}" data-id="{$expandId}"{/if}
data-depth="{$depth}"
>
<ul class="menu__list">
{if $depth >= 1}
<li class="menu__title">{$parent.label}</li>
{/if}
{foreach from=$nodes item=node}
<li
class="type-{$node.type} {if $node.current} current{/if} {if $node.children|count} menu--childrens{/if}"
id="{$node.page_identifier}"
>
<a
class="{if $depth>= 0}menu__link{/if}"
href="{$node.url}"
data-depth="{$depth}"
{if $node.open_in_new_window}target="_blank"{/if}
>
{$node.label}
</a>
{if $node.children|count}
{* Cannot use page identifier as we can have the same page several times *}
{assign var=_expand_id value=10|mt_rand:100000}
<button class="menu__toggle-child btn btn-link js-menu-open-child" data-target="{$_expand_id}">
<i class="material-icons rtl-flip" aria-hidden="true">&#xE5CC;</i>
</button>
{/if}
</li>
{if $node.children|count}
{$node.parent = $node}
{$node.expandId = $_expand_id}
{$children[] = $node}
{/if}
{/foreach}
</ul>
</nav>
{foreach from=$children item=child}
{mobileMenu
nodes=$child.children
depth=$child.children[0].depth
parent=$child backTitle=$child.parent.label
expandId=$child.expandId
}
{/foreach}
{/if}
{/function}
<div class="ps-mainmenu ps-mainmenu--desktop col-xl col-auto">
{* DESKTOP MENU *}
<nav class="ps-mainmenu__desktop d-none d-xl-block position-static js-menu-desktop" data-ps-ref="desktop-menu-container" aria-label="{l s='Main navigation' d='Shop.Theme.Menu'}">
{desktopMenu nodes=$menu.children}
</nav>
{* MOBILE MENU *}
<div class="ps-mainmenu__mobile-toggle">
<button
class="menu-toggle btn btn-link"
data-bs-toggle="offcanvas"
data-bs-target="#mobileMenu"
aria-controls="mobileMenu"
aria-label="{l s='Open mobile menu' d='Shop.Theme.Menu'}"
>
<span class="material-icons" aria-hidden="true">&#xE5D2;</span>
</button>
</div>
</div>
<div
class="ps-mainmenu ps-mainmenu--mobile offcanvas offcanvas-start js-menu-canvas"
tabindex="-1"
id="mobileMenu"
aria-labelledby="mobileMenuLabel"
>
<div class="offcanvas-header">
<div class="ps-mainmenu__back-button">
<button class="btn btn-link btn-sm d-none js-back-button" type="button" aria-label="{l s='Go back to main menu' d='Shop.Theme.Menu'}">
<span class="material-icons rtl-flip" aria-hidden="true">&#xE5CB;</span>
<span class="js-menu-back-title">{l s='All' d='Shop.Theme.Global'}</span>
</button>
</div>
<button type="button" class="btn-close btn text-reset" data-bs-dismiss="offcanvas" aria-label="{l s='Close' d='Shop.Theme.Global'}"></button>
</div>
<div class="ps-mainmenu__mobile">
{mobileMenu nodes=$menu.children}
</div>
<div class="ps-mainmenu__additionnals offcanvas-body d-flex flex-wrap align-items-center gap-3">
<div class="ps-mainmenu__selects d-flex gap-2 me-auto">
<div id="_mobile_ps_currencyselector" class="col-auto"></div>
<div id="_mobile_ps_languageselector" class="col-auto"></div>
</div>
<div id="_mobile_ps_contactinfo"></div>
</div>
</div>

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@@ -0,0 +1,19 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{extends file="components/module-products.tpl"}
{block name='module_products_name'}ps-newproducts{/block}
{block name='module_products_title'}
{include file='components/section-title.tpl' title={l s='Latest arrivals' d='Shop.Theme.Catalog'}}
{/block}
{block name='module_products_footer'}
<a class="btn btn-outline-primary" href="{$allNewProductsLink}">
{l s='All new products' d='Shop.Theme.Catalog'}
<i class="material-icons" aria-hidden="true">&#xE315;</i>
</a>
{/block}

View File

@@ -0,0 +1,15 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

Some files were not shown because too many files have changed in this diff Show More