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,31 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{block name='account_transformation_form'}
<h3>{l s='Save time on your next order, sign up now' d='Shop.Theme.Checkout'}</h3>
<div class="rich-text">
<ul>
<li>{l s='Personalized and secure access' d='Shop.Theme.Customeraccount'}</li>
<li>{l s='Fast and easy checkout' d='Shop.Theme.Customeraccount'}</li>
<li>{l s='Easier merchandise return' d='Shop.Theme.Customeraccount'}</li>
</ul>
</div>
<form method="post">
<input type="hidden" name="submitTransformGuestToCustomer" value="1">
<div class="mb-3">
<label class="form-label" for="field-email">
{l s='Set your password:' d='Shop.Forms.Labels'}
</label>
<input type="password" class="form-control" data-validate="isPasswd" required name="password" value="" autocomplete="new-password">
</div>
<div class="buttons-wrapper buttons-wrapper--end">
<button class="btn btn-primary" type="submit">{l s='Create account' d='Shop.Theme.Actions'}</button>
</div>
</form>
{/block}

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.
*}
{block name='address_form'}
<div class="js-address-form">
{include file='_partials/form-errors.tpl' errors=$errors['']}
{block name='address_form_url'}
<form
method="POST"
action="{url entity='address' params=['id_address' => $id_address]}"
data-id-address="{$id_address}"
data-refresh-url="{url entity='address' params=['ajax' => 1, 'action' => 'addressForm', 'id_address' => $id_address]}"
data-ps-action="form-validation"
>
{/block}
{block name='address_form_fields'}
<section class="form-fields">
{block name='form_fields'}
{foreach from=$formFields item="field"}
{block name='form_field'}
{form_field field=$field}
{/block}
{/foreach}
{/block}
</section>
{/block}
{block name='form_buttons'}
<footer class="buttons-wrapper buttons-wrapper--end">
<input type="hidden" name="submitAddress" value="1">
<button class="btn btn-primary form-control-submit" type="submit" data-ps-action="form-validation-submit">
{l s='Save' d='Shop.Theme.Actions'}
</button>
</footer>
{/block}
</form>
</div>
{/block}

View File

@@ -0,0 +1,48 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{$componentName = 'address-card'}
{block name='address_block_item'}
<article id="address-{$address.id}" class="{$componentName}" data-id-address="{$address.id}">
<div class="{$componentName}__container">
<div class="{$componentName}__header">
<span class="{$componentName}__alias">{$address.alias}</span>
</div>
<address class="{$componentName}__content">{$address.formatted nofilter}</address>
{capture name='displayAdditionalCustomerAddressFields'}{hook h='displayAdditionalCustomerAddressFields' address=$address}{/capture}
{if $smarty.capture.displayAdditionalCustomerAddressFields}
<div class="{$componentName}__extra">
{$smarty.capture.displayAdditionalCustomerAddressFields}
</div>
{/if}
{block name='address_block_item_actions'}
<div class="{$componentName}__actions">
<a
class="{$componentName}__edit link-body-emphasis"
href="{url entity=address id=$address.id}"
data-link-action="edit-address"
aria-label="{l s='Edit address: %addressAlias%' sprintf=['%addressAlias%' => $address.alias|lower] d='Shop.Theme.Actions'}"
role="button"
>
{l s='Edit' d='Shop.Theme.Actions'}
</a>
<a
class="{$componentName}__delete link-danger"
href="{url entity=address id=$address.id params=['delete' => 1, 'token' => $token]}"
data-link-action="delete-address"
aria-label="{l s='Delete address: %addressAlias%' sprintf=['%addressAlias%' => $address.alias|lower] d='Shop.Theme.Actions'}"
role="button"
>
{l s='Delete' d='Shop.Theme.Actions'}
</a>
</div>
{/block}
</div>
</article>
{/block}

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.
*}
{block name='customer_form'}
{block name='customer_form_errors'}
{include file='_partials/form-errors.tpl' errors=$errors['']}
{/block}
<form
action="{block name='customer_form_actionurl'}{$action}{/block}"
class="js-customer-form"
id="customer-form"
method="post"
data-ps-action="form-validation"
aria-label="{l s='Your personal information' d='Shop.Theme.Customeraccount'}"
>
<section>
{block "form_fields"}
{foreach from=$formFields item="field"}
{block "form_field"}
{if $field.name === "new_password" && $page.page_name == "identity"}
<div data-ps-ref="password-field">
{form_field field=$field}
</div>
{elseif $field.type === "password" && $page.page_name != "identity"}
<div data-ps-ref="password-field">
{form_field field=$field}
</div>
{else}
{form_field field=$field}
{/if}
{/block}
{/foreach}
{$hook_create_account_form nofilter}
{/block}
</section>
{block name='customer_form_footer'}
<input type="hidden" name="submitCreate" value="1">
<footer class="buttons-wrapper buttons-wrapper--end">
{block "form_buttons"}
<button class="btn btn-primary form-control-submit" data-link-action="save-customer" type="submit" data-ps-action="form-validation-submit">
{if isset($mode) && $mode === "register"}
{l s='Create account' d='Shop.Theme.Actions'}
{else}
{l s='Save' d='Shop.Theme.Actions'}
{/if}
</button>
{/block}
</footer>
{/block}
</form>
{/block}

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.
*}
{block name='login_form'}
{block name='login_form_errors'}
{include file='_partials/form-errors.tpl' errors=$errors['']}
{/block}
<form id="login-form" action="{block name='login_form_actionurl'}{$action}{/block}" method="post" data-ps-action="form-validation">
{block name='login_form_fields'}
{foreach from=$formFields item="field"}
{block name='form_field'}
{form_field field=$field}
{/block}
{/foreach}
{/block}
{block name='login_form_footer'}
<input type="hidden" name="submitLogin" value="1" tabindex="-1">
<div class="buttons-wrapper buttons-wrapper--split buttons-wrapper--invert-mobile">
<a class="btn btn-basic" href="{$urls.pages.password}" rel="nofollow">
{l s='Forgot your password?' d='Shop.Theme.Customeraccount'}
</a>
{block name='form_buttons'}
<button id="submit-login" class="btn btn-primary" data-link-action="sign-in" type="submit" data-ps-action="form-validation-submit">
{l s='Sign in' d='Shop.Theme.Actions'}
</button>
{/block}
</div>
{/block}
</form>
{/block}

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.
*}
{block name='my_account_links'}
<a href="{$urls.pages.my_account}" class="account-link" data-role="back-to-your-account">
<i class="material-icons" aria-hidden="true">&#xE5CB;</i>
<span>{l s='Back to your account' d='Shop.Theme.Customeraccount'}</span>
</a>
<a href="{$urls.pages.index}" class="account-link" data-role="home">
<i class="material-icons" aria-hidden="true">&#xE88A;</i>
<span>{l s='Home' d='Shop.Theme.Global'}</span>
</a>
{/block}

View File

@@ -0,0 +1,39 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
<section class="order-carriers">
<h3 class="h3" id="order_carriers_heading">{l s='Shipment tracking details' d='Shop.Theme.Customeraccount'}</h3>
<div class="grid-table" role="table" aria-label="{l s='Order tracking' d='Shop.Theme.Customeraccount'}" aria-describedby="order_carriers_heading">
<div class="grid-table__inner grid-table__inner--5" role="rowgroup">
<div class="grid-table__header" role="row">
<span class="grid-table__cell" role="columnheader">{l s='Date' d='Shop.Theme.Global'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Carrier' d='Shop.Theme.Checkout'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Weight' d='Shop.Theme.Checkout'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Shipping cost' d='Shop.Theme.Checkout'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Tracking number' d='Shop.Theme.Checkout'}</span>
</div>
{foreach from=$order.shipping item=line}
<div class="grid-table__row" role="row">
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Date' d='Shop.Theme.Global'}">
{$line.shipping_date}
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Carrier' d='Shop.Theme.Checkout'}">
{$line.carrier_name}
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Weight' d='Shop.Theme.Checkout'}">
{$line.shipping_weight}
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Shipping cost' d='Shop.Theme.Checkout'}">
{$line.shipping_cost}
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Tracking number' d='Shop.Theme.Checkout'}">
{$line.tracking nofilter}
</span>
</div>
{/foreach}
</div>
</div>
</section>

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.
*}
{block name='order_products_table'}
<div class="grid-table grid-table--collapse mb-0" role="table" aria-label="{l s='Products details' d='Shop.Theme.Customeraccount'}" aria-describedby="order_products_heading">
<div class="grid-table__inner grid-table__inner--4" role="rowgroup">
<div class="grid-table__header" role="row">
<span class="grid-table__cell" role="columnheader">{l s='Product' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--center" role="columnheader">{l s='Quantity' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--center" role="columnheader">{l s='Unit price' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--right" role="columnheader">{l s='Total price' d='Shop.Theme.Catalog'}</span>
</div>
{foreach $order->order_shipments['physical_products'] item=shipment}
{foreach from=$shipment['products'] item=product}
{assign var="is_last_product" value=($product@last && empty($order->order_shipments['virtual_products']))}
{include
file='./order-detail-product-line-no-return.tpl'
product=$product
carrier_name=$shipment['carrier']['name']
is_last_product=$is_last_product
}
{/foreach}
{/foreach}
{foreach $order->order_shipments['virtual_products'] item=product}
{include file='./order-detail-product-line-no-return.tpl' product=$product is_last_product=$product@last}
{/foreach}
</div>
</div>
<div class="grid-table grid-table--collapse" role="table" aria-label="{l s='Order totals' d='Shop.Theme.Customeraccount'}">
<div class="grid-table__inner grid-table__inner--6" role="rowgroup">
{foreach $order.subtotals as $line}
{if $line.value}
<div class="grid-table__row" role="row">
<span class="grid-table__cell grid-table__cell--label-value" role="cell" data-ps-label="{$line.label}">
<span class="visually-hidden">{l s='%label%' d='Shop.Theme.Catalog' sprintf=['%label%' => $line.label]}</span>
{$line.value}
</span>
</div>
{/if}
{/foreach}
<div class="grid-table__row" role="row">
<span class="grid-table__cell grid-table__cell--label-value" role="cell" data-ps-label="{$order.totals.total.label}">
<span class="visually-hidden">{l s='Total price' d='Shop.Theme.Catalog'}</span>
{$order.totals.total.value}
</span>
</div>
</div>
</div>
{/block}

View File

@@ -0,0 +1,160 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{block name='order_products_table'}
<div class="grid-table grid-table--collapse mb-0" role="table" aria-label="{l s='Products details' d='Shop.Theme.Customeraccount'}" aria-describedby="order_products_heading">
<div class="grid-table__inner grid-table__inner--4" role="rowgroup">
<div class="grid-table__header" role="row">
<span class="grid-table__cell" role="columnheader">{l s='Product' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--center" role="columnheader">{l s='Quantity' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--center" role="columnheader">{l s='Unit price' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--right" role="columnheader">{l s='Total price' d='Shop.Theme.Catalog'}</span>
</div>
{foreach from=$order.products item=product name=products}
<div class="grid-table__row {if $smarty.foreach.products.last}rounded-bottom-0{/if}" role="row">
<span class="grid-table__cell order-product" role="cell" data-ps-label="{l s='Product' d='Shop.Theme.Catalog'}">
<span class="order-product__infos">
<span class="order-product__image">
<a href="{$link->getProductLink($product.id_product)}">
{if $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="order-product__img img-fluid"
srcset="
{$product.cover.bySize.default_xs.url},
{$product.cover.bySize.default_md.url} 2x"
width="{$product.cover.bySize.default_xs.width}"
height="{$product.cover.bySize.default_xs.height}"
loading="lazy"
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="order-product__img 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}
</a>
</span>
<span class="order-product__content">
<a class="order-product__name" href="{$link->getProductLink($product.id_product)}">
{$product.name}
</a>
{if $product.product_reference}
<small class="text-secondary">
{l s='Reference: %reference%' sprintf=['%reference%' => $product.product_reference] d='Shop.Theme.Catalog'}
</small>
{/if}
{if isset($product.download_link)}
<a href="{$product.download_link}">
<i class="material-icons" aria-hidden="true">&#xF090;</i> {l s='Download' d='Shop.Theme.Actions'}
</a>
{/if}
{if $product.customizations}
{foreach from=$product.customizations item="customization"}
<span id="product_customization_modal_wrapper_{$customization.id_customization}">
{include file='catalog/_partials/customization-modal.tpl' customization=$customization}
</span>
<span class="customization">
<a class="btn btn-sm btn-link p-0" href="#" data-bs-toggle="modal"
data-bs-target="#product-customizations-modal-{$customization.id_customization}">
<i class="material-icons">&#xE8F4;</i>
{l s='Product customization' d='Shop.Theme.Catalog'}
</a>
</span>
{/foreach}
{/if}
</span>
</span>
</span>
<span class="grid-table__cell grid-table__cell--center" role="cell" data-ps-label="{l s='Quantity' d='Shop.Theme.Catalog'}">
{$product.quantity}
</span>
<span class="grid-table__cell grid-table__cell--center" role="cell" data-ps-label="{l s='Unit price' d='Shop.Theme.Catalog'}">
{$product.price}
</span>
<span class="grid-table__cell grid-table__cell--right" role="cell" data-ps-label="{l s='Total price' d='Shop.Theme.Catalog'}">
{$product.total}
</span>
</div>
{/foreach}
</div>
</div>
<div class="grid-table grid-table--collapse" role="table" aria-label="{l s='Order totals' d='Shop.Theme.Customeraccount'}">
<div class="grid-table__inner grid-table__inner--6" role="rowgroup">
{foreach $order.subtotals as $line}
{if $line.value}
<div class="grid-table__row" role="row">
<span class="grid-table__cell grid-table__cell--label-value" role="cell" data-ps-label="{$line.label}">
<span class="visually-hidden">{l s='%label%' d='Shop.Theme.Catalog' sprintf=['%label%' => $line.label]}</span>
{$line.value}
</span>
</div>
{/if}
{/foreach}
<div class="grid-table__row" role="row">
<span class="grid-table__cell grid-table__cell--label-value" role="cell" data-ps-label="{$order.totals.total.label}">
<span class="visually-hidden">{l s='Total price' d='Shop.Theme.Catalog'}</span>
{$order.totals.total.value}
</span>
</div>
</div>
</div>
{/block}

View File

@@ -0,0 +1,137 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{block name='order_products_table_line_no_return'}
<div class="grid-table__row {if isset($is_last_product) && $is_last_product}rounded-bottom-0{/if}" role="row">
<span class="grid-table__cell order-product" role="cell" data-ps-label="{l s='Product' d='Shop.Theme.Catalog'}">
<span class="order-product__infos">
<span class="order-product__image">
<a href="{$link->getProductLink($product.id_product)}">
{if isset($product.cover) && $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="order-product__img img-fluid"
srcset="
{$product.cover.bySize.default_xs.url},
{$product.cover.bySize.default_md.url} 2x"
width="{$product.cover.bySize.default_xs.width}"
height="{$product.cover.bySize.default_xs.height}"
loading="lazy"
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="order-product__img 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}
</a>
</span>
<span class="order-product__content">
<a class="order-product__name" href="{$link->getProductLink($product.id_product)}">
{$product.name}
</a>
{if $product.product_reference}
<small class="text-secondary">
{l s='Reference: %reference%' sprintf=['%reference%' => $product.product_reference] d='Shop.Theme.Catalog'}
</small>
{/if}
{if $product.is_virtual}
<small class="text-secondary">
{l s='Virtual product(s): No delivery service' d='Shop.Theme.Global'}
</small>
{/if}
{if !$product.is_virtual && isset($carrier_name)}
<small class="text-secondary">
{l s='Carrier: %carrier_name%' sprintf=['%carrier_name%' => $carrier_name] d='Shop.Theme.Catalog'}
</small>
{/if}
{if isset($product.download_link)}
<a href="{$product.download_link}">
<i class="material-icons" aria-hidden="true">&#xF090;</i> {l s='Download' d='Shop.Theme.Actions'}
</a>
{/if}
{if $product.customizations}
{foreach from=$product.customizations item="customization"}
<span id="product_customization_modal_wrapper_{$customization.id_customization}">
{include file='catalog/_partials/customization-modal.tpl' customization=$customization}
</span>
<span class="customization">
<a class="btn btn-sm btn-link p-0" href="#" data-bs-toggle="modal"
data-bs-target="#product-customizations-modal-{$customization.id_customization}">
<i class="material-icons">&#xE8F4;</i>
{l s='Product customization' d='Shop.Theme.Catalog'}
</a>
</span>
{/foreach}
{/if}
</span>
</span>
</span>
<span class="grid-table__cell grid-table__cell--center" role="cell" data-ps-label="{l s='Quantity' d='Shop.Theme.Catalog'}">
{$product.quantity}
</span>
<span class="grid-table__cell grid-table__cell--center" role="cell" data-ps-label="{l s='Unit price' d='Shop.Theme.Catalog'}">
{$product.price}
</span>
<span class="grid-table__cell grid-table__cell--right" role="cell" data-ps-label="{l s='Total price' d='Shop.Theme.Catalog'}">
{$product.total}
</span>
</div>
{/block}

View File

@@ -0,0 +1,156 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{block name='order_products_table_line_return'}
<div class="grid-table__row {if isset($is_last_product) && $is_last_product}rounded-bottom-0{/if}" role="row">
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Select' d='Shop.Theme.Catalog'}">
<input
class="form-check-input"
type="checkbox"
id="cb_{$product.id_order_detail}"
data-ps-ref="select-product"
name="ids_order_detail[{$product.id_order_detail}]"
value="{$product.id_order_detail}"
{if $product.qty_returned >= $product.quantity}disabled{/if}
aria-label="{$product.name}"
>
</span>
<span class="grid-table__cell order-product" role="cell" data-ps-label="{l s='Product' d='Shop.Theme.Catalog'}">
<span class="order-product__infos">
<span class="order-product__image">
<a href="{$link->getProductLink($product.id_product)}">
{if $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="order-product__img img-fluid"
srcset="
{$product.cover.bySize.default_xs.url},
{$product.cover.bySize.default_md.url} 2x"
width="{$product.cover.bySize.default_xs.width}"
height="{$product.cover.bySize.default_xs.height}"
loading="lazy"
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="order-product__img 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}
</a>
</span>
<span class="order-product__content">
<a class="order-product__name" href="{$link->getProductLink($product.id_product)}">
{$product.name}
</a>
{if $product.product_reference}
<small class="text-secondary">
{l s='Reference: %reference%' sprintf=['%reference%' => $product.product_reference] d='Shop.Theme.Catalog'}
</small>
{/if}
{if $product.is_virtual}
<small class="text-secondary">
{l s='Virtual product(s): No delivery service' d='Shop.Theme.Global'}
</small>
{/if}
{if !$product.is_virtual && isset($carrier_name)}
<small class="text-secondary">
{l s='Carrier: %carrier_name%' sprintf=['%carrier_name%' => $carrier_name] d='Shop.Theme.Catalog'}
</small>
{/if}
{if $product.customizations}
{foreach from=$product.customizations item="customization"}
<div id="product_customization_modal_wrapper_{$customization.id_customization}">
{include file='catalog/_partials/customization-modal.tpl' customization=$customization}
</div>
<div class="customization">
<a class="btn btn-sm btn-link p-0" href="#" data-bs-toggle="modal"
data-bs-target="#product-customizations-modal-{$customization.id_customization}">
<i class="material-icons">&#xE8F4;</i>
{l s='Product customization' d='Shop.Theme.Catalog'}
</a>
</div>
{/foreach}
{/if}
</span>
</span>
</span>
<span class="grid-table__cell grid-table__cell--center" role="cell" data-ps-label="{l s='Quantity' d='Shop.Theme.Catalog'}">
<span class="grid-table__cell-group grid-table__cell-group--sm grid-table__cell-group--inline">
<span class="current">
<span class="visually-hidden">{l s='Available quantity to return:' d='Shop.Theme.Catalog'}</span>
{$product.quantity}
</span>
{if $product.quantity > $product.qty_returned}
<span class="select" id="order_return_qty_{$product.id_order_detail}">
<select name="order_qte_input[{$product.id_order_detail}]" class="form-select" aria-label="{l s='Select quantity to return' d='Shop.Theme.Catalog'}">
{section name=quantity start=1 loop=$product.quantity+1-$product.qty_returned}
<option value="{$smarty.section.quantity.index}">{$smarty.section.quantity.index}</option>
{/section}
</select>
</span>
{/if}
</span>
</span>
<span class="grid-table__cell grid-table__cell--center" role="cell" data-ps-label="{l s='Returned' d='Shop.Theme.Catalog'}">{$product.qty_returned}</span>
<span class="grid-table__cell grid-table__cell--center" role="cell" data-ps-label="{l s='Unit price' d='Shop.Theme.Catalog'}">{$product.price}</span>
<span class="grid-table__cell grid-table__cell--right" role="cell" data-ps-label="{l s='Total price' d='Shop.Theme.Catalog'}">{$product.total}</span>
</div>
{/block}

View File

@@ -0,0 +1,89 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{block name='order_products_table'}
<form id="order-return-form" class="js-order-return-form" action="{$urls.pages.order_follow}" method="post" data-ps-action="form-validation">
<div class="grid-table grid-table--collapse mb-0" role="table" data-ps-ref="order-return-products-table" aria-label="{l s='Products details' d='Shop.Theme.Catalog'}" aria-describedby="order_products_heading">
<div class="grid-table__inner grid-table__inner--6" role="rowgroup">
<div class="grid-table__header" role="row">
<span class="grid-table__cell" role="columnheader" aria-label="{l s='Select product to return' d='Shop.Theme.Catalog'}">
<input class="form-check-input" type="checkbox" data-ps-ref="select-all-products" aria-label="{l s='Select all products' d='Shop.Theme.Catalog'}">
</span>
<span class="grid-table__cell" role="columnheader">{l s='Product' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--center" role="columnheader">{l s='Quantity' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--center" role="columnheader">{l s='Returned' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--center" role="columnheader">{l s='Unit price' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--right" role="columnheader">{l s='Total price' d='Shop.Theme.Catalog'}</span>
</div>
{foreach $order->order_shipments['physical_products'] item=shipment}
{foreach from=$shipment['products'] item=product}
{assign var="is_last_product" value=($product@last && empty($order->order_shipments['virtual_products']))}
{include
file='./order-detail-product-line-return.tpl'
product=$product
carrier_name=$shipment['carrier']['name']
is_last_product=$is_last_product
}
{/foreach}
{/foreach}
{foreach $order->order_shipments['virtual_products'] item=product}
{include file='./order-detail-product-line-return.tpl' product=$product is_last_product=$product@last}
{/foreach}
</div>
</div>
<div class="grid-table grid-table--collapse" role="table" aria-label="{l s='Order totals' d='Shop.Theme.Catalog'}">
<div class="grid-table__inner grid-table__inner--6" role="rowgroup">
{foreach $order.subtotals as $line}
{if $line.value}
<div class="grid-table__row" role="row">
<span class="grid-table__cell grid-table__cell--label-value" role="cell" data-ps-label="{$line.label}">
<span class="visually-hidden">{l s='%label%' d='Shop.Theme.Catalog' sprintf=['%label%' => $line.label]}</span>
{$line.value}
</span>
</div>
{/if}
{/foreach}
<div class="grid-table__row" role="row">
<span class="grid-table__cell grid-table__cell--label-value" role="cell" data-ps-label="{$order.totals.total.label}">
<span class="visually-hidden">{l s='Total price' d='Shop.Theme.Catalog'}</span>
{$order.totals.total.value}
</span>
</div>
</div>
</div>
<hr class="order-separator">
<section class="order-merchandise-return">
<h3 class="h3">{l s='Merchandise return' d='Shop.Theme.Customeraccount'}</h3>
<label class="form-label required" for="return_notes">{l s='Return notes' d='Shop.Forms.Labels'}</label>
<textarea
rows="3"
name="returnText"
id="return_notes"
class="form-control required"
aria-describedby="order_merchandise_return"
required
></textarea>
<p class="form-text" id="order_merchandise_return">
{l s='If you wish to return one or more products, please mark the corresponding boxes and provide an explanation for the return. When complete, click the button below.' d='Shop.Theme.Customeraccount'}
</p>
<div class="buttons-wrapper buttons-wrapper--end mt-3">
<input type="hidden" name="id_order" value="{$order.details.id}">
<button class="btn btn-primary" type="submit" name="submitReturnMerchandise" data-ps-action="form-validation-submit">
{l s='Request a return' d='Shop.Theme.Customeraccount'}
</button>
</footer>
</div>
</form>
{/block}

View File

@@ -0,0 +1,213 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{block name='order_products_table'}
<form id="order-return-form" class="js-order-return-form" action="{$urls.pages.order_follow}" method="post" data-ps-action="form-validation">
<div class="grid-table grid-table--collapse mb-0" role="table" data-ps-ref="order-return-products-table" aria-label="{l s='Products details' d='Shop.Theme.Catalog'}" aria-describedby="order_products_heading">
<div class="grid-table__inner grid-table__inner--6" role="rowgroup">
<div class="grid-table__header" role="row">
<span class="grid-table__cell" role="columnheader" aria-label="{l s='Select product to return' d='Shop.Theme.Catalog'}">
<input class="form-check-input" type="checkbox" data-ps-ref="select-all-products" aria-label="{l s='Select all products' d='Shop.Theme.Catalog'}">
</span>
<span class="grid-table__cell" role="columnheader">{l s='Product' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--center" role="columnheader">{l s='Quantity' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--center" role="columnheader">{l s='Returned' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--center" role="columnheader">{l s='Unit price' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--right" role="columnheader">{l s='Total price' d='Shop.Theme.Catalog'}</span>
</div>
{foreach from=$order.products item=product name=products}
<div class="grid-table__row {if $smarty.foreach.products.last}rounded-bottom-0{/if}" role="row">
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Select' d='Shop.Theme.Catalog'}">
<input
class="form-check-input"
type="checkbox"
id="cb_{$product.id_order_detail}"
data-ps-ref="select-product"
name="ids_order_detail[{$product.id_order_detail}]"
value="{$product.id_order_detail}"
{if $product.qty_returned >= $product.quantity}disabled{/if}
aria-label="{$product.name}"
>
</span>
<span class="grid-table__cell order-product" role="cell" data-ps-label="{l s='Product' d='Shop.Theme.Catalog'}">
<span class="order-product__infos">
<span class="order-product__image">
<a href="{$link->getProductLink($product.id_product)}">
{if $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="order-product__img img-fluid"
srcset="
{$product.cover.bySize.default_xs.url},
{$product.cover.bySize.default_md.url} 2x"
width="{$product.cover.bySize.default_xs.width}"
height="{$product.cover.bySize.default_xs.height}"
loading="lazy"
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="order-product__img 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}
</a>
</span>
<span class="order-product__content">
<a class="order-product__name" href="{$link->getProductLink($product.id_product)}">
{$product.name}
</a>
{if $product.product_reference}
<small class="text-secondary">
{l s='Reference: %reference%' sprintf=['%reference%' => $product.product_reference] d='Shop.Theme.Catalog'}
</small>
{/if}
{if $product.customizations}
{foreach from=$product.customizations item="customization"}
<div id="product_customization_modal_wrapper_{$customization.id_customization}">
{include file='catalog/_partials/customization-modal.tpl' customization=$customization}
</div>
<div class="customization">
<a class="btn btn-sm btn-link p-0" href="#" data-bs-toggle="modal"
data-bs-target="#product-customizations-modal-{$customization.id_customization}">
<i class="material-icons">&#xE8F4;</i>
{l s='Product customization' d='Shop.Theme.Catalog'}
</a>
</div>
{/foreach}
{/if}
</span>
</span>
</span>
<span class="grid-table__cell grid-table__cell--center" role="cell" data-ps-label="{l s='Quantity' d='Shop.Theme.Catalog'}">
<span class="grid-table__cell-group grid-table__cell-group--sm grid-table__cell-group--inline">
<span class="current">
<span class="visually-hidden">{l s='Available quantity to return:' d='Shop.Theme.Catalog'}</span>
{$product.quantity}
</span>
{if $product.quantity > $product.qty_returned}
<span class="select" id="_desktop_return_qty_{$product.id_order_detail}">
<select name="order_qte_input[{$product.id_order_detail}]" class="form-select" aria-label="{l s='Select quantity to return' d='Shop.Theme.Catalog'}">
{section name=quantity start=1 loop=$product.quantity+1-$product.qty_returned}
<option value="{$smarty.section.quantity.index}">{$smarty.section.quantity.index}</option>
{/section}
</select>
</span>
{/if}
</span>
</span>
<span class="grid-table__cell grid-table__cell--center" role="cell" data-ps-label="{l s='Returned' d='Shop.Theme.Catalog'}">{$product.qty_returned}</span>
<span class="grid-table__cell grid-table__cell--center" role="cell" data-ps-label="{l s='Unit price' d='Shop.Theme.Catalog'}">{$product.price}</span>
<span class="grid-table__cell grid-table__cell--right" role="cell" data-ps-label="{l s='Total price' d='Shop.Theme.Catalog'}">{$product.total}</span>
</div>
{/foreach}
</div>
</div>
<div class="grid-table grid-table--collapse" role="table" aria-label="{l s='Order totals' d='Shop.Theme.Catalog'}">
<div class="grid-table__inner grid-table__inner--6" role="rowgroup">
{foreach $order.subtotals as $line}
{if $line.value}
<div class="grid-table__row" role="row">
<span class="grid-table__cell grid-table__cell--label-value" role="cell" data-ps-label="{$line.label}">
<span class="visually-hidden">{l s='%label%' d='Shop.Theme.Catalog' sprintf=['%label%' => $line.label]}</span>
{$line.value}
</span>
</div>
{/if}
{/foreach}
<div class="grid-table__row" role="row">
<span class="grid-table__cell grid-table__cell--label-value" role="cell" data-ps-label="{$order.totals.total.label}">
<span class="visually-hidden">{l s='Total price' d='Shop.Theme.Catalog'}</span>
{$order.totals.total.value}
</span>
</div>
</div>
</div>
<hr class="order-separator">
<section class="order-merchandise-return">
<h3 class="h3">{l s='Merchandise return' d='Shop.Theme.Customeraccount'}</h3>
<label class="form-label required" for="return_notes">{l s='Return notes' d='Shop.Forms.Labels'}</label>
<textarea
rows="3"
name="returnText"
id="return_notes"
class="form-control required"
aria-describedby="order_merchandise_return"
required
></textarea>
<p class="form-text" id="order_merchandise_return">
{l s='If you wish to return one or more products, please mark the corresponding boxes and provide an explanation for the return. When complete, click the button below.' d='Shop.Theme.Customeraccount'}
</p>
<div class="buttons-wrapper buttons-wrapper--end mt-3">
<input type="hidden" name="id_order" value="{$order.details.id}">
<button class="btn btn-primary" type="submit" name="submitReturnMerchandise" data-ps-action="form-validation-submit">
{l s='Request a return' d='Shop.Theme.Customeraccount'}
</button>
</footer>
</div>
</form>
{/block}

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.
*}
{block name='order_messages_table'}
{if $order.messages}
<section class="order-messages">
<h3 class="h3">{l s='Customer service messages' d='Shop.Theme.Customeraccount'}</h3>
<div class="order-message__list">
{foreach from=$order.messages item=message}
<div class="order-message">
<div class="order-message__infos">
<p class="order-message__name">{$message.name}</p>
<p class="order-message__date">{$message.message_date}</p>
</div>
<div class="order-message__content">
{$message.message nofilter}
</div>
</div>
{/foreach}
</section>
<hr class="order-separator">
{/if}
{/block}
{block name='order_message_form'}
<section class="order-message-form">
<form action="{$urls.pages.order_detail}" method="post" data-ps-action="form-validation">
<h3 class="h3">{l s='Add a message' d='Shop.Theme.Customeraccount'}</h3>
<p>
{l s='If you would like to add a comment about your order, please write it in the field below.' d='Shop.Theme.Customeraccount'}
</p>
<div class="mb-3">
<label class="form-label" for="product_select_message">{l s='Product' d='Shop.Forms.Labels'}</label>
<select name="id_product" class="form-select" id="product_select_message">
<option value="0">{l s='-- choose a product --' d='Shop.Forms.Labels'}</option>
{foreach from=$order.products item=product}
<option value="{$product.id_product}">{$product.name}</option>
{/foreach}
</select>
</div>
<div class="mb-3">
<label class="form-label required" for="message_text">{l s='Message' d='Shop.Forms.Labels'}</label>
<textarea
rows="3"
name="msgText"
id="message_text"
class="form-control"
required
></textarea>
</div>
<div class="buttons-wrapper buttons-wrapper--end mt-3">
<input type="hidden" name="id_order" value="{$order.details.id}">
<button type="submit" name="submitMessage" class="btn btn-primary" data-ps-action="form-validation-submit">
{l s='Send your message' d='Shop.Theme.Actions'}
</button>
</footer>
</form>
</section>
{/block}

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="order-carriers">
<h3 class="h3" id="order_carriers_heading">{l s='Shipment tracking details' d='Shop.Theme.Customeraccount'}</h3>
<div class="grid-table" role="table" aria-label="{l s='Order tracking' d='Shop.Theme.Customeraccount'}" aria-describedby="order_carriers_heading">
<div class="grid-table__inner grid-table__inner--5" role="rowgroup">
<div class="grid-table__header" role="row">
<span class="grid-table__cell" role="columnheader">{l s='Date' d='Shop.Theme.Global'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Carrier' d='Shop.Theme.Checkout'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Weight' d='Shop.Theme.Checkout'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Tracking number' d='Shop.Theme.Checkout'}</span>
</div>
{foreach from=$order.shipping item=line}
<div class="grid-table__row" role="row">
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Date' d='Shop.Theme.Global'}">
{$line.date_add}
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Carrier' d='Shop.Theme.Checkout'}">
{$line.carrier_name}
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Weight' d='Shop.Theme.Checkout'}">
{$line.package_weight}
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Tracking number' d='Shop.Theme.Checkout'}">
{if $line.carrier_tracking_url}
<a href="{$line.carrier_tracking_url}" target="_blank">{$line.tracking_number}</a>
{elseif $line.tracking_number}
{$line.tracking_number}
{else}
-
{/if}
</span>
</div>
{/foreach}
</div>
</div>
</section>

View File

@@ -0,0 +1,21 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{extends 'customer/page.tpl'}
{block name='page_title'}
{if $editing}
{l s='Update your address' d='Shop.Theme.Customeraccount'}
{else}
{l s='New address' d='Shop.Theme.Customeraccount'}
{/if}
{/block}
{block name='page_content'}
<p>{l s='Add a new address to your account.' d='Shop.Theme.Customeraccount'}</p>
<div class="address-form">
{render template='customer/_partials/address-form.tpl' ui=$address_form}
</div>
{/block}

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.
*}
{extends 'customer/page.tpl'}
{block name='page_title'}
{l s='Your addresses' d='Shop.Theme.Customeraccount'}
{/block}
{block name='page_content'}
<p>{l s='Manage your addresses for billing and delivery to streamline your future orders.' d='Shop.Theme.Customeraccount'}</p>
<div class="addresses">
<div class="addresses__list">
{foreach $customer.addresses as $address}
{block name='customer_address'}
{include file='customer/_partials/block-address.tpl' address=$address}
{/block}
{/foreach}
<a
class="address-card address-card--add-address"
href="{$urls.pages.address}"
data-link-action="add-address"
role="button"
>
<span class="address-card__add-text">{l s='Add new address' d='Shop.Theme.Actions'}</span>
<span class="address-card__add-icon btn btn-square btn-square-icon btn-primary">
<i class="material-icons" aria-hidden="true">&#xE145;</i>
</span>
</a>
</div>
</div>
{/block}

View File

@@ -0,0 +1,39 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{$componentName = 'login'}
{extends file='page.tpl'}
{block name='container_class'}container container--limited-sm{/block}
{block name='page_title'}
{l s='Sign in' d='Shop.Theme.Customeraccount'}
{/block}
{block name='page_content'}
{block name='login_form_container'}
<div class="{$componentName}">
<section class="{$componentName}__form-wrapper">
{render file='customer/_partials/login-form.tpl' ui=$login_form}
</section>
<hr>
{block name='display_after_login_form'}
{hook h='displayCustomerLoginFormAfter'}
{/block}
<div class="{$componentName}__register-prompt">
<h2 class="h4">{l s='No account?' d='Shop.Theme.Customeraccount'}</h2>
<div class="d-grid">
<a href="{$urls.pages.register}" class="btn btn-outline-primary" data-link-action="display-register-form">
{l s='Create your account' d='Shop.Theme.Actions'}
</a>
</div>
</div>
</div>
{/block}
{/block}

View File

@@ -0,0 +1,59 @@
{**
* 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='Your vouchers' d='Shop.Theme.Customeraccount'}
{/block}
{block name='page_content'}
<p id="vouchers_description">{l s='View and manage your available vouchers and discount codes for use on your next purchase.' d='Shop.Theme.Customeraccount'}</p>
{if $cart_rules}
<div class="grid-table" role="table" aria-label="{l s='Your vouchers' d='Shop.Theme.Customeraccount'}" aria-describedby="vouchers_description">
<div class="grid-table__inner grid-table__inner--7" role="rowgroup">
<div class="grid-table__header" role="row">
<span class="grid-table__cell" role="columnheader">{l s='Code' d='Shop.Theme.Checkout'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Name' d='Shop.Theme.Checkout'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Quantity' d='Shop.Theme.Checkout'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Value' d='Shop.Theme.Checkout'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Minimum' d='Shop.Theme.Checkout'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Cumulative' d='Shop.Theme.Checkout'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Expiration date' d='Shop.Theme.Checkout'}</span>
</div>
{foreach from=$cart_rules item=cart_rule}
<div class="grid-table__row" role="row">
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Code' d='Shop.Theme.Checkout'}">
<strong>{$cart_rule.code}</strong>
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Name' d='Shop.Theme.Checkout'}">
<small class="text-secondary">{$cart_rule.name}</small>
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Quantity' d='Shop.Theme.Checkout'}">{$cart_rule.quantity_for_user}</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Value' d='Shop.Theme.Checkout'}">
<strong>{$cart_rule.value}</strong>
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Minimum' d='Shop.Theme.Checkout'}">{$cart_rule.voucher_minimal}</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Cumulative' d='Shop.Theme.Checkout'}">{$cart_rule.voucher_cumulable}</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Expiration date' d='Shop.Theme.Checkout'}">
<small class="text-secondary">{$cart_rule.voucher_date}</small>
</span>
</div>
{/foreach}
</div>
</div>
{else}
<div class="alert alert-info" role="alert">
{l s='You do not have any vouchers.' d='Shop.Notifications.Warning'}
</div>
{/if}
{/block}

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.
*}
{extends file='page.tpl'}
{block name='container_class'}container container--limited-sm{/block}
{block name='page_title'}
{l s='Guest Order Tracking' d='Shop.Theme.Customeraccount'}
{/block}
{block name='page_content'}
<form id="guestOrderTrackingForm" action="{$urls.pages.guest_tracking}" method="get">
<input type="hidden" name="controller" value="guest-tracking">
<p>{l s='To track your order, please enter the following information:' d='Shop.Theme.Customeraccount'}</p>
<div class="mb-3">
<label class="form-label required">
{l s='Order Reference' d='Shop.Forms.Labels'}
</label>
<input
class="form-control"
name="order_reference"
type="text"
size="8"
value="{if isset($smarty.request.order_reference)}{$smarty.request.order_reference}{/if}"
>
<div class="form-text">
{l s='For example: QIIXJXNUI or QIIXJXNUI#1' d='Shop.Theme.Customeraccount'}
</div>
</div>
<div class="mb-3">
<label class="form-label required">
{l s='Email' d='Shop.Forms.Labels'}
</label>
<input
class="form-control"
name="email"
type="email"
value="{if isset($smarty.request.email)}{$smarty.request.email}{/if}"
>
</div>
<footer class="buttons-wrapper buttons-wrapper--end">
<button class="btn btn-primary" type="submit">
{l s='Send' d='Shop.Theme.Actions'}
</button>
</footer>
</form>
{/block}

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/order-detail.tpl'}
{block name='page_title'}
{l s='Guest Tracking' d='Shop.Theme.Customeraccount'}
{/block}
{block name='account_link'}{/block}
{block name='order_detail'}
{include file='customer/_partials/order-detail-no-return.tpl'}
{/block}
{block name='order_messages'}{/block}
{if !$registered_customer_exists}
{block name='page_content' append}
{block name='account_transformation_form'}
{include file='customer/_partials/account-transformation-form.tpl'}
{/block}
{/block}
{/if}

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.
*}
{extends 'customer/page.tpl'}
{block name='page_title'}
{l s='Your personal information' d='Shop.Theme.Customeraccount'}
{/block}
{block name='page_content'}
<p>{l s='Update your personal information to keep your account details up to date.' d='Shop.Theme.Customeraccount'}</p>
{render file='customer/_partials/customer-form.tpl' ui=$customer_form}
{/block}

View File

@@ -0,0 +1,75 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{extends file='customer/page.tpl'}
{$componentName = 'account-menu'}
{block name='page_title'}
{l s='Welcome' d='Shop.Theme.Customeraccount'} {$customer.firstname} {$customer.lastname}
{/block}
{block name='page_content'}
<div class="{$componentName} {$componentName}--main">
{block name='display_customer_account_top'}
{hook h='displayCustomerAccountTop'}
{/block}
<a class="{$componentName}__link" id="identity_main_link" href="{$urls.pages.identity}">
<i class="{$componentName}__icon material-icons" aria-hidden="true">&#xE853;</i>
{l s='Information' d='Shop.Theme.Customeraccount'}
</a>
{if $customer.addresses|count}
<a class="{$componentName}__link" id="addresses_main_link" href="{$urls.pages.addresses}">
<i class="{$componentName}__icon material-icons" aria-hidden="true">&#xF00F;</i>
{l s='Addresses' d='Shop.Theme.Customeraccount'}
</a>
{else}
<a class="{$componentName}__link" id="address_main_link" href="{$urls.pages.address}">
<i class="{$componentName}__icon material-icons" aria-hidden="true">&#xEF3A;</i>
{l s='Add first address' d='Shop.Theme.Customeraccount'}
</a>
{/if}
{if !$configuration.is_catalog}
<a class="{$componentName}__link" id="history_main_link" href="{$urls.pages.history}">
<i class="{$componentName}__icon material-icons" aria-hidden="true">&#xE916;</i>
{l s='Order history and details' d='Shop.Theme.Customeraccount'}
</a>
{/if}
{if !$configuration.is_catalog}
<a class="{$componentName}__link" id="order_slips_main_link" href="{$urls.pages.order_slip}">
<i class="{$componentName}__icon material-icons" aria-hidden="true">&#xE8B0;</i>
{l s='Credit slips' d='Shop.Theme.Customeraccount'}
</a>
{/if}
{if $configuration.voucher_enabled && !$configuration.is_catalog}
<a class="{$componentName}__link" id="discounts_main_link" href="{$urls.pages.discount}">
<i class="{$componentName}__icon material-icons" aria-hidden="true">&#xE54E;</i>
{l s='Vouchers' d='Shop.Theme.Customeraccount'}
</a>
{/if}
{if $configuration.return_enabled && !$configuration.is_catalog}
<a class="{$componentName}__link" id="returns_main_link" href="{$urls.pages.order_follow}">
<i class="{$componentName}__icon material-icons" aria-hidden="true">&#xE860;</i>
{l s='Merchandise returns' d='Shop.Theme.Customeraccount'}
</a>
{/if}
{block name='display_customer_account'}
{hook h='displayCustomerAccount'}
{/block}
<a class="{$componentName}__link {$componentName}__link--signout" href="{$urls.actions.logout}">
<i class="{$componentName}__icon material-icons" aria-hidden="true">&#xE879;</i>
{l s='Sign out' d='Shop.Theme.Actions'}
</a>
</div>
{/block}
{block name='account_link'}{/block}

View File

@@ -0,0 +1,176 @@
{**
* 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='Order details' d='Shop.Theme.Customeraccount'}
{/block}
{block name='page_content'}
{block name='order_infos'}
<section class="order-infos">
<div class="order-infos__summary">
<p class="order-infos__reference">
{l
s='Order Reference: %reference% - placed on %date%'
d='Shop.Theme.Customeraccount'
sprintf=['%reference%' => $order.details.reference, '%date%' => $order.details.order_date]
}
</p>
{if not $order.shipments && $order.carrier.name}
<p class="order-infos__carrier">
{l s='Carrier: %carrier_name%' sprintf=['%carrier_name%' => $order.carrier.name] d='Shop.Theme.Catalog'}
</p>
{/if}
<p class="order-infos__payment">
{l s='Payment method: %payment_method%' sprintf=['%payment_method%' => $order.details.payment] d='Shop.Theme.Catalog'}
</p>
{if $order.details.recyclable}
<p class="order-infos__recyclable">
{l s='You have given permission to receive your order in recycled packaging.' d='Shop.Theme.Customeraccount'}
</p>
{/if}
{if $order.details.gift_message}
<div class="order-infos__gift-message">
<p>{l s='You have requested gift wrapping for this order.' d='Shop.Theme.Customeraccount'}</p>
<p>{l s='Message:' d='Shop.Theme.Customeraccount'} {$order.details.gift_message nofilter}</p>
</div>
{/if}
{if $order.details.invoice_url || $order.details.reorder_url}
<div class="order-infos__actions buttons-wrapper {if !$order.details.invoice_url && $order.details.reorder_url}buttons-wrapper--end{else}buttons-wrapper--split{/if}">
{if $order.details.invoice_url}
<a class="btn btn-link px-0" href="{$order.details.invoice_url}">
<i class="material-icons" aria-hidden="true">&#xE415;</i>
{l s='Download your invoice as a PDF file.' d='Shop.Theme.Customeraccount'}
</a>
{/if}
{if $order.details.reorder_url}
<a href="{$order.details.reorder_url}" class="btn btn-outline-primary">
{l s='Reorder' d='Shop.Theme.Actions'}
</a>
{/if}
</div>
{/if}
</div>
</section>
{/block}
<hr class="order-separator">
{block name='order_status'}
<section class="order-status">
<h2 class="h3" id="order_status_heading">{l s='Follow your order\'s status step-by-step' d='Shop.Theme.Customeraccount'}</h2>
<div class="order-status__table grid-table grid-table--collapse" role="table" aria-label="{l s='Order status' d='Shop.Theme.Customeraccount'}" aria-describedby="order_status_heading">
<div class="grid-table__inner grid-table__inner--2" role="rowgroup">
<div class="grid-table__header" role="row">
<span class="grid-table__cell" role="columnheader">{l s='Date' d='Shop.Theme.Global'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Status' d='Shop.Theme.Global'}</span>
</div>
{foreach from=$order.history item=state}
<div class="grid-table__row" role="row">
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Date' d='Shop.Theme.Global'}">
{$state.history_date}
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Status' d='Shop.Theme.Global'}">
<span class="order-status__badge order-status__badge--{$state.contrast} badge" style="background-color:{$state.color}">
{$state.ostate_name}
</span>
</span>
</div>
{/foreach}
</div>
</div>
</section>
{/block}
<hr class="order-separator">
{block name='order_carriers'}
{if $order.shipping}
{if $order.shipments}
{include file='customer/_partials/order-shipments.tpl'}
{else}
{include file='customer/_partials/order-carrier.tpl'}
{/if}
{/if}
{/block}
<hr class="order-separator">
{block name='order_addresses'}
<section class="order-addresses">
<h3 class="h3">{l s='Addresses' d='Shop.Theme.Customeraccount'}</h3>
<div class="order-addresses__list">
{if $order.addresses.delivery}
<article id="delivery-address" class="address-card">
<div class="address-card__container">
<h4 class="address-card__alias">
{l s='Delivery address: %alias%' d='Shop.Theme.Checkout' sprintf=['%alias%' => $order.addresses.delivery.alias]}
</h4>
<address class="address-card__content mb-0">{$order.addresses.delivery.formatted nofilter}</address>
</div>
</article>
{/if}
<article id="invoice-address" class="address-card">
<div class="address-card__container">
<h4 class="address-card__alias">
{l s='Invoice address: %alias%' d='Shop.Theme.Checkout' sprintf=['%alias%' => $order.addresses.invoice.alias]}
</h4>
<address class="address-card__content mb-0">{$order.addresses.invoice.formatted nofilter}</address>
</div>
</article>
</div>
</section>
{/block}
<hr class="order-separator">
{capture name='displayOrderDetail'}{hook h='displayOrderDetail'}{/capture}
{if $smarty.capture.displayOrderDetail}
{$smarty.capture.displayOrderDetail nofilter}
<hr class="order-separator">
{/if}
{block name='order_products'}
<section class="order-products">
<h3 class="h3" id="order_products_heading">{l s='Products details' d='Shop.Theme.Customeraccount'}</h3>
{block name='order_detail'}
{if $order.details.is_returnable}
{if $order.shipments}
{include file='customer/_partials/order-detail-return-multishipment.tpl'}
{else}
{include file='customer/_partials/order-detail-return.tpl'}
{/if}
{else}
{if $order.shipments}
{include file='customer/_partials/order-detail-no-return-multishipment.tpl'}
{else}
{include file='customer/_partials/order-detail-no-return.tpl'}
{/if}
{/if}
{/block}
</section>
{/block}
<hr class="order-separator">
{block name='order_messages'}
{include file='customer/_partials/order-messages.tpl'}
{/block}
{/block}

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.
*}
{extends file='customer/page.tpl'}
{block name='page_title'}
{l s='Merchandise returns' d='Shop.Theme.Customeraccount'}
{/block}
{block name='page_content'}
<p id="order_merchandise_returns_description">{l s='Here is a list of pending merchandise returns.' d='Shop.Theme.Customeraccount'}</p>
{if $ordersReturn && count($ordersReturn)}
<div class="grid-table" role="table" aria-label="{l s='Merchandise returns' d='Shop.Theme.Customeraccount'}" aria-describedby="order_merchandise_returns_description">
<div class="grid-table__inner grid-table__inner--5" role="rowgroup">
<div class="grid-table__header" role="row">
<span class="grid-table__cell" role="columnheader">{l s='Order' d='Shop.Theme.Customeraccount'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Return' d='Shop.Theme.Customeraccount'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Package status' d='Shop.Theme.Customeraccount'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Date issued' d='Shop.Theme.Customeraccount'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Returns details' d='Shop.Theme.Customeraccount'}</span>
</div>
{foreach from=$ordersReturn item=return}
<div class="grid-table__row" role="row">
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Order' d='Shop.Theme.Customeraccount'}">
<a href="{$return.details_url}">
<span class="visually-hidden">{l s='View order reference' d='Shop.Theme.Customeraccount'} </span>
{$return.reference}
</a>
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Return' d='Shop.Theme.Customeraccount'}">
<a href="{$return.return_url}">
<span class="visually-hidden">{l s='View return number' d='Shop.Theme.Customeraccount'} </span>
{$return.return_number}
</a>
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Package status' d='Shop.Theme.Customeraccount'}">
{$return.state_name}
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Date issued' d='Shop.Theme.Customeraccount'}">
<small class="text-secondary">
{$return.return_date}
</small>
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Returns details' d='Shop.Theme.Customeraccount'}">
{if $return.print_url}
<a href="{$return.print_url}" aria-label="{l s='View returns details' d='Shop.Theme.Customeraccount'}">
<i class="material-icons" aria-hidden="true">&#xE415;</i>
</a>
{else}
--
{/if}
</span>
</div>
{/foreach}
</div>
</div>
{else}
<div class="alert alert-info" role="alert" tabindex="0">
{l s='You have no merchandise return authorizations.' d='Shop.Notifications.Error'}
</div>
{/if}
{/block}

View File

@@ -0,0 +1,155 @@
{**
* 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='Return details' d='Shop.Theme.Customeraccount'}
{/block}
{block name='page_content'}
{block name='order_return_infos'}
<div id="order-return-infos" class="card">
<div class="card-block">
<p>
<strong>{l
s='%number% on %date%'
d='Shop.Theme.Customeraccount'
sprintf=['%number%' => $return.return_number, '%date%' => $return.return_date]}
</strong>
</p>
<p>{l s='We have logged your return request.' d='Shop.Theme.Customeraccount'}</p>
<hr class="my-4">
<h2 class="h3">{l s='List of items to be returned:' d='Shop.Theme.Customeraccount'}</h2>
<div class="grid-table grid-table--collapse" role="table" aria-label="{l s='Return details' d='Shop.Theme.Customeraccount'}">
<div class="grid-table__inner grid-table__inner--2" role="rowgroup">
<div class="grid-table__header" role="row">
<span class="grid-table__cell" role="columnheader">{l s='Product' d='Shop.Theme.Catalog'}</span>
<span class="grid-table__cell grid-table__cell--right" role="columnheader">{l s='Quantity' d='Shop.Theme.Checkout'}</span>
</div>
{foreach from=$products item=product}
<div class="grid-table__row" role="row">
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Product' d='Shop.Theme.Catalog'}">
<span class="grid-table__cell-group grid-table__cell-group--sm">
<strong>{$product.product_name}</strong>
{if $product.product_reference}
<small class="text-secondary">
{l s='Reference: %reference%' sprintf=['%reference%' => $product.product_reference] d='Shop.Theme.Catalog'}
</small>
{/if}
{if $product.customizations}
{foreach from=$product.customizations item="customization"}
<span id="product_customization_modal_wrapper_{$customization.id_customization}">
{include file='catalog/_partials/customization-modal.tpl' customization=$customization}
</span>
<span class="customization">
<a class="btn btn-sm btn-link p-0" href="#" data-bs-toggle="modal"
data-bs-target="#product-customizations-modal-{$customization.id_customization}">
<i class="material-icons">&#xE8F4;</i>
{l s='Product customization' d='Shop.Theme.Catalog'}
</a>
</span>
{/foreach}
{/if}
</span>
</span>
<span class="grid-table__cell grid-table__cell--right" role="cell" data-ps-label="{l s='Quantity' d='Shop.Theme.Checkout'}">
{$product.product_quantity}
</span>
</div>
{/foreach}
</div>
</div>
<hr class="my-4">
<p>
{l
s='Your package must be returned to us within %number% days of receiving your order.'
d='Shop.Theme.Customeraccount'
sprintf=[
'%number%' => $configuration.number_of_days_for_return
]
}
</p>
<p>
{* [1][/1] is for a HTML tag. *}
{l
s='The current status of your merchandise return is: [1] %status% [/1]'
d='Shop.Theme.Customeraccount'
sprintf=[
'[1]' => '<strong>',
'[/1]' => '</strong>',
'%status%' => $return.state_name
]
}
</p>
</div>
</div>
{/block}
{if $return.state == 2}
<hr class="my-4">
<section class="order-return-reminder">
<h3>{l s='Reminder' d='Shop.Theme.Customeraccount'}</h3>
<p class="alert alert-info" role="alert">
{l
s='All merchandise must be returned in its original packaging and in its original state.'
d='Shop.Theme.Customeraccount'
}
</p>
<p>
{* [1][/1] is for a HTML tag. *}
{l
s='Please print out the [1]returns form[/1] and include it with your package.'
d='Shop.Theme.Customeraccount'
sprintf=[
'[1]' => '<a href="'|cat:$return.print_url|cat:'">',
'[/1]' => '</a>'
]
}
{* [1][/1] is for a HTML tag. *}
{l
s='Please check the [1]returns form[/1] for the correct address.'
d='Shop.Theme.Customeraccount'
sprintf=[
'[1]' => '<a href="'|cat:$return.print_url|cat:'">',
'[/1]' => '</a>'
]
}
</p>
<p>
{l
s='When we receive your package, we will notify you by email. We will then begin processing order reimbursement.'
d='Shop.Theme.Customeraccount'
}
<a href="{$urls.pages.contact}">
{l
s='Please let us know if you have any questions.'
d='Shop.Theme.Customeraccount'
}
</a>
{l
s='If the conditions of return listed above are not respected, we reserve the right to refuse your package and/or reimbursement.'
d='Shop.Theme.Customeraccount'
}
</p>
</section>
{/if}
{/block}

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.
*}
{extends file='customer/page.tpl'}
{block name='page_title'}
{l s='Credit slips' d='Shop.Theme.Customeraccount'}
{/block}
{block name='page_content'}
<p id="order_credit_slips_description">{l s='Credit slips you have received after canceled orders.' d='Shop.Theme.Customeraccount'}</p>
{if $credit_slips}
<div class="grid-table" role="table" aria-label="{l s='Credit slips' d='Shop.Theme.Customeraccount'}" aria-describedby="order_credit_slips_description">
<div class="grid-table__inner grid-table__inner--4" role="rowgroup">
<div class="grid-table__header" role="row">
<span class="grid-table__cell" role="columnheader">{l s='Order' d='Shop.Theme.Customeraccount'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Credit slip' d='Shop.Theme.Customeraccount'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Date issued' d='Shop.Theme.Customeraccount'}</span>
<span class="grid-table__cell" role="columnheader">{l s='Credit slip' d='Shop.Theme.Customeraccount'}</span>
</div>
{foreach from=$credit_slips item=slip}
<div class="grid-table__row" role="row">
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Order' d='Shop.Theme.Customeraccount'}">
<a href="{$slip.order_url_details}" data-link-action="view-order-details">
<span class="visually-hidden">{l s='View order reference' d='Shop.Theme.Customeraccount'} </span>
{$slip.order_reference}
</a>
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Credit slip' d='Shop.Theme.Customeraccount'}">
{$slip.credit_slip_number}
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Date issued' d='Shop.Theme.Customeraccount'}">
<small class="text-secondary">{$slip.credit_slip_date}</small>
</span>
<span class="grid-table__cell" role="cell" data-ps-label="{l s='Credit slip' d='Shop.Theme.Customeraccount'}">
<a href="{$slip.url}" aria-label="{l s='View credit slip' d='Shop.Theme.Customeraccount'}"><i class="material-icons" aria-hidden="true">&#xE415;</i></a>
</span>
</div>
{/foreach}
</div>
</div>
{else}
<div class="alert alert-info" role="alert">
{l s='You have not received any credit slips.' d='Shop.Notifications.Warning'}
</div>
{/if}
{/block}

View File

@@ -0,0 +1,51 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{extends file=$layout}
{block name='content'}
<div class="row">
{**
* Used for the account menu in the guest tracking page, the account don't have to be shown
*}
{if $customer.is_logged && !$customer.is_guest}
<div class="col-lg-3">
{include file='components/account-menu.tpl'}
</div>
{/if}
<div class="col-lg-{if $customer.is_logged && !$customer.is_guest}9{else}12{/if}">
{block name='page_header_container'}
{block name='page_title'}
<div class="page-header">
{include file='components/page-title-section.tpl' title={$smarty.block.child}}
</div>
{/block}
{block name='account_link'}
<a class="btn btn-outline-tertiary account-menu__back" href="{$urls.pages.my_account}">
<i class="material-icons" aria-hidden="true">&#xE5C4;</i>
{l s='Back to your account' d='Shop.Theme.Customeraccount'}
</a>
{/block}
{/block}
{block name='page_content_container'}
<section id="content" class="page-content page-content--customer">
{block name='page_content_top'}{/block}
{block name='page_content'}{/block}
</section>
{/block}
{block name='page_footer_container'}
{block name='page_footer'}
{block name='my_account_links'}
{/block}
{/block}
{/block}
</div>
</div>
{/block}

View File

@@ -0,0 +1,53 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{extends file='page.tpl'}
{block name='container_class'}container container--limited-sm{/block}
{block name='page_title'}
{l s='Forgot your password?' d='Shop.Theme.Customeraccount'}
{/block}
{block name='page_content'}
<form action="{$urls.pages.password}" class="forgotten-password" method="post" data-ps-action="form-validation">
{if count($errors)}
<div class="alert alert-danger" role="alert">
<ul class="mb-0">
{foreach $errors as $error}
<li>{$error}</li>
{/foreach}
</ul>
</div>
{/if}
<header>
<p class="send-renew-password-link">{l s='Please enter the email address you used to register. You will receive a temporary link to reset your password.' d='Shop.Theme.Customeraccount'}</p>
</header>
<section class="form-fields">
<div class="mb-3">
<label class="form-label required">{l s='Email address' d='Shop.Forms.Labels'}</label>
<input type="email" name="email" id="email" value="{if isset($smarty.post.email)}{stripslashes($smarty.post.email)}{/if}" class="form-control" autocomplete="email" required>
</div>
<div class="buttons-wrapper">
<button id="send-reset-link" class="btn btn-primary" name="submit" type="submit" data-ps-action="form-validation-submit">
{l s='Send reset link' d='Shop.Theme.Actions'}
</button>
</div>
</section>
</form>
{/block}
{block name='page_footer'}
<hr>
<div class="buttons-wrapper">
<a id="back-to-login" href="{$urls.pages.my_account}" class="btn btn-basic">
<i class="material-icons rtl-flip" aria-hidden="true">&#xE5C4;</i>
<span>{l s='Back to login' d='Shop.Theme.Actions'}</span>
</a>
</div>
{/block}

View File

@@ -0,0 +1,34 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{extends file='page.tpl'}
{block name='container_class'}container container--limited-sm{/block}
{block name='page_title'}
{l s='Forgot your password?' d='Shop.Theme.Customeraccount'}
{/block}
{block name='page_content'}
{if count($successes)}
<div class="alert alert-success" role="alert" tabindex="0">
<ul class="mb-0">
{foreach $successes as $success}
<li>{$success}</li>
{/foreach}
</ul>
</div>
{/if}
{/block}
{block name='page_footer'}
<hr>
<div class="buttons-wrapper">
<a id="back-to-login" href="{$urls.pages.authentication}" class="btn btn-basic">
<i class="material-icons rtl-flip" aria-hidden="true">&#xE5C4;</i>
<span>{l s='Back to login' d='Shop.Theme.Actions'}</span>
</a>
</div>
{/block}

View File

@@ -0,0 +1,90 @@
{**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*}
{extends file='page.tpl'}
{block name='container_class'}container container--limited-sm{/block}
{block name='page_title'}
{l s='Reset your password' d='Shop.Theme.Customeraccount'}
{/block}
{block name='page_content'}
<form action="{$urls.pages.password}" method="post" data-ps-action="form-validation">
{if count($errors)}
<div class="alert alert-danger" role="alert">
<ul class="mb-0">
{foreach $errors as $error}
<li>{$error}</li>
{/foreach}
</ul>
</div>
{/if}
<section class="form-fields renew-password">
<div class="mb-3">
{l
s='Email address: %email%'
d='Shop.Theme.Customeraccount'
sprintf=['%email%' => stripslashes($customer_email)]
}
</div>
<div class="mb-3">
<label class="form-label">{l s='New password' d='Shop.Forms.Labels'}</label>
<div class="input-group password-field">
<input class="form-control" id="field-password" type="password" data-validate="isPasswd" name="passwd" value="" autocomplete="new-password">
<button
class="btn btn-primary"
type="button"
data-ps-action="toggle-password"
data-text-show="{l s='Show Password' d='Shop.Theme.Actions'}"
data-text-hide="{l s='Hide Password' d='Shop.Theme.Actions'}"
aria-label="{l s='Show Password' d='Shop.Theme.Actions'}"
aria-controls="field-password"
aria-live="polite"
>
<i class="material-icons">&#xE8F4;</i>
</button>
</div>
</div>
<div class="mb-3">
<label class="form-label">{l s='Confirmation' d='Shop.Forms.Labels'}</label>
<div class="input-group password-field">
<input class="form-control" id="field-confirmation-passwd" type="password" data-validate="isPasswd" name="confirmation" value="" autocomplete="new-password">
<button
class="btn btn-primary"
type="button"
data-ps-action="toggle-password"
data-text-show="{l s='Show Password' d='Shop.Theme.Actions'}"
data-text-hide="{l s='Hide Password' d='Shop.Theme.Actions'}"
aria-label="{l s='Show Password' d='Shop.Theme.Actions'}"
aria-controls="field-confirmation-passwd"
aria-pressed="false"
>
<i class="material-icons">&#xE8F4;</i>
</button>
</div>
</div>
<input type="hidden" name="token" id="token" value="{$customer_token}">
<input type="hidden" name="id_customer" id="id_customer" value="{$id_customer}">
<input type="hidden" name="reset_token" id="reset_token" value="{$reset_token}">
<button class="btn btn-primary" type="submit" name="submit" data-ps-action="form-validation-submit">
{l s='Change Password' d='Shop.Theme.Actions'}
</button>
</section>
</form>
{/block}
{block name='page_footer'}
<hr>
<div class="buttons-wrapper">
<a id="back-to-login" href="{$urls.pages.authentication}" class="btn btn-basic">
<i class="material-icons rtl-flip" aria-hidden="true">&#xE5C4;</i>
<span>{l s='Back to login' d='Shop.Theme.Actions'}</span>
</a>
</div>
{/block}

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.
*}
{extends file='page.tpl'}
{block name='container_class'}container container--limited-md{/block}
{block name='page_title'}
{l s='Create an account' d='Shop.Theme.Customeraccount'}
{/block}
{block name='page_content'}
{block name='register_form_container'}
{$hook_create_account_top nofilter}
<section class="register-form">
{render file='customer/_partials/customer-form.tpl' ui=$register_form mode='register'}
<hr>
<p class="register-form__login-prompt">{l s='Already have an account?' d='Shop.Theme.Customeraccount'} <a href="{$urls.pages.authentication}">{l s='Sign in' d='Shop.Theme.Customeraccount'}</a></p>
</section>
{/block}
{/block}