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>