Commit 1c523dae by lmf

移除多余目录

parent ed48323f
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="columns.top">
<container name="category.view.container" htmlTag="div" htmlClass="category-view" after="-">
<block class="Magento\Catalog\Block\Category\View" name="category.image" template="Magento_Catalog::category/image.phtml">
<arguments>
<argument name="image" xsi:type="object">Magento\Catalog\ViewModel\Category\Image</argument>
<argument name="output" xsi:type="object">Magento\Catalog\ViewModel\Category\Output</argument>
</arguments>
</block>
<block class="Magento\Catalog\Block\Category\View" name="category.description" template="Magento_Catalog::category/description.phtml"/>
<block class="Magento\Catalog\Block\Category\View" name="category.cms" template="Magento_Catalog::category/cms.phtml"/>
</container>
</referenceContainer>
<referenceContainer name="content">
<block class="Magento\Catalog\Block\Category\View" name="category.products" template="Magento_Catalog::category/products.phtml">
<block class="Magento\Catalog\Block\Product\ListProduct" name="category.products.list" as="product_list" template="Magento_Catalog::product/list.phtml">
<container name="category.product.list.additional" as="additional" />
<block class="Magento\Framework\View\Element\RendererList" name="category.product.type.details.renderers" as="details.renderers">
<block class="Magento\Framework\View\Element\Template" name="category.product.type.details.renderers.default" as="default"/>
</block>
<block class="Magento\Catalog\Block\Product\ProductList\Item\Container" name="category.product.addto" as="addto">
<block class="Magento\Catalog\Block\Product\ProductList\Item\AddTo\Compare"
name="category.product.addto.compare" as="compare"
template="Magento_Catalog::product/list/addto/compare.phtml"/>
</block>
<block class="Magento\Catalog\Block\Product\ProductList\Toolbar" name="product_list_toolbar" template="Magento_Catalog::product/list/toolbar.phtml">
<block class="Magento\Theme\Block\Html\Pager" name="product_list_toolbar_pager"/>
</block>
<action method="setToolbarBlockName">
<argument name="name" xsi:type="string">product_list_toolbar</argument>
</action>
</block>
</block>
<block class="Magento\Cookie\Block\RequireCookie" name="require-cookie" template="Magento_Cookie::require_cookie.phtml">
<arguments>
<argument name="triggers" xsi:type="array">
<item name="compareProductLink" xsi:type="string">.action.tocompare</item>
</argument>
</arguments>
</block>
</referenceContainer>
<referenceBlock name="page.main.title" >
<arguments>
<argument name="id" xsi:type="string">page-title-heading</argument>
<argument name="add_base_attribute_aria" xsi:type="string">page-title-heading toolbar-amount</argument>
</arguments>
<block class="Magento\Catalog\Block\Category\Rss\Link" name="rss.link" template="Magento_Catalog::category/rss.phtml"/>
</referenceBlock>
<referenceBlock name="category.products.list">
<arguments>
<argument name="viewModel" xsi:type="object">Magento\Catalog\ViewModel\Product\OptionsData</argument>
</arguments>
</referenceBlock>
</body>
</page>
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="sidebar.main">
<block class="Magento\Catalog\Block\Navigation" name="catalog.leftnav" before="-" template="Magento_Catalog::navigation/left.phtml"/>
</referenceContainer>
</body>
</page>
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body/>
</page>
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="page.main.title">
<action method="setPageTitle">
<argument translate="true" name="page_title" xsi:type="string">Compare Products</argument>
</action>
</referenceBlock>
<referenceContainer name="content">
<block class="Magento\Catalog\Block\Product\Compare\ListCompare" name="catalog.compare.list" template="Magento_Catalog::product/compare/list.phtml" cacheable="false"/>
</referenceContainer>
</body>
</page>
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="root">
<action method="setTemplate">
<argument name="template" xsi:type="string">popup.phtml</argument>
</action>
</referenceBlock>
<referenceContainer name="content">
<block class="Magento\Catalog\Block\Product\Gallery" name="catalog_product_gallery" template="Magento_Catalog::product/gallery.phtml"/>
</referenceContainer>
</body>
</page>
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<head>
<attribute name="prefix" value="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# product: http://ogp.me/ns/product#" />
</head>
<body>
<referenceBlock name="head.additional">
<block class="Magento\Catalog\Block\Product\View" name="opengraph.general" template="Magento_Catalog::product/view/opengraph/general.phtml">
<block class="Magento\Directory\Block\Currency" name="opengraph.currency" as="meta.currency" template="Magento_Catalog::product/view/opengraph/currency.phtml"/>
</block>
</referenceBlock>
</body>
</page>
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<head>
<css src="mage/gallery/gallery.css"/>
</head>
<update handle="catalog_product_opengraph" />
<update handle="page_calendar"/>
<body>
<attribute name="itemtype" value="http://schema.org/Product" />
<attribute name="itemscope" value="itemscope"/>
<referenceBlock name="head.components">
<block class="Magento\Framework\View\Element\Js\Components" name="checkout_page_head_components" template="Magento_Catalog::js/components.phtml"/>
</referenceBlock>
<referenceBlock name="page.main.title">
<arguments>
<argument name="css_class" xsi:type="string">product</argument>
<argument name="add_base_attribute" xsi:type="string">itemprop="name"</argument>
</arguments>
</referenceBlock>
<referenceBlock name="root">
<arguments>
<argument name="add_attribute" xsi:type="string">itemscope itemtype="http://schema.org/Product"</argument>
</arguments>
</referenceBlock>
<referenceBlock name="breadcrumbs" template="Magento_Catalog::product/breadcrumbs.phtml">
<arguments>
<argument name="viewModel" xsi:type="object">Magento\Catalog\ViewModel\Product\Breadcrumbs</argument>
</arguments>
</referenceBlock>
<referenceContainer name="content">
<container name="product.info.main" htmlTag="div" htmlClass="product-info-main" before="-">
<container name="product.info.price" label="Product info auxiliary container" htmlTag="div" htmlClass="product-info-price">
<container name="product.info.stock.sku" label="Product auxiliary info" htmlTag="div" htmlClass="product-info-stock-sku">
<container name="product.info.type" before="-"/>
<block class="Magento\Catalog\Block\Product\View\Description" name="product.info.sku" template="Magento_Catalog::product/view/attribute.phtml" after="product.info.type">
<arguments>
<argument name="at_call" xsi:type="string">getSku</argument>
<argument name="at_code" xsi:type="string">sku</argument>
<argument name="css_class" xsi:type="string">sku</argument>
<argument name="at_label" xsi:type="string">default</argument>
<argument name="add_attribute" xsi:type="string">itemprop="sku"</argument>
</arguments>
</block>
</container>
<block class="Magento\Catalog\Block\Product\View" name="product.info.review" template="Magento_Catalog::product/view/review.phtml" after="product.info.stock.sku" />
<block class="Magento\Catalog\Pricing\Render" name="product.price.final">
<arguments>
<argument name="price_render" xsi:type="string">product.price.render.default</argument>
<argument name="price_type_code" xsi:type="string">final_price</argument>
<argument name="zone" xsi:type="string">item_view</argument>
</arguments>
</block>
</container>
<block class="Magento\Catalog\Pricing\Render" name="product.price.tier" after="product.info.price">
<arguments>
<argument name="price_render" xsi:type="string">product.price.render.default</argument>
<argument name="price_type_code" xsi:type="string">tier_price</argument>
<argument name="zone" xsi:type="string">item_view</argument>
</arguments>
</block>
<container name="alert.urls" as="alert_urls" label="Alert Urls" after="product.price.tier"/>
<block class="Magento\Catalog\Block\Product\View" name="product.info" template="Magento_Catalog::product/view/form.phtml" after="alert.urls">
<container name="product.info.form.content" as="product_info_form_content">
<block class="Magento\Catalog\Block\Product\View" name="product.info.addtocart" as="addtocart" template="Magento_Catalog::product/view/addtocart.phtml"/>
</container>
<block class="Magento\Framework\View\Element\Template" name="product.info.form.options" as="options_container">
<block class="Magento\Catalog\Block\Product\View" name="product.info.options.wrapper" as="product_options_wrapper" template="Magento_Catalog::product/view/options/wrapper.phtml">
<block class="Magento\Catalog\Block\Product\View\Options" name="product.info.options" as="product_options" template="Magento_Catalog::product/view/options.phtml">
<block class="Magento\Catalog\Block\Product\View\Options\Type\DefaultType" name="product.info.options.default" as="default" template="Magento_Catalog::product/view/options/type/default.phtml"/>
<block class="Magento\Catalog\Block\Product\View\Options\Type\Text" name="product.info.options.text" as="text" template="Magento_Catalog::product/view/options/type/text.phtml"/>
<block class="Magento\Catalog\Block\Product\View\Options\Type\File" name="product.info.options.file" as="file" template="Magento_Catalog::product/view/options/type/file.phtml"/>
<block class="Magento\Catalog\Block\Product\View\Options\Type\Select" name="product.info.options.select" as="select" template="Magento_Catalog::product/view/options/type/select.phtml"/>
<block class="Magento\Catalog\Block\Product\View\Options\Type\Date" name="product.info.options.date" as="date" template="Magento_Catalog::product/view/options/type/date.phtml"/>
</block>
<block class="Magento\Framework\View\Element\Html\Calendar" name="html_calendar" as="html_calendar" template="Magento_Theme::js/calendar.phtml"/>
</block>
<block class="Magento\Catalog\Block\Product\View" name="product.info.options.wrapper.bottom" as="product_options_wrapper_bottom" template="Magento_Catalog::product/view/options/wrapper/bottom.phtml">
<block class="Magento\Catalog\Block\Product\View" name="product.info.addtocart.additional" as="product.info.addtocart" template="Magento_Catalog::product/view/addtocart.phtml"/>
</block>
</block>
</block>
<container name="product.info.extrahint" as="extrahint" label="Product View Extra Hint">
<container name="product.info.social" label="Product social links container" htmlTag="div" htmlClass="product-social-links">
<block class="Magento\Catalog\Block\Product\View" name="product.info.addto" as="addto" template="Magento_Catalog::product/view/addto.phtml">
<block class="Magento\Catalog\Block\Product\View\AddTo\Compare" name="view.addto.compare" after="view.addto.wishlist"
template="Magento_Catalog::product/view/addto/compare.phtml" >
<arguments>
<argument name="addToCompareViewModel" xsi:type="object">Magento\Catalog\ViewModel\Product\Checker\AddToCompareAvailability</argument>
</arguments>
</block>
</block>
<block class="Magento\Catalog\Block\Product\View" name="product.info.mailto" template="Magento_Catalog::product/view/mailto.phtml"/>
</container>
</container>
<block class="Magento\Catalog\Block\Product\View\Description" name="product.info.overview" template="Magento_Catalog::product/view/attribute.phtml" group="detailed_info" after="product.info.extrahint">
<arguments>
<argument name="at_call" xsi:type="string">getShortDescription</argument>
<argument name="at_code" xsi:type="string">short_description</argument>
<argument name="css_class" xsi:type="string">overview</argument>
<argument name="at_label" xsi:type="string">none</argument>
<argument name="title" translate="true" xsi:type="string">Overview</argument>
<argument name="add_attribute" xsi:type="string">itemprop="description"</argument>
</arguments>
</block>
</container>
<container name="product.info.media" htmlTag="div" htmlClass="product media" after="product.info.main">
<block class="Magento\Framework\View\Element\Template" name="skip_gallery_after.target" before="skip_gallery_before.wrapper" template="Magento_Theme::html/skiptarget.phtml">
<arguments>
<argument name="target_id" xsi:type="string">gallery-prev-area</argument>
</arguments>
</block>
<container name="skip_gallery_before.wrapper" htmlTag="div" htmlClass="action-skip-wrapper">
<block class="Magento\Framework\View\Element\Template" before="product.info.media.image" name="skip_gallery_before" template="Magento_Theme::html/skip.phtml">
<arguments>
<argument name="target" xsi:type="string">gallery-next-area</argument>
<argument name="label" translate="true" xsi:type="string">Skip to the end of the images gallery</argument>
</arguments>
</block>
</container>
<block class="Magento\Catalog\Block\Product\View\Gallery" name="product.info.media.image" template="Magento_Catalog::product/view/gallery.phtml">
<arguments>
<argument name="gallery_options" xsi:type="object">Magento\Catalog\Block\Product\View\GalleryOptions</argument>
<argument name="imageHelper" xsi:type="object">Magento\Catalog\Helper\Image</argument>
</arguments>
</block>
<container name="skip_gallery_after.wrapper" htmlTag="div" htmlClass="action-skip-wrapper">
<block class="Magento\Framework\View\Element\Template" after="product.info.media.image" name="skip_gallery_after" template="Magento_Theme::html/skip.phtml">
<arguments>
<argument name="target" xsi:type="string">gallery-prev-area</argument>
<argument name="label" translate="true" xsi:type="string">Skip to the beginning of the images gallery</argument>
</arguments>
</block>
</container>
<block class="Magento\Framework\View\Element\Template" name="skip_gallery_before.target" after="skip_gallery_after.wrapper" template="Magento_Theme::html/skiptarget.phtml">
<arguments>
<argument name="target_id" xsi:type="string">gallery-next-area</argument>
</arguments>
</block>
</container>
<block class="Magento\Catalog\Block\Product\View\Details" name="product.info.details" template="Magento_Catalog::product/view/details.phtml" after="product.info.media">
<block class="Magento\Catalog\Block\Product\View\Description" name="product.info.description" as="description" template="Magento_Catalog::product/view/attribute.phtml" group="detailed_info">
<arguments>
<argument name="at_call" xsi:type="string">getDescription</argument>
<argument name="at_code" xsi:type="string">description</argument>
<argument name="css_class" xsi:type="string">description</argument>
<argument name="at_label" xsi:type="string">none</argument>
<argument name="title" translate="true" xsi:type="string">Details</argument>
<argument name="sort_order" xsi:type="string">10</argument>
</arguments>
</block>
<block class="Magento\Catalog\Block\Product\View\Attributes" name="product.attributes" as="additional" template="Magento_Catalog::product/view/attributes.phtml" group="detailed_info">
<arguments>
<argument translate="true" name="title" xsi:type="string">More Information</argument>
<argument name="sort_order" xsi:type="string">20</argument>
</arguments>
</block>
</block>
<block class="Magento\Cookie\Block\RequireCookie" name="require-cookie" template="Magento_Cookie::require_cookie.phtml">
<arguments>
<argument name="triggers" xsi:type="array">
<item name="compareProductLink" xsi:type="string">.action.tocompare</item>
</argument>
</arguments>
</block>
</referenceContainer>
<referenceContainer name="content.aside">
<block class="Magento\Catalog\Block\Product\ProductList\Related" name="catalog.product.related" template="Magento_Catalog::product/list/items.phtml">
<arguments>
<argument name="type" xsi:type="string">related</argument>
<argument name="view_model" xsi:type="object">Magento\Catalog\ViewModel\Product\Listing\PreparePostData</argument>
</arguments>
<block class="Magento\Catalog\Block\Product\ProductList\Item\Container" name="related.product.addto" as="addto">
<block class="Magento\Catalog\Block\Product\ProductList\Item\AddTo\Compare"
name="related.product.addto.compare" as="compare"
template="Magento_Catalog::product/list/addto/compare.phtml"/>
</block>
</block>
<block class="Magento\Catalog\Block\Product\ProductList\Upsell" name="product.info.upsell" template="Magento_Catalog::product/list/items.phtml">
<arguments>
<argument name="type" xsi:type="string">upsell</argument>
<argument name="view_model" xsi:type="object">Magento\Catalog\ViewModel\Product\Listing\PreparePostData</argument>
</arguments>
<block class="Magento\Catalog\Block\Product\ProductList\Item\Container" name="upsell.product.addto" as="addto">
<block class="Magento\Catalog\Block\Product\ProductList\Item\AddTo\Compare"
name="upsell.product.addto.compare" as="compare"
template="Magento_Catalog::product/list/addto/compare.phtml"/>
</block>
</block>
<block class="Magento\Catalog\Block\Product\View\Additional" name="product.info.additional" as="product_additional_data"/>
</referenceContainer>
<referenceBlock name="product.info.addtocart">
<block class="Magento\Catalog\Block\ShortcutButtons\InCatalog" name="addtocart.shortcut.buttons"/>
</referenceBlock>
<referenceBlock name="product.info.addtocart.additional">
<block class="Magento\Catalog\Block\ShortcutButtons\InCatalog" name="addtocart.shortcut.buttons.additional"/>
</referenceBlock>
<referenceContainer name="content">
<block
class="Magento\Catalog\Block\Ui\ProductViewCounter"
name="product_viewed_counter"
template="Magento_Catalog::product/view/counter.phtml"/>
</referenceContainer>
</body>
</page>
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="product.info.type">
<block class="Magento\Catalog\Block\Product\View\Type\Simple" name="product.info.simple" as="product_type_data" template="Magento_Catalog::product/view/type/default.phtml"/>
<container name="product.info.simple.extra" after="product.info.simple" as="product_type_data_extra" label="Product Extra Info"/>
</referenceContainer>
</body>
</page>
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="product.info.type">
<block class="Magento\Catalog\Block\Product\View\Type\Virtual" name="product.info.virtual" as="product_type_data" template="Magento_Catalog::product/view/type/default.phtml"/>
<container name="product.info.virtual.extra" after="product.info.virtual" as="product_type_data_extra" label="Product Extra Info"/>
</referenceContainer>
</body>
</page>
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="checkout.cart.item.renderers">
<block class="Magento\Checkout\Block\Cart\Item\Renderer" name="checkout.cart.item.renderers.virtual" as="virtual" template="Magento_Checkout::cart/item/default.phtml">
<block class="Magento\Checkout\Block\Cart\Item\Renderer\Actions" name="checkout.cart.item.renderers.virtual.actions" as="actions">
<block class="Magento\Checkout\Block\Cart\Item\Renderer\Actions\Edit" name="checkout.cart.item.renderers.virtual.actions.edit" template="Magento_Checkout::cart/item/renderer/actions/edit.phtml"/>
<block class="Magento\Checkout\Block\Cart\Item\Renderer\Actions\Remove" name="checkout.cart.item.renderers.virtual.actions.remove" template="Magento_Checkout::cart/item/renderer/actions/remove.phtml"/>
</block>
</block>
</referenceBlock>
</body>
</page>
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="before.body.end">
<block class="Magento\Catalog\Block\FrontendStorageManager" name="frontend-storage-manager" before="-"
template="Magento_Catalog::frontend_storage_manager.phtml">
<arguments>
<argument name="configuration" xsi:type="array">
<item name="recently_viewed_product" xsi:type="array">
<item name="requestConfig" xsi:type="array">
<item name="syncUrl" xsi:type="url" path="catalog/product/frontend_action_synchronize"/>
</item>
</item>
<item name="recently_compared_product" xsi:type="array">
<item name="requestConfig" xsi:type="array">
<item name="syncUrl" xsi:type="url" path="catalog/product/frontend_action_synchronize"/>
</item>
</item>
<item name="product_data_storage" xsi:type="array">
<item name="updateRequestConfig" xsi:type="array">
<item name="url" xsi:type="serviceUrl" path="/products-render-info"/>
</item>
<item name="requestConfig" xsi:type="array">
<item name="syncUrl" xsi:type="url" path="catalog/product/frontend_action_synchronize"/>
</item>
</item>
</argument>
</arguments>
</block>
</referenceContainer>
<referenceBlock name="top.links">
<block class="Magento\Framework\View\Element\Template" name="catalog.compare.link" before="-"
template="Magento_Catalog::product/compare/link.phtml">
<arguments>
<argument name="jsLayout" xsi:type="array">
<item name="components" xsi:type="array">
<item name="compareProducts" xsi:type="array">
<item name="component" xsi:type="string">Magento_Catalog/js/view/compare-products</item>
</item>
</item>
</argument>
</arguments>
</block>
</referenceBlock>
<referenceContainer name="sidebar.additional">
<block class="Magento\Framework\View\Element\Template" name="catalog.compare.sidebar"
template="Magento_Catalog::product/compare/sidebar.phtml">
<arguments>
<argument name="jsLayout" xsi:type="array">
<item name="components" xsi:type="array">
<item name="compareProducts" xsi:type="array">
<item name="component" xsi:type="string">Magento_Catalog/js/view/compare-products</item>
</item>
</item>
</argument>
</arguments>
</block>
</referenceContainer>
<referenceContainer name="after.body.start">
<block class="Magento\Framework\View\Element\Js\Components" name="head.components" as="components" template="Magento_Catalog::js/components.phtml"/>
</referenceContainer>
<block class="Magento\Framework\View\Element\Template" name="head.additional" as="head.additional" template="Magento_Theme::html/container.phtml"/>
</body>
</page>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
/**
* Category view template
*
* @var $block \Magento\Catalog\Block\Category\View
*/
?>
<?php if ($block->isContentMode() || $block->isMixedMode()) :?>
<div class="category-cms">
<?= $block->getCmsBlockHtml() ?>
</div>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
/**
* Category view template
*
* @var $block \Magento\Catalog\Block\Category\View
*/
?>
<?php if ($_description = $block->getCurrentCategory()->getDescription()) :?>
<div class="category-description">
<?= /* @noEscape */ $this->helper(Magento\Catalog\Helper\Output::class)->categoryAttribute(
$block->getCurrentCategory(),
$_description,
'description'
) ?>
</div>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
/**
* Category view template
*
* @var $block \Magento\Catalog\Block\Category\View
*/
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
// phpcs:disable Generic.WhiteSpace.ScopeIndent.IncorrectExact
// phpcs:disable Magento2.Security.LanguageConstruct.DirectOutput
?>
<?php
$_category = $block->getCurrentCategory();
$_imgHtml = '';
if ($_imgUrl = $block->getImage()->getUrl($_category)) {
$_imgHtml = '<div class="category-image"><img src="'
. $block->escapeUrl($_imgUrl)
. '" alt="'
. $block->escapeHtmlAttr($_category->getName())
. '" title="'
. $block->escapeHtmlAttr($_category->getName())
. '" class="image" /></div>';
$_imgHtml = $block->getOutput()->categoryAttribute($_category, $_imgHtml, 'image');
/* @noEscape */ echo $_imgHtml;
}
?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
/**
* Category view template
*
* @var $block \Magento\Catalog\Block\Category\View
*/
?>
<?php if (!$block->isContentMode() || $block->isMixedMode()) :?>
<?= $block->getProductListHtml() ?>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var $block \Magento\Catalog\Block\Category\Rss\Link */
?>
<?php if ($block->isRssAllowed() && $block->getLink() && $block->isTopCategory()) :?>
<a href="<?= $block->escapeUrl($block->getLink()) ?>"
class="action link rss"><span><?= $block->escapeHtml($block->getLabel()) ?></span></a>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<div class="widget block block-category-link">
<a <?= /* @noEscape */ $block->getLinkAttributes() ?>><span><?= $block->escapeHtml($block->getLabel()) ?></span></a>
</div>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var Magento\Catalog\Block\Widget\Link $block */
?>
<?= $block->escapeHtml($block->getHref()) ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<span class="widget block block-category-link-inline">
<a <?= /* @noEscape */ $block->getLinkAttributes() ?>><span><?= $block->escapeHtml($block->getLabel()) ?></span></a>
</span>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var $block Magento\Catalog\Block\FrontendStorageManager */
?>
<script type="text/x-magento-init">
{
"*": {
"Magento_Ui/js/core/app": {
"components": {
"storage-manager": {
"component": "Magento_Catalog/js/storage-manager",
"appendTo": "<?= $block->escapeJs($block->getParentComponentName()) ?>",
"storagesConfiguration" : <?= /* @noEscape */ $block->getConfigurationJson() ?>
}
}
}
}
}
</script>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var \Magento\Framework\View\Element\Template $block */
?>
<?= $block->escapeHtml(
__(
'You added product %1 to the <a href="%2">comparison list</a>.',
$block->getData('product_name'),
$block->getData('compare_list_url')
),
['a']
);
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/**
* Category left navigation
*
* @var $block \Magento\Catalog\Block\Navigation
*/
?>
<?php if (!$block->getCategory()) {
return;
} ?>
<?php $_categories = $block->getCurrentChildCategories() ;?>
<?php $_count = is_array($_categories) ? count($_categories) : $_categories->count(); ?>
<?php if ($_count) :?>
<div class="block filter">
<div class="title">
<strong><?= $block->escapeHtml(__('Shop By')) ?></strong>
</div>
<div class="content">
<strong class="subtitle"><?= $block->escapeHtml(__('Shopping Options')) ?></strong>
<dl class="options" id="narrow-by-list2">
<dt><?= $block->escapeHtml(__('Category')) ?></dt>
<dd>
<ol class="items">
<?php /** @var \Magento\Catalog\Model\Category $_category */ ?>
<?php foreach ($_categories as $_category) :?>
<?php if ($_category->getIsActive()) :?>
<li class="item">
<a href="<?= $block->escapeUrl($block->getCategoryUrl($_category)) ?>"
<?php if ($block->isCategoryActive($_category)) :?>
class="current"
<?php endif; ?>
><?= $block->escapeHtml($_category->getName()) ?></a>
<span class="count"><?= $block->escapeHtml($_category->getProductCount()) ?></span>
</li>
<?php endif; ?>
<?php endforeach ?>
</ol>
</dd>
</dl>
</div>
</div>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var \Magento\Theme\Block\Html\Breadcrumbs $block */
/** @var \Magento\Catalog\ViewModel\Product\Breadcrumbs $viewModel */
$viewModel = $block->getData('viewModel');
?>
<div class="breadcrumbs"></div>
<?php
$widget = $this->helper(\Magento\Framework\Json\Helper\Data::class)->jsonDecode($viewModel->getJsonConfigurationHtmlEscaped());
$widgetOptions = $this->helper(\Magento\Framework\Json\Helper\Data::class)->jsonEncode($widget['breadcrumbs']);
?>
<script type="text/x-magento-init">
{
".breadcrumbs": {
"breadcrumbs": <?= /* @noEscape */ $widgetOptions ?>
}
}
</script>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var $block Magento\Framework\View\Element\Template */
?>
<li class="item link compare" data-bind="scope: 'compareProducts'" data-role="compare-products-link">
<a class="action compare no-display" title="<?= $block->escapeHtmlAttr(__('Compare Products')) ?>"
data-bind="attr: {'href': compareProducts().listUrl}, css: {'no-display': !compareProducts().count}"
>
<?= $block->escapeHtml(__('Compare Products')) ?>
<span class="counter qty" data-bind="text: compareProducts().countCaption"></span>
</a>
</li>
<script type="text/x-magento-init">
{"[data-role=compare-products-link]": {"Magento_Ui/js/core/app": <?= /* @noEscape */ $block->getJsLayout() ?>}}
</script>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
// phpcs:disable PSR2.ControlStructures.SwitchDeclaration
// phpcs:disable Generic.WhiteSpace.ScopeIndent
/* @var $block \Magento\Catalog\Block\Product\Compare\ListCompare */
?>
<?php $total = $block->getItems()->getSize() ?>
<?php if ($total) :?>
<a href="#" class="action print hidden-print" title="<?= $block->escapeHtmlAttr(__('Print This Page')) ?>">
<span><?= $block->escapeHtml(__('Print This Page')) ?></span>
</a>
<div class="table-wrapper comparison">
<table class="data table table-comparison" id="product-comparison"
data-mage-init='{"compareList":{
"windowPrintSelector":".action.print",
"productsInRow":"5",
"selectors":{
"productAddToCartSelector":"button.action.tocart"}
}}'>
<caption class="table-caption"><?= $block->escapeHtml(__('Compare Products')) ?></caption>
<thead>
<tr>
<?php $index = 0 ?>
<?php foreach ($block->getItems() as $item) :?>
<?php if ($index++ == 0) :?>
<th scope="row" class="cell label remove"><span><?= $block->escapeHtml(__('Remove Product')) ?></span></th>
<?php endif; ?>
<td class="cell remove product hidden-print">
<?php $compareHelper = $this->helper(Magento\Catalog\Helper\Product\Compare::class);?>
<a href="#" data-post='<?= /* @noEscape */ $compareHelper->getPostDataRemove($item) ?>'
class="action delete" title="<?= $block->escapeHtmlAttr(__('Remove Product')) ?>">
<span><?= $block->escapeHtml(__('Remove Product')) ?></span>
</a>
</td>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
<tr>
<?php $index = 0; ?>
<?php $helper = $this->helper(Magento\Catalog\Helper\Output::class); ?>
<?php /** @var $item \Magento\Catalog\Model\Product */ ?>
<?php foreach ($block->getItems() as $item) :?>
<?php if ($index++ == 0) :?>
<th scope="row" class="cell label product">
<span><?= $block->escapeHtml(__('Product')) ?></span>
</th>
<?php endif; ?>
<td data-th="<?= $block->escapeHtmlAttr(__('Product')) ?>" class="cell product info">
<a class="product-item-photo"
href="<?= $block->escapeUrl($block->getProductUrl($item)) ?>"
title="<?= /* @noEscape */ $block->stripTags($item->getName(), null, true) ?>">
<?= $block->getImage($item, 'product_comparison_list')->toHtml() ?>
</a>
<strong class="product-item-name">
<a href="<?= $block->escapeUrl($block->getProductUrl($item)) ?>"
title="<?= /* @noEscape */ $block->stripTags($item->getName(), null, true) ?>">
<?= /* @noEscape */ $helper->productAttribute($item, $item->getName(), 'name') ?>
</a>
</strong>
<?= $block->getReviewsSummaryHtml($item, 'short') ?>
<?= /* @noEscape */ $block->getProductPrice($item, '-compare-list-top') ?>
<div class="product-item-actions hidden-print">
<div class="actions-primary">
<?php if ($item->isSaleable()) :?>
<form data-role="tocart-form"
action="<?= $block->escapeUrl($this->helper(Magento\Catalog\Helper\Product\Compare::class)->getAddToCartUrl($item)) ?>"
method="post">
<?= $block->getBlockHtml('formkey') ?>
<button type="submit" class="action tocart primary" disabled>
<span><?= $block->escapeHtml(__('Add to Cart')) ?></span>
</button>
</form>
<?php else :?>
<?php if ($item->isAvailable()) :?>
<div class="stock available"><span><?= $block->escapeHtml(__('In stock')) ?></span></div>
<?php else :?>
<div class="stock unavailable"><span><?= $block->escapeHtml(__('Out of stock')) ?></span></div>
<?php endif; ?>
<?php endif; ?>
</div>
<?php if ($this->helper(Magento\Wishlist\Helper\Data::class)->isAllow()) :?>
<div class="secondary-addto-links actions-secondary" data-role="add-to-links">
<a href="#"
data-post='<?= /* @noEscape */ $block->getAddToWishlistParams($item) ?>'
class="action towishlist"
data-action="add-to-wishlist">
<span><?= $block->escapeHtml(__('Add to Wish List')) ?></span>
</a>
</div>
<?php endif; ?>
</div>
</td>
<?php endforeach; ?>
</tr>
</tbody>
<tbody>
<?php foreach ($block->getAttributes() as $attribute) :?>
<?php $index = 0; ?>
<?php if ($block->hasAttributeValueForProducts($attribute)) :?>
<tr>
<?php foreach ($block->getItems() as $item) :?>
<?php if ($index++ == 0) :?>
<th scope="row" class="cell label">
<span class="attribute label">
<?= $block->escapeHtml($attribute->getStoreLabel() ? $attribute->getStoreLabel() : __($attribute->getFrontendLabel())) ?>
</span>
</th>
<?php endif; ?>
<td class="cell product attribute">
<div class="attribute value">
<?php switch ($attribute->getAttributeCode()) {
case "price": ?>
<?=
/* @noEscape */ $block->getProductPrice(
$item,
'-compare-list-' . $attribute->getCode()
)
?>
<?php break;
case "small_image": ?>
<?php $block->getImage($item, 'product_small_image')->toHtml(); ?>
<?php break;
default :?>
<?php if (is_string($block->getProductAttributeValue($item, $attribute))) :?>
<?= /* @noEscape */ $helper->productAttribute($item, $block->getProductAttributeValue($item, $attribute), $attribute->getAttributeCode()) ?>
<?php else : ?>
<?= $block->escapeHtml($helper->productAttribute($item, $block->getProductAttributeValue($item, $attribute), $attribute->getAttributeCode())) ?>
<?php endif; ?>
<?php break;
} ?>
</div>
</td>
<?php endforeach; ?>
</tr>
<?php endif; ?>
<?php endforeach; ?>
</tbody>
</table>
</div>
<script type="text/x-magento-init">
{
"[data-role=tocart-form]": {
"catalogAddToCart": {}
}
}
</script>
<?php else :?>
<div class="message info empty"><div><?= $block->escapeHtml(__('You have no items to compare.')) ?></div></div>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
/* @var $block \Magento\Framework\View\Element\Template */
?>
<div class="block block-compare" data-bind="scope: 'compareProducts'" data-role="compare-products-sidebar">
<div class="block-title">
<strong id="block-compare-heading" role="heading" aria-level="2"><?= $block->escapeHtml(__('Compare Products')) ?></strong>
<span class="counter qty no-display" data-bind="text: compareProducts().countCaption, css: {'no-display': !compareProducts().count}"></span>
</div>
<!-- ko if: compareProducts().count -->
<div class="block-content no-display" aria-labelledby="block-compare-heading" data-bind="css: {'no-display': !compareProducts().count}">
<ol id="compare-items" class="product-items product-items-names" data-bind="foreach: compareProducts().items">
<li class="product-item">
<input type="hidden" class="compare-item-id" data-bind="value: id"/>
<strong class="product-item-name">
<a data-bind="attr: {href: product_url}, html: name" class="product-item-link"></a>
</strong>
<a href="#"
data-bind="attr: {'data-post': remove_url}"
title="<?= $block->escapeHtmlAttr(__('Remove This Item')) ?>"
class="action delete">
<span><?= $block->escapeHtml(__('Remove This Item')) ?></span>
</a>
</li>
</ol>
<div class="actions-toolbar">
<div class="primary">
<a data-bind="attr: {'href': compareProducts().listUrl}" class="action compare primary"><span><?= $block->escapeHtml(__('Compare')) ?></span></a>
</div>
<div class="secondary">
<a id="compare-clear-all" href="#" class="action clear" data-post="<?=$block->escapeHtml(
$this->helper(Magento\Catalog\Helper\Product\Compare::class)->getPostDataClearList()
) ?>">
<span><?= $block->escapeHtml(__('Clear All')) ?></span>
</a>
</div>
</div>
</div>
<!-- /ko -->
<!-- ko ifnot: compareProducts().count -->
<div class="empty"><?= $block->escapeHtml(__('You have no items to compare.')) ?></div>
<!-- /ko -->
</div>
<script type="text/x-magento-init">
{"[data-role=compare-products-sidebar]": {"Magento_Ui/js/core/app": <?= /* @noEscape */ $block->getJsLayout() ?>}}
</script>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var \Magento\Catalog\Block\Product\Gallery $block */
/** @var \Magento\Framework\View\Helper\SecureHtmlRenderer $secureRenderer */
?>
<?php $_width = $block->getImageWidth(); ?>
<div class="product-image-popup">
<div class="buttons-set"><a href="#" class="button" role="close-window">
<span><?= $block->escapeHtml(__('Close Window')) ?></span></a></div>
<?php if ($block->getPreviousImageUrl() || $block->getNextImageUrl()):?>
<div class="nav">
<?php if ($_prevUrl = $block->getPreviousImageUrl()):?>
<a href="<?= $block->escapeUrl($_prevUrl) ?>"
class="prev">&laquo; <?= $block->escapeHtml(__('Prev')) ?></a>
<?php endif; ?>
<?php if ($_nextUrl = $block->getNextImageUrl()):?>
<a href="<?= $block->escapeUrl($_nextUrl) ?>"
class="next"><?= $block->escapeHtml(__('Next')) ?> &raquo;</a>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if ($_imageTitle = $block->escapeHtml($block->getCurrentImage()->getLabel())):?>
<h1 class="image-label"><?= /* @noEscape */ $_imageTitle ?></h1>
<?php endif; ?>
<?php
$imageUrl = $block->getImageUrl();
?>
<img src="<?= $block->escapeUrl($imageUrl) ?>"
<?php if ($_width):?>
width="<?= /* @noEscape */ $_width ?>"
<?php endif; ?>
alt="<?= $block->escapeHtmlAttr($block->getCurrentImage()->getLabel()) ?>"
title="<?= $block->escapeHtmlAttr($block->getCurrentImage()->getLabel()) ?>"
id="product-gallery-image"
class="image"
data-mage-init='{"catalogGallery":{}}'/>
<div class="buttons-set"><
a href="#" class="button" role="close-window"><span><?= $block->escapeHtml(__('Close Window')) ?></span></a>
</div>
<?php if ($block->getPreviousImageUrl() || $block->getNextImageUrl()):?>
<div class="nav">
<?php if ($_prevUrl = $block->getPreviousImageUrl()):?>
<a href="<?= $block->escapeUrl($_prevUrl) ?>"
class="prev">&laquo; <?= $block->escapeHtml(__('Prev')) ?></a>
<?php endif; ?>
<?php if ($_nextUrl = $block->getNextImageUrl()):?>
<a href="<?= $block->escapeUrl($_nextUrl) ?>"
class="next"><?= $block->escapeHtml(__('Next')) ?> &raquo;</a>
<?php endif; ?>
</div>
<?php endif; ?>
</div>
<?= /* @noEscape */ $secureRenderer->renderStyleAsTag(
'width:' . /* @noEscape */ $_width . 'px;',
'div.product-image-popup'
) ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
/** @var $block \Magento\Catalog\Block\Product\Image */
/** @var $escaper \Magento\Framework\Escaper */
?>
<!--deprecated template as image_with_borders is a primary one-->
<img class="photo image <?= $escaper->escapeHtmlAttr($block->getClass()) ?>"
<?php foreach ($block->getCustomAttributes() as $name => $value): ?>
<?= $escaper->escapeHtmlAttr($name) ?>="<?= $escaper->escapeHtml($value) ?>"
<?php endforeach; ?>
src="<?= $escaper->escapeUrl($block->getImageUrl()) ?>"
loading="lazy"
width="<?= $escaper->escapeHtmlAttr($block->getWidth()) ?>"
height="<?= $escaper->escapeHtmlAttr($block->getHeight()) ?>"
alt="<?= $escaper->escapeHtmlAttr($block->getLabel()) ?>" />
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
/** @var $block \Magento\Catalog\Block\Product\Image */
/** @var $escaper \Magento\Framework\Escaper */
/** @var \Magento\Framework\View\Helper\SecureHtmlRenderer $secureRenderer */
$width = (int)$block->getWidth();
$paddingBottom = $block->getRatio() * 100;
?>
<span class="product-image-container product-image-container-<?= /* @noEscape */ $block->getProductId() ?>">
<span class="product-image-wrapper">
<img class="<?= $escaper->escapeHtmlAttr($block->getClass()) ?>"
<?php foreach ($block->getCustomAttributes() as $name => $value): ?>
<?= $escaper->escapeHtmlAttr($name) ?>="<?= $escaper->escapeHtml($value) ?>"
<?php endforeach; ?>
src="<?= $escaper->escapeUrl($block->getImageUrl()) ?>"
loading="lazy"
width="<?= $escaper->escapeHtmlAttr($block->getWidth()) ?>"
height="<?= $escaper->escapeHtmlAttr($block->getHeight()) ?>"
alt="<?= $escaper->escapeHtmlAttr($block->getLabel()) ?>"/></span>
</span>
<?php
$styles = <<<STYLE
.product-image-container-{$block->getProductId()} {
width: {$width}px;
}
.product-image-container-{$block->getProductId()} span.product-image-wrapper {
padding-bottom: {$paddingBottom}%;
}
STYLE;
//In case a script was using "style" attributes of these elements
$script = <<<SCRIPT
prodImageContainers = document.querySelectorAll(".product-image-container-{$block->getProductId()}");
for (var i = 0; i < prodImageContainers.length; i++) {
prodImageContainers[i].style.width = "{$width}px";
}
prodImageContainersWrappers = document.querySelectorAll(
".product-image-container-{$block->getProductId()} span.product-image-wrapper"
);
for (var i = 0; i < prodImageContainersWrappers.length; i++) {
prodImageContainersWrappers[i].style.paddingBottom = "{$paddingBottom}%";
}
SCRIPT;
?>
<?= /* @noEscape */ $secureRenderer->renderTag('style', [], $styles, false) ?>
<?= /* @noEscape */ $secureRenderer->renderTag('script', ['type' => 'text/javascript'], $script, false) ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
use Magento\Framework\App\Action\Action;
?>
<?php
/**
* Product list template
*
* @var $block \Magento\Catalog\Block\Product\ListProduct
* @var \Magento\Framework\Escaper $escaper
* @var \Magento\Framework\View\Helper\SecureHtmlRenderer $secureRenderer
*/
?>
<?php
$_productCollection = $block->getLoadedProductCollection();
/** @var \Magento\Catalog\Helper\Output $_helper */
$_helper = $block->getData('outputHelper');
?>
<?php if (!$_productCollection->count()): ?>
<div class="message info empty">
<div><?= $escaper->escapeHtml(__('We can\'t find products matching the selection.')) ?></div>
</div>
<?php else: ?>
<?= $block->getToolbarHtml() ?>
<?= $block->getAdditionalHtml() ?>
<?php
if ($block->getMode() === 'grid') {
$viewMode = 'grid';
$imageDisplayArea = 'category_page_grid';
$showDescription = false;
$templateType = \Magento\Catalog\Block\Product\ReviewRendererInterface::SHORT_VIEW;
} else {
$viewMode = 'list';
$imageDisplayArea = 'category_page_list';
$showDescription = true;
$templateType = \Magento\Catalog\Block\Product\ReviewRendererInterface::FULL_VIEW;
}
/**
* Position for actions regarding image size changing in vde if needed
*/
$pos = $block->getPositioned();
?>
<div class="products wrapper <?= /* @noEscape */ $viewMode ?> products-<?= /* @noEscape */ $viewMode ?>">
<ol class="products list items product-items">
<?php /** @var $_product \Magento\Catalog\Model\Product */ ?>
<?php foreach ($_productCollection as $_product): ?>
<li class="item product product-item">
<div class="product-item-info"
id="product-item-info_<?= /* @noEscape */ $_product->getId() ?>"
data-container="product-<?= /* @noEscape */ $viewMode ?>">
<?php
$productImage = $block->getImage($_product, $imageDisplayArea);
if ($pos != null) {
$position = 'left:' . $productImage->getWidth() . 'px;'
. 'top:' . $productImage->getHeight() . 'px;';
}
?>
<?php // Product Image ?>
<a href="<?= $escaper->escapeUrl($_product->getProductUrl()) ?>"
class="product photo product-item-photo"
tabindex="-1">
<?= $productImage->toHtml() ?>
</a>
<div class="product details product-item-details">
<?= $block->getProductDetailsHtml($_product) ?>
<?php $_productNameStripped = $block->stripTags($_product->getName(), null, true); ?>
<strong class="product name product-item-name">
<a class="product-item-link"
href="<?= $escaper->escapeUrl($_product->getProductUrl()) ?>">
<?=/* @noEscape */ $_helper->productAttribute($_product, $_product->getName(), 'name')?>
</a>
</strong>
<?= $block->getReviewsSummaryHtml($_product, $templateType) ?>
<?= /* @noEscape */ $block->getProductPrice($_product) ?>
<div class="product-item-inner">
<div class="product actions product-item-actions">
<div class="actions-primary">
<?php if ($_product->isSaleable()):?>
<?php $postParams = $block->getAddToCartPostParams($_product); ?>
<form data-role="tocart-form"
data-product-sku="<?= $escaper->escapeHtml($_product->getSku()) ?>"
action="<?= $escaper->escapeUrl($postParams['action']) ?>"
method="post">
<?php $optionsData = $block->getData('viewModel')->getOptionsData($_product); ?>
<?php foreach ($optionsData as $optionItem): ?>
<input type="hidden"
name="<?= $escaper->escapeHtml($optionItem['name']) ?>"
value="<?= $escaper->escapeHtml($optionItem['value']) ?>">
<?php endforeach; ?>
<input type="hidden"
name="product"
value="<?= /* @noEscape */ $postParams['data']['product'] ?>">
<input type="hidden"
name="<?= /* @noEscape */ Action::PARAM_NAME_URL_ENCODED ?>"
value="<?=
/* @noEscape */ $postParams['data'][Action::PARAM_NAME_URL_ENCODED]
?>">
<?= $block->getBlockHtml('formkey') ?>
<!-- <button type="submit"-->
<!-- title="--><?//= $escaper->escapeHtmlAttr(__('Add to Cart')) ?><!--"-->
<!-- class="action tocart primary"-->
<!-- disabled>-->
<!-- <span>--><?//= $escaper->escapeHtml(__('Add to Cart')) ?><!--</span>-->
<!-- </button>-->
</form>
<?php else:?>
<?php if ($_product->isAvailable()):?>
<div class="stock available">
<span><?= $escaper->escapeHtml(__('In stock')) ?></span></div>
<?php else:?>
<div class="stock unavailable">
<span><?= $escaper->escapeHtml(__('Out of stock')) ?></span></div>
<?php endif; ?>
<?php endif; ?>
</div>
<?= strpos($pos, $viewMode . '-primary') ?
/* @noEscape */ $secureRenderer->renderStyleAsTag(
$position,
'product-item-info_' . $_product->getId() . ' div.actions-primary'
) : '' ?>
<!-- <div data-role="add-to-links" class="actions-secondary">-->
<!-- --><?php //if ($addToBlock = $block->getChildBlock('addto')): ?>
<!-- --><?//= $addToBlock->setProduct($_product)->getChildHtml() ?>
<!-- --><?php //endif; ?>
<!-- </div>-->
<?= strpos($pos, $viewMode . '-secondary') ?
/* @noEscape */ $secureRenderer->renderStyleAsTag(
$position,
'product-item-info_' . $_product->getId() . ' div.actions-secondary'
) : '' ?>
</div>
<?php if ($showDescription): ?>
<div class="product description product-item-description">
<?= /* @noEscape */ $_helper->productAttribute(
$_product,
$_product->getShortDescription(),
'short_description'
) ?>
<a href="<?= $escaper->escapeUrl($_product->getProductUrl()) ?>"
title="<?= /* @noEscape */ $_productNameStripped ?>"
class="action more"><?= $escaper->escapeHtml(__('Learn More')) ?></a>
</div>
<?php endif; ?>
</div>
</div>
</div>
<?= strpos($pos, $viewMode . '-actions') ?
/* @noEscape */ $secureRenderer->renderStyleAsTag(
$position,
'product-item-info_' . $_product->getId() . ' div.product-item-actions'
) : '' ?>
</li>
<?php endforeach; ?>
</ol>
</div>
<?= $block->getChildBlock('toolbar')->setIsBottom(true)->toHtml() ?>
<script type="text/x-magento-init">
{
"[data-role=tocart-form], .form.map.checkout": {
"catalogAddToCart": {
"product_sku": "<?= $escaper->escapeJs($_product->getSku()) ?>"
}
}
}
</script>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var $block Magento\Catalog\Block\Product\ProductList\Item\AddTo\Compare */
?>
<a href="#"
class="action tocompare"
title="<?= $block->escapeHtml(__('Add to Compare')) ?>"
aria-label="<?= $block->escapeHtml(__('Add to Compare')) ?>"
data-post='<?= /* @noEscape */ $block->getCompareHelper()->getPostDataParams($block->getProduct()) ?>'
role="button">
<span><?= $block->escapeHtml(__('Add to Compare')) ?></span>
</a>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
use Magento\Catalog\ViewModel\Product\Listing\PreparePostData;
use Magento\Framework\App\ActionInterface;
/* @var $block \Magento\Catalog\Block\Product\AbstractProduct */
/** @var \Magento\Framework\View\Helper\SecureHtmlRenderer $secureRenderer */
?>
<?php
switch ($type = $block->getType()) {
case 'related-rule':
if ($exist = $block->hasItems()) {
$type = 'related';
$class = $type;
$image = 'related_products_list';
$title = __('Related Products');
$items = $block->getAllItems();
$limit = $block->getPositionLimit();
$shuffle = (int) $block->isShuffled();
$isWeightedRandom = (int) $block->getRotation()->isWeightedRandom($block->getProductListType());
$canItemsAddToCart = $block->canItemsAddToCart();
$showAddTo = true;
$showCart = false;
$templateType = null;
$description = false;
}
break;
case 'related':
/** @var \Magento\Catalog\Block\Product\ProductList\Related $block */
if ($exist = $block->getItems()->getSize()) {
$type = 'related';
$class = $type;
$image = 'related_products_list';
$title = __('Related Products');
$items = $block->getItems();
$limit = 0;
$shuffle = 0;
$isWeightedRandom = 0;
$canItemsAddToCart = $block->canItemsAddToCart();
$showAddTo = true;
$showCart = false;
$templateType = null;
$description = false;
}
break;
case 'upsell-rule':
if ($exist = $block->hasItems()) {
$type = 'upsell';
$class = $type;
$image = 'upsell_products_list';
$title = __('We found other products you might like!');
$items = $block->getAllItems();
$limit = $block->getPositionLimit();
$shuffle = (int) $block->isShuffled();
$isWeightedRandom = (int) $block->getRotation()->isWeightedRandom($block->getProductListType());
$showAddTo = false;
$showCart = false;
$templateType = null;
$description = false;
$canItemsAddToCart = false;
}
break;
case 'upsell':
/** @var \Magento\Catalog\Block\Product\ProductList\Upsell $block */
if ($exist = count($block->getItemCollection()->getItems())) {
$type = 'upsell';
$class = $type;
$image = 'upsell_products_list';
$title = __('We found other products you might like!');
$items = $block->getItemCollection()->getItems();
$limit = $block->getItemLimit('upsell');
$shuffle = 0;
$isWeightedRandom = 0;
$showAddTo = false;
$showCart = false;
$templateType = null;
$description = false;
$canItemsAddToCart = false;
}
break;
case 'crosssell-rule':
/** @var \Magento\Catalog\Block\Product\ProductList\Crosssell $block */
if ($exist = $block->hasItems()) {
$type = 'crosssell';
$class = $type;
$image = 'cart_cross_sell_products';
$title = __('More Choices:');
$items = $block->getItemCollection();
$showAddTo = true;
$showCart = true;
$templateType = \Magento\Catalog\Block\Product\ReviewRendererInterface::SHORT_VIEW;
$description = false;
$canItemsAddToCart = false;
}
break;
case 'crosssell':
/** @var \Magento\Catalog\Block\Product\ProductList\Crosssell $block */
if ($exist = count($block->getItems())) {
$type = 'crosssell';
$class = $type;
$image = 'cart_cross_sell_products';
$title = __('More Choices:');
$items = $block->getItems();
$showAddTo = true;
$showCart = true;
$templateType = \Magento\Catalog\Block\Product\ReviewRendererInterface::SHORT_VIEW;
$description = false;
$canItemsAddToCart = false;
}
break;
case 'new':
if ($exist = $block->getProductCollection()) {
$type = 'new';
$mode = 'grid';
$type = $type . ' ' . $mode;
$class = 'widget' . ' ' . $type;
$image = 'new_products_content_widget_grid';
$title = __('New Products');
$items = $exist;
$showAddTo = true;
$showCart = true;
$templateType = \Magento\Catalog\Block\Product\ReviewRendererInterface::SHORT_VIEW;
$description = ($mode == 'list') ? true : false;
$canItemsAddToCart = false;
}
break;
default:
$exist = null;
}
$_item = null;
?>
<?php if ($exist):?>
<?php if ($type == 'related' || $type == 'upsell'):?>
<?php if ($type == 'related'):?>
<div class="block <?= $block->escapeHtmlAttr($class) ?>"
data-mage-init='{"relatedProducts":{"relatedCheckbox":".related.checkbox"}}'
data-limit="<?= $block->escapeHtmlAttr($limit) ?>"
data-shuffle="<?= /* @noEscape */ $shuffle ?>"
data-shuffle-weighted="<?= /* @noEscape */ $isWeightedRandom ?>">
<?php else:?>
<div class="block <?= $block->escapeHtmlAttr($class) ?>"
data-mage-init='{"upsellProducts":{}}'
data-limit="<?= $block->escapeHtmlAttr($limit) ?>"
data-shuffle="<?= /* @noEscape */ $shuffle ?>"
data-shuffle-weighted="<?= /* @noEscape */ $isWeightedRandom ?>">
<?php endif; ?>
<?php else:?>
<div class="block <?= $block->escapeHtmlAttr($class) ?>">
<?php endif; ?>
<div class="block-title title">
<strong id="block-<?= $block->escapeHtmlAttr($class) ?>-heading" role="heading"
aria-level="2"><?= $block->escapeHtml($title) ?></strong>
</div>
<div class="block-content content" aria-labelledby="block-<?= $block->escapeHtmlAttr($class) ?>-heading">
<?php if ($type == 'related' && $canItemsAddToCart):?>
<div class="block-actions">
<?= $block->escapeHtml(__('Check items to add to the cart or')) ?>
<button type="button" class="action select"
data-role="select-all"><span><?= $block->escapeHtml(__('select all')) ?></span></button>
</div>
<?php endif; ?>
<div class="products wrapper grid products-grid products-<?= $block->escapeHtmlAttr($type) ?>">
<ol class="products list items product-items">
<?php foreach ($items as $_item):?>
<?php $available = ''; ?>
<?php if (!$_item->isComposite() && $_item->isSaleable() && $type == 'related'):?>
<?php if (!$_item->getRequiredOptions()):?>
<?php $available = 'related-available'; ?>
<?php endif; ?>
<?php endif; ?>
<?php if ($type == 'related' || $type == 'upsell'):?>
<li class="item product product-item"
id="product-item_<?= /* @noEscape */ $_item->getId() ?>"
data-shuffle-group="<?= $block->escapeHtmlAttr($_item->getPriority()) ?>" >
<?= /* @noEscape */ $secureRenderer->renderStyleAsTag(
'display:none;',
'li#product-item_' . $_item->getId()
) ?>
<?php else:?>
<li class="item product product-item">
<?php endif; ?>
<div class="product-item-info <?= /* @noEscape */ $available ?>">
<?= /* @noEscape */ '<!-- ' . $image . '-->' ?>
<a href="<?= $block->escapeUrl($block->getProductUrl($_item)) ?>"
class="product photo product-item-photo">
<?= $block->getImage($_item, $image)->toHtml() ?>
</a>
<div class="product details product-item-details">
<strong class="product name product-item-name"><a
class="product-item-link"
title="<?= $block->escapeHtmlAttr($_item->getName()) ?>"
href="<?= $block->escapeUrl($block->getProductUrl($_item)) ?>">
<?= $block->escapeHtml($_item->getName()) ?></a>
</strong>
<?= /* @noEscape */ $block->getProductPrice($_item) ?>
<?php if ($templateType):?>
<?= $block->getReviewsSummaryHtml($_item, $templateType) ?>
<?php endif; ?>
<?php if ($canItemsAddToCart && !$_item->isComposite() && $_item->isSaleable()
&& $type == 'related'):?>
<?php if (!$_item->getRequiredOptions()):?>
<div class="field choice related">
<input
type="checkbox"
class="checkbox related"
id="related-checkbox<?= $block->escapeHtmlAttr($_item->getId()) ?>"
name="related_products[]"
value="<?= $block->escapeHtmlAttr($_item->getId()) ?>" />
<label class="label"
for="related-checkbox<?= $block->escapeHtmlAttr($_item->getId())
?>"><span><?= $block->escapeHtml(__('Add to Cart')) ?></span>
</label>
</div>
<?php endif; ?>
<?php endif; ?>
<?php if ($showAddTo || $showCart):?>
<?php // phpcs:disable ?>
<div class="product actions product-item-actions">
<?php if ($showCart):?>
<div class="actions-primary">
<?php if ($_item->isSaleable()):?>
<?php if (!$_item->getTypeInstance()->isPossibleBuyFromList($_item)):?>
<button
class="action tocart primary"
data-mage-init='{"redirectUrl": {"url": "<?= $block->escapeUrl($block->getAddToCartUrl($_item)) ?>"}}' type="button" title="<?= $block->escapeHtmlAttr(__('Add to Cart')) ?>">
<span><?= $block->escapeHtml(__('Add to Cart')) ?></span>
</button>
<?php else :?>
<?php
/** @var $viewModel PreparePostData */
$viewModel = $block->getViewModel();
$postArray = $viewModel->getPostData(
$block->escapeUrl($block->getAddToCartUrl($_item)),
['product' => $_item->getEntityId()]
);
$value = $postArray['data'][ActionInterface::PARAM_NAME_URL_ENCODED];
?>
<form data-role="tocart-form"
data-product-sku="<?= $block->escapeHtmlAttr($_item->getSku()) ?>"
action="<?= $block->escapeUrl($block->getAddToCartUrl($_item)) ?>"
method="post">
<input type="hidden" name="product"
value="<?= /* @noEscape */ (int)$_item->getEntityId() ?>">
<input type="hidden"
name="<?= /* @noEscape */ ActionInterface::PARAM_NAME_URL_ENCODED?>"
value="<?= /* @noEscape */ $value ?>">
<?= $block->getBlockHtml('formkey') ?>
<button type="submit"
title="<?= $block->escapeHtmlAttr(__('Add to Cart')) ?>"
class="action tocart primary">
<span><?= $block->escapeHtml(__('Add to Cart')) ?></span>
</button>
</form>
<?php endif; ?>
<?php else:?>
<?php if ($_item->isAvailable()):?>
<div class="stock available">
<span><?= $block->escapeHtml(__('In stock')) ?></span>
</div>
<?php else:?>
<div class="stock unavailable">
<span><?= $block->escapeHtml(__('Out of stock')) ?></span>
</div>
<?php endif; ?>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if ($showAddTo):?>
<div class="secondary-addto-links actions-secondary"
data-role="add-to-links">
<?php if ($addToBlock = $block->getChildBlock('addto')):?>
<?= $addToBlock->setProduct($_item)->getChildHtml() ?>
<?php endif; ?>
</div>
<?php endif; ?>
</div>
<?php // phpcs:enable ?>
<?php endif; ?>
</div>
</div>
</li>
<?php endforeach ?>
</ol>
</div>
</div>
</div>
<?php if (!$block->isRedirectToCartEnabled() && $_item):?>
<script type="text/x-magento-init">
{
"[data-role=tocart-form], .form.map.checkout": {
"catalogAddToCart": {
"product_sku": "<?= $block->escapeJs($_item->getSku()) ?>"
}
}
}
</script>
<?php endif;?>
<?php endif;?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
/**
* Product list toolbar
*
* @var $block \Magento\Catalog\Block\Product\ProductList\Toolbar
*/
?>
<?php if ($block->getCollection()->getSize()) :?>
<?php $widget = $this->helper(\Magento\Framework\Json\Helper\Data::class)->jsonDecode($block->getWidgetOptionsJson());
$widgetOptions = $this->helper(\Magento\Framework\Json\Helper\Data::class)->jsonEncode($widget['productListToolbarForm']);
?>
<div class="toolbar toolbar-products" data-mage-init='{"productListToolbarForm":<?= /* @noEscape */ $widgetOptions ?>}'>
<?php if ($block->getIsBottom()): ?>
<?= $block->getPagerHtml() ?>
<?= $block->fetchView($block->getTemplateFile('Magento_Catalog::product/list/toolbar/limiter.phtml')) ?>
<?php else: ?>
<?php if ($block->isExpanded()): ?>
<?= $block->fetchView($block->getTemplateFile('Magento_Catalog::product/list/toolbar/viewmode.phtml')) ?>
<?php endif ?>
<?= $block->fetchView($block->getTemplateFile('Magento_Catalog::product/list/toolbar/amount.phtml')) ?>
<?php if ($block->isExpanded()): ?>
<?= $block->fetchView($block->getTemplateFile('Magento_Catalog::product/list/toolbar/sorter.phtml')) ?>
<?php endif ?>
<?php endif ?>
</div>
<?php endif ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
/**
* Product list toolbar
*
* @var $block \Magento\Catalog\Block\Product\ProductList\Toolbar
*/
?>
<p class="toolbar-amount" id="toolbar-amount">
<?php if ($block->getLastPageNum() > 1) :?>
<?= $block->escapeHtml(
__(
'Items %1-%2 of %3',
'<span class="toolbar-number">' . $block->getFirstNum() . '</span>',
'<span class="toolbar-number">' . $block->getLastNum() . '</span>',
'<span class="toolbar-number">' . $block->getTotalNum() . '</span>'
),
['span']
) ?>
<?php elseif ($block->getTotalNum() == 1) :?>
<?= $block->escapeHtml(
__('%1 Item', '<span class="toolbar-number">' . $block->getTotalNum() . '</span>'),
['span']
) ?>
<?php else :?>
<?= $block->escapeHtml(
__('%1 Items', '<span class="toolbar-number">' . $block->getTotalNum() . '</span>'),
['span']
) ?>
<?php endif; ?>
</p>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
/**
* Product list toolbar
*
* @var $block \Magento\Catalog\Block\Product\ProductList\Toolbar
*/
?>
<div class="field limiter">
<label class="label" for="limiter">
<span><?= $block->escapeHtml(__('Show')) ?></span>
</label>
<div class="control">
<select id="limiter" data-role="limiter" class="limiter-options">
<?php foreach ($block->getAvailableLimit() as $_key => $_limit) :?>
<option value="<?= $block->escapeHtmlAttr($_key) ?>"
<?php if ($block->isLimitCurrent($_key)) :?>
selected="selected"
<?php endif ?>>
<?= $block->escapeHtml($_limit) ?>
</option>
<?php endforeach; ?>
</select>
</div>
<span class="limiter-text"><?= $block->escapeHtml(__('per page')) ?></span>
</div>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
/**
* Product list toolbar
*
* @var $block \Magento\Catalog\Block\Product\ProductList\Toolbar
*/
?>
<div class="toolbar-sorter sorter">
<label class="sorter-label" for="sorter"><?= $block->escapeHtml(__('Sort By')) ?></label>
<select id="sorter" data-role="sorter" class="sorter-options">
<?php foreach ($block->getAvailableOrders() as $_key => $_order) :?>
<option value="<?= $block->escapeHtmlAttr($_key) ?>"
<?php if ($block->isOrderCurrent($_key)) :?>
selected="selected"
<?php endif; ?>
>
<?= $block->escapeHtml(__($_order)) ?>
</option>
<?php endforeach; ?>
</select>
<?php if ($block->getCurrentDirection() == 'desc') :?>
<a title="<?= $block->escapeHtmlAttr(__('Set Ascending Direction')) ?>"
href="#"
class="action sorter-action sort-desc"
data-role="direction-switcher"
data-value="asc">
<span><?= $block->escapeHtml(__('Set Ascending Direction')) ?></span>
</a>
<?php else :?>
<a title="<?= $block->escapeHtmlAttr(__('Set Descending Direction')) ?>"
href="#"
class="action sorter-action sort-asc"
data-role="direction-switcher"
data-value="desc">
<span><?= $block->escapeHtml(__('Set Descending Direction')) ?></span>
</a>
<?php endif; ?>
</div>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
/**
* Product list toolbar
*
* @var $block \Magento\Catalog\Block\Product\ProductList\Toolbar
*/
?>
<?php if ($block->isEnabledViewSwitcher()) :?>
<div class="modes">
<?php $_modes = $block->getModes(); ?>
<?php if ($_modes && count($_modes) > 1) :?>
<strong class="modes-label" id="modes-label"><?= $block->escapeHtml(__('View as')) ?></strong>
<?php foreach ($block->getModes() as $_code => $_label) :?>
<?php if ($block->isModeActive($_code)) :?>
<strong title="<?= $block->escapeHtmlAttr($_label) ?>"
class="modes-mode active mode-<?= $block->escapeHtmlAttr(strtolower($_code)) ?>"
data-value="<?= $block->escapeHtmlAttr(strtolower($_code)) ?>">
<span><?= $block->escapeHtml($_label) ?></span>
</strong>
<?php else :?>
<a class="modes-mode mode-<?= $block->escapeHtmlAttr(strtolower($_code)) ?>"
title="<?= $block->escapeHtmlAttr($_label) ?>"
href="#"
data-role="mode-switcher"
data-value="<?= $block->escapeHtmlAttr(strtolower($_code)) ?>"
id="mode-<?= $block->escapeHtmlAttr(strtolower($_code)) ?>"
aria-labelledby="modes-label mode-<?= $block->escapeHtmlAttr(strtolower($_code)) ?>">
<span><?= $block->escapeHtml($_label) ?></span>
</a>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
</div>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
// phpcs:disable Magento2.Files.LineLength.MaxExceeded
// phpcs:disable Magento2.Security.LanguageConstruct.DirectOutput
/**
* Product list template
*
* @var $block \Magento\Catalog\Block\Product\ListProduct
*/
?>
<?php
$_productCollection = $block->getLoadedProductCollection();
$_helper = $this->helper(Magento\Catalog\Helper\Output::class);
?>
<?php if (!$_productCollection->count()) :?>
<p class="message note"><?= $block->escapeHtml(__('We can\'t find products matching the selection.')) ?></p>
<?php else :?>
<?= $block->getToolbarHtml() ?>
<?= $block->getAdditionalHtml() ?>
<?php
if ($block->getMode() == 'grid') {
$viewMode = 'grid';
$image = 'category_page_grid';
$showDescription = false;
$templateType = \Magento\Catalog\Block\Product\ReviewRendererInterface::SHORT_VIEW;
} else {
$viewMode = 'list';
$image = 'category_page_list';
$showDescription = true;
$templateType = \Magento\Catalog\Block\Product\ReviewRendererInterface::FULL_VIEW;
}
?>
<div class="products wrapper <?= /* @noEscape */ $viewMode ?>">
<ol class="products list items">
<?php foreach ($_productCollection as $_product) :?>
<li class="item product">
<div class="product">
<?php // Product Image ?>
<a href="<?= $block->escapeUrl($_product->getProductUrl()) ?>" class="product photo">
<?= $block->getImage($_product, $image)->toHtml() ?>
</a>
<div class="product details">
<?php
$info = [];
$info['name'] = '<strong class="product name">'
. ' <a href="' . $block->escapeUrl($_product->getProductUrl()) . '" title="'
. $block->stripTags($_product->getName(), null, true) . '">'
. $_helper->productAttribute($_product, $_product->getName(), 'name')
. '</a></strong>';
$info['price'] = $block->getProductPrice($_product);
$info['review'] = $block->getReviewsSummaryHtml($_product, $templateType);
if ($_product->isSaleable()) {
$info['button'] = '<button type="button" title="' . $block->escapeHtmlAttr(__('Add to Cart')) . '" class="action tocart"'
. ' data-mage-init=\'{ "redirectUrl": { "event": "click", url: "' . $block->escapeUrl($block->getAddToCartUrl($_product)) . '"} }\'>'
. '<span>' . $block->escapeHtml(__('Add to Cart')) . '</span></button>';
} else {
$info['button'] = $_product->isAvailable() ? '<div class="stock available"><span>' . $block->escapeHtml(__('In stock')) . '</span></div>' :
'<div class="stock unavailable"><span>' . $block->escapeHtml(__('Out of stock')) . '</span></div>';
}
$info['links'] = '<div class="product links" data-role="add-to-links">'
. '<a href="#" data-post=\'' . $this->helper(Magento\Wishlist\Helper\Data::class)->getAddParams($_product) . '\' class="action towishlist" data-action="add-to-wishlist">'
. '<span>' . $block->escapeHtml(__('Add to Wish List')) . '</span></a>'
. '<a href="' . $block->escapeUrl($block->getAddToCompareUrl($_product)) . '" class="action tocompare">'
. '<span>' . $block->escapeHtml(__('Add to Compare')) . '</span></a></div>';
$info['actions'] = '<div class="product action">' . $info['button'] . $info['links'] . '</div>';
if ($showDescription) {
$info['description'] = '<div class="product description">'
. $_helper->productAttribute($_product, $_product->getShortDescription(), 'short_description')
. ' <a href="' . $block->escapeUrl($_product->getProductUrl()) . '" class="action more">'
. $block->escapeHtml(__('Learn More')) . '</a></div>';
} else {
$info['description'] = '';
}
$details = $block->getInfoOrder() ?: ['name','price','review','description','actions'];
foreach ($details as $detail) {
/* @noEscape */ echo $info[$detail];
}
?>
</div>
</div>
</li>
<?php endforeach; ?>
</ol>
</div>
<?= $block->getToolbarHtml() ?>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var $block \Magento\Catalog\Block\Product\View\Additional */
?>
<?php foreach ($block->getChildHtmlList() as $_html) :?>
<?= /* @noEscape */ $_html ?>
<?php endforeach; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var $block \Magento\Catalog\Block\Product\View*/
?>
<div class="product-addto-links" data-role="add-to-links">
<?= $block->getChildHtml() ?>
</div>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var $block \Magento\Catalog\Block\Product\View\Addto\Compare */
?>
<?php $viewModel = $block->getData('addToCompareViewModel'); ?>
<?php if ($viewModel->isAvailableForCompare($block->getProduct())) :?>
<a href="#" data-post='<?= /* @noEscape */ $block->getPostDataParams() ?>'
data-role="add-to-links"
class="action tocompare"><span><?= $block->escapeHtml(__('Add to Compare')) ?></span></a>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var $block \Magento\Catalog\Block\Product\View */
?>
<?php $_product = $block->getProduct(); ?>
<?php $buttonTitle = __('Add to Cart'); ?>
<?php if ($_product->isSaleable()) :?>
<div class="box-tocart">
<div class="fieldset">
<?php if ($block->shouldRenderQuantity()) :?>
<div class="field qty">
<label class="label" for="qty"><span><?= $block->escapeHtml(__('Qty')) ?></span></label>
<div class="control">
<input type="number"
name="qty"
id="qty"
min="0"
value="<?= $block->getProductDefaultQty() * 1 ?>"
title="<?= $block->escapeHtmlAttr(__('Qty')) ?>"
class="input-text qty"
data-validate="<?= $block->escapeHtml(json_encode($block->getQuantityValidators())) ?>"
/>
</div>
</div>
<?php endif; ?>
<div class="actions">
<button type="submit"
title="<?= $block->escapeHtmlAttr($buttonTitle) ?>"
class="action primary tocart"
id="product-addtocart-button" disabled>
<span><?= $block->escapeHtml($buttonTitle) ?></span>
</button>
<?= $block->getChildHtml('', true) ?>
</div>
</div>
</div>
<?php endif; ?>
<script type="text/x-magento-init">
{
"#product_addtocart_form": {
"Magento_Catalog/js/validate-product": {}
}
}
</script>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
/**
* Product view template
*
* @var $block \Magento\Catalog\Block\Product\View\Description
*/
?>
<?php
$_helper = $this->helper(Magento\Catalog\Helper\Output::class);
$_product = $block->getProduct();
if (!$_product instanceof \Magento\Catalog\Model\Product) {
return;
}
$_call = $block->getAtCall();
$_code = $block->getAtCode();
$_className = $block->getCssClass();
$_attributeLabel = $block->getAtLabel();
$_attributeType = $block->getAtType();
$_attributeAddAttribute = $block->getAddAttribute();
$renderLabel = true;
// if defined as 'none' in layout, do not render
if ($_attributeLabel == 'none') {
$renderLabel = false;
}
if ($_attributeLabel && $_attributeLabel == 'default') {
$_attributeLabel = $_product->getResource()->getAttribute($_code)->getStoreLabel();
}
if ($_attributeType && $_attributeType == 'text') {
$_attributeValue = ($_helper->productAttribute($_product, $_product->$_call(), $_code))
? $_product->getAttributeText($_code)
: '';
} else {
$_attributeValue = $_helper->productAttribute($_product, $_product->$_call(), $_code);
}
?>
<?php if ($_attributeValue) :?>
<div class="product attribute <?= $block->escapeHtmlAttr($_className) ?>">
<?php if ($renderLabel) :?>
<strong class="type"><?= $block->escapeHtml($_attributeLabel) ?></strong>
<?php endif; ?>
<div class="value" <?= /* @noEscape */ $_attributeAddAttribute ?>><?= /* @noEscape */ $_attributeValue ?></div>
</div>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
/**
* Product additional attributes template
*
* @var $block \Magento\Catalog\Block\Product\View\Attributes
*/
?>
<?php
$_helper = $this->helper(Magento\Catalog\Helper\Output::class);
$_product = $block->getProduct();
?>
<?php if ($_additional = $block->getAdditionalData()) :?>
<div class="additional-attributes-wrapper table-wrapper">
<table class="data table additional-attributes" id="product-attribute-specs-table">
<caption class="table-caption"><?= $block->escapeHtml(__('More Information')) ?></caption>
<tbody>
<?php foreach ($_additional as $_data) :?>
<tr>
<th class="col label" scope="row"><?= $block->escapeHtml($_data['label']) ?></th>
<td class="col data" data-th="<?= $block->escapeHtmlAttr($_data['label']) ?>"><?= /* @noEscape */ $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php endif;?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/**
* Product viewed counter template
*
* @var $block \Magento\Catalog\Block\Ui\ProductViewCounter
*/
?>
<script type="text/x-magento-init">
{
"*": {
"Magento_Catalog/js/product/view/provider": {
"data": <?= /* @noEscape */ $block->getCurrentProductData() ?>
}
}
}
</script>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
/**
* Product description template
*
* @var $block \Magento\Catalog\Block\Product\View\Description
*/
?>
<?= /* @noEscape */ $this->helper(Magento\Catalog\Helper\Output::class)->productAttribute(
$block->getProduct(),
$block->getProduct()->getDescription(),
'description'
) ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var \Magento\Catalog\Block\Product\View\Details $block */
?>
<?php if ($detailedInfoGroup = $block->getGroupSortedChildNames('detailed_info', 'getChildHtml')) :?>
<div class="product info detailed">
<?php $layout = $block->getLayout(); ?>
<div class="product data items" data-mage-init='{"tabs":{"openedState":"active"}}'>
<?php foreach ($detailedInfoGroup as $name) :?>
<?php
$html = $layout->renderElement($name);
if (!trim($html)) {
continue;
}
$alias = $layout->getElementAlias($name);
$label = $block->getChildData($alias, 'title');
?>
<div class="data item title"
data-role="collapsible" id="tab-label-<?= $block->escapeHtmlAttr($alias) ?>">
<a class="data switch"
tabindex="-1"
data-toggle="trigger"
href="#<?= $block->escapeUrl($alias) ?>"
id="tab-label-<?= $block->escapeHtmlAttr($alias) ?>-title">
<?= /* @noEscape */ $label ?>
</a>
</div>
<div class="data item content"
aria-labelledby="tab-label-<?= $block->escapeHtmlAttr($alias) ?>-title" id="<?= $block->escapeHtmlAttr($alias) ?>" data-role="content">
<?= /* @noEscape */ $html ?>
</div>
<?php endforeach;?>
</div>
</div>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
/**
* Product view template
*
* @var $block \Magento\Catalog\Block\Product\View
*/
?>
<?php $_helper = $this->helper(Magento\Catalog\Helper\Output::class); ?>
<?php $_product = $block->getProduct(); ?>
<div class="product-add-form">
<form data-product-sku="<?= $block->escapeHtml($_product->getSku()) ?>"
action="<?= $block->escapeUrl($block->getSubmitUrl($_product)) ?>" method="post"
id="product_addtocart_form"<?php if ($_product->getOptions()) :?> enctype="multipart/form-data"<?php endif; ?>>
<input type="hidden" name="product" value="<?= (int)$_product->getId() ?>" />
<input type="hidden" name="selected_configurable_option" value="" />
<input type="hidden" name="related_product" id="related-products-field" value="" />
<input type="hidden" name="item" value="<?= (int)$block->getRequest()->getParam('id') ?>" />
<?= $block->getBlockHtml('formkey') ?>
<?= $block->getChildHtml('form_top') ?>
<?php if (!$block->hasOptions()) :?>
<?= $block->getChildHtml('product_info_form_content') ?>
<?php else :?>
<?php if ($_product->isSaleable() && $block->getOptionsContainer() == 'container1') :?>
<?= $block->getChildChildHtml('options_container') ?>
<?php endif;?>
<?php endif; ?>
<?php if ($_product->isSaleable() && $block->hasOptions() && $block->getOptionsContainer() == 'container2') :?>
<?= $block->getChildChildHtml('options_container') ?>
<?php endif;?>
<?= $block->getChildHtml('form_bottom') ?>
</form>
</div>
<script type="text/x-magento-init">
{
"[data-role=priceBox][data-price-box=product-id-<?= $block->escapeHtml($_product->getId()) ?>]": {
"priceBox": {
"priceConfig": <?= /* @noEscape */ $block->getJsonConfig() ?>
}
}
}
</script>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/**
* Product media data template
*
* @var $block \Magento\Catalog\Block\Product\View\Gallery
*/
?>
<?php
$images = $block->getGalleryImages()->getItems();
$mainImage = current(array_filter($images, function ($img) use ($block) {
return $block->isMainImage($img);
}));
if (!empty($images) && empty($mainImage)) {
$mainImage = $block->getGalleryImages()->getFirstItem();
}
$helper = $block->getData('imageHelper');
$mainImageData = $mainImage ?
$mainImage->getData('medium_image_url') :
$helper->getDefaultPlaceholderUrl('image');
?>
<div class="gallery-placeholder _block-content-loading" data-gallery-role="gallery-placeholder">
<img
alt="main product photo"
class="gallery-placeholder__image"
src="<?= /* @noEscape */ $mainImageData ?>"
/>
</div>
<script type="text/x-magento-init">
{
"[data-gallery-role=gallery-placeholder]": {
"mage/gallery/gallery": {
"mixins":["magnifier/magnify"],
"magnifierOpts": <?= /* @noEscape */ $block->getMagnifier() ?>,
"data": <?= /* @noEscape */ $block->getGalleryImagesJson() ?>,
"options": <?= /* @noEscape */ $block->getGalleryOptions()->getOptionsJson() ?>,
"fullscreen": <?= /* @noEscape */ $block->getGalleryOptions()->getFSOptionsJson() ?>,
"breakpoints": <?= /* @noEscape */ $block->getBreakpoints() ?>
}
}
}
</script>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
?>
<?php $_product = $block->getProduct() ?>
<?php if ($block->canEmailToFriend()) :?>
<a href="<?= $block->escapeUrl($this->helper(Magento\Catalog\Helper\Product::class)->getEmailToFriendUrl($_product)) ?>"
class="action mailto friend"><span><?= $block->escapeHtml(__('Email')) ?></span></a>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var $block \Magento\Directory\Block\Currency */
?>
<meta property="product:price:currency"
content="<?= /* @noEscape */ $block->stripTags($block->getCurrentCurrencyCode()) ?>"/>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var $block \Magento\Catalog\Block\Product\View */
?>
<meta property="og:type" content="product" />
<meta property="og:title"
content="<?= $block->escapeHtmlAttr($block->stripTags($block->getProduct()->getName())) ?>" />
<meta property="og:image"
content="<?= $block->escapeUrl($block->getImage($block->getProduct(), 'product_base_image')->getImageUrl()) ?>" />
<meta property="og:description"
content="<?= $block->escapeHtmlAttr($block->stripTags($block->getProduct()->getShortDescription())) ?>" />
<meta property="og:url" content="<?= $block->escapeUrl($block->getProduct()->getProductUrl()) ?>" />
<?php if ($priceAmount = $block->getProduct()
->getPriceInfo()
->getPrice(\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE)
->getAmount()):?>
<meta property="product:price:amount" content="<?= $block->escapeHtmlAttr($priceAmount) ?>"/>
<?= $block->getChildHtml('meta.currency') ?>
<?php endif;?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/* @var $block \Magento\Catalog\Block\Product\View\Options */
?>
<?php $_options = $block->decorateArray($block->getOptions()) ?>
<?php $_productId = $block->getProduct()->getId() ?>
<?php if (count($_options)) :?>
<script type="text/x-magento-init">
{
"#product_addtocart_form": {
"priceOptions": {
"optionConfig": <?= /* @noEscape */ $block->getJsonConfig() ?>,
"controlContainer": ".field",
"priceHolderSelector": "[data-product-id='<?= $block->escapeHtml($_productId) ?>'][data-role=priceBox]"
}
}
}
</script>
<?php foreach ($_options as $_option) :?>
<?= $block->getOptionHtml($_option) ?>
<?php endforeach; ?>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php /* @var $block \Magento\Catalog\Block\Product\View\Options\Type\Date */ ?>
<?php $_option = $block->getOption() ?>
<?php $_optionId = $block->escapeHtmlAttr($_option->getId()) ?>
<?php $class = ($_option->getIsRequire()) ? ' required' : ''; ?>
<div class="field date<?= /* @noEscape */ $class ?>"
data-mage-init='{"priceOptionDate":{"fromSelector":"#product_addtocart_form"}}'>
<fieldset class="fieldset fieldset-product-options-inner<?= /* @noEscape */ $class ?>">
<legend class="legend">
<span><?= $block->escapeHtml($_option->getTitle()) ?></span>
<?= /* @noEscape */ $block->getFormattedPrice() ?>
</legend>
<div class="control">
<?php if ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_DATE_TIME
|| $_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_DATE) :?>
<?= $block->getDateHtml() ?>
<?php endif; ?>
<?php if ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_DATE_TIME
|| $_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_TIME) :?>
<?= $block->getTimeHtml() ?>
<?php endif; ?>
<?php if ($_option->getIsRequire()) :?>
<input type="hidden"
name="validate_datetime_<?= /* @noEscape */ $_optionId ?>"
class="validate-datetime-<?= /* @noEscape */ $_optionId ?>"
value=""
data-validate="{'validate-required-datetime':<?= /* @noEscape */ $_optionId ?>}"/>
<?php else :?>
<input type="hidden"
name="validate_datetime_<?= /* @noEscape */ $_optionId ?>"
class="validate-datetime-<?= /* @noEscape */ $_optionId ?>"
value=""
data-validate="{'validate-optional-datetime':<?= /* @noEscape */ $_optionId ?>}"/>
<?php endif; ?>
<script type="text/x-magento-init">
{
"#product_addtocart_form": {
"validation": {
"ignore": ":hidden:not(input[name^='validate_datetime_'])"
}
}
}
</script>
</div>
</fieldset>
</div>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php $_option = $block->getOption() ?>
<div class="field">
<label class="label"><span><?= $block->escapeHtml($_option->getTitle()) ?></span></label>
</div>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/* @var $block \Magento\Catalog\Block\Product\View\Options\Type\File */
/** @var \Magento\Framework\View\Helper\SecureHtmlRenderer $secureRenderer */
?>
<?php $_option = $block->getOption(); ?>
<?php $_fileInfo = $block->getFileInfo(); ?>
<?php $_fileExists = $_fileInfo->hasData(); ?>
<?php $_fileName = 'options_' . $block->escapeHtmlAttr($_option->getId()) . '_file'; ?>
<?php $_fieldNameAction = $_fileName . '_action'; ?>
<?php $_fieldValueAction = $_fileExists ? 'save_old' : 'save_new'; ?>
<?php $_fileNamed = $_fileName . '_name'; ?>
<?php $class = ($_option->getIsRequire()) ? ' required' : ''; ?>
<div class="field file<?= /* @noEscape */ $class ?>">
<label class="label" for="<?= /* @noEscape */ $_fileName ?>" id="<?= /* @noEscape */ $_fileName ?>-label">
<span><?= $block->escapeHtml($_option->getTitle()) ?></span>
<?= /* @noEscape */ $block->getFormattedPrice() ?>
</label>
<?php if ($_fileExists):?>
<div class="control">
<span class="<?= /* @noEscape */ $_fileNamed ?>"><?= $block->escapeHtml($_fileInfo->getTitle()) ?></span>
<a href="#" class="label" id="change-<?= /* @noEscape */ $_fileName ?>" >
<?= $block->escapeHtml(__('Change')) ?>
</a>
<?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
'onclick',
'event.preventDefault()',
'a#change-' ./* @noEscape */ $_fileName
) ?>
<?php if (!$_option->getIsRequire()):?>
<input type="checkbox" id="delete-<?= /* @noEscape */ $_fileName ?>" />
<span class="label"><?= $block->escapeHtml(__('Delete')) ?></span>
<?php endif; ?>
</div>
<?php endif; ?>
<div class="control" id="input-box-<?= /* @noEscape */ $_fileName ?>"
data-mage-init='{"priceOptionFile":{
"fileName":"<?= /* @noEscape */ $_fileName ?>",
"fileNamed":"<?= /* @noEscape */ $_fileNamed ?>",
"fieldNameAction":"<?= /* @noEscape */ $_fieldNameAction ?>",
"changeFileSelector":"#change-<?= /* @noEscape */ $_fileName ?>",
"deleteFileSelector":"#delete-<?= /* @noEscape */ $_fileName ?>"}
}'>
<input type="file"
name="<?= /* @noEscape */ $_fileName ?>"
id="<?= /* @noEscape */ $_fileName ?>"
class="product-custom-option<?= $_option->getIsRequire() ? ' required' : '' ?>"
<?= $_fileExists ? 'disabled="disabled"' : '' ?> />
<input type="hidden" class="product-custom-option" name="<?= /* @noEscape */ $_fieldNameAction ?>"
value="<?= /* @noEscape */ $_fieldValueAction ?>" />
<?php if ($_option->getFileExtension()):?>
<p class="note">
<?= $block->escapeHtml(__('Compatible file extensions to upload')) ?>:
<strong><?= $block->escapeHtml($_option->getFileExtension()) ?></strong>
</p>
<?php endif; ?>
<?php if ($_option->getImageSizeX() > 0):?>
<p class="note">
<?= $block->escapeHtml(__('Maximum image width')) ?>: <strong><?= (int)$_option->getImageSizeX()
?> <?= $block->escapeHtml(__('px.')) ?></strong>
</p>
<?php endif; ?>
<?php if ($_option->getImageSizeY() > 0):?>
<p class="note">
<?= $block->escapeHtml(__('Maximum image height')) ?>: <strong><?= (int)$_option->getImageSizeY()
?> <?= $block->escapeHtml(__('px.')) ?></strong>
</p>
<?php endif; ?>
</div>
<?= $_fileExists ?
/* @noEscape */ $secureRenderer->renderStyleAsTag(
'display:none',
'#input-box-' . /* @noEscape */ $_fileName
) : '' ?>
</div>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php /* @var $block \Magento\Catalog\Block\Product\View\Options\Type\Select */ ?>
<?php
$_option = $block->getOption();
$class = ($_option->getIsRequire()) ? ' required' : '';
?>
<div class="field<?= /* @noEscape */ $class ?>">
<label class="label" for="select_<?= $block->escapeHtmlAttr($_option->getId()) ?>">
<span><?= $block->escapeHtml($_option->getTitle()) ?></span>
</label>
<div class="control">
<?= $block->getValuesHtml() ?>
<?php if ($_option->getIsRequire()) :?>
<?php if ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_RADIO || $_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_CHECKBOX) :?>
<span id="options-<?= $block->escapeHtmlAttr($_option->getId()) ?>-container"></span>
<?php endif; ?>
<?php endif;?>
</div>
</div>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php /* @var $block \Magento\Catalog\Block\Product\View\Options\Type\Text */ ?>
<?php
$_option = $block->getOption();
$class = ($_option->getIsRequire()) ? ' required' : '';
?>
<div class="field<?php if ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_AREA) {
echo ' textarea';
} ?><?= /* @noEscape */ $class ?>">
<label class="label" for="options_<?= $block->escapeHtmlAttr($_option->getId()) ?>_text">
<span><?= $block->escapeHtml($_option->getTitle()) ?></span>
<?= /* @noEscape */ $block->getFormattedPrice() ?>
</label>
<div class="control">
<?php if ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_FIELD) :?>
<?php $_textValidate = null;
if ($_option->getIsRequire()) {
$_textValidate['required'] = true;
}
if ($_option->getMaxCharacters()) {
$_textValidate['maxlength'] = $_option->getMaxCharacters();
}
$_textValidate['validate-no-utf8mb4-characters'] = true;
?>
<input type="text"
id="options_<?= $block->escapeHtmlAttr($_option->getId()) ?>_text"
class="input-text product-custom-option"
<?php if (!empty($_textValidate)) {?>
data-validate="<?= $block->escapeHtml(json_encode($_textValidate)) ?>"
<?php } ?>
name="options[<?= $block->escapeHtmlAttr($_option->getId()) ?>]"
data-selector="options[<?= $block->escapeHtmlAttr($_option->getId()) ?>]"
value="<?= $block->escapeHtml($block->getDefaultValue()) ?>"/>
<?php elseif ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_AREA) :?>
<?php $_textAreaValidate = null;
if ($_option->getIsRequire()) {
$_textAreaValidate['required'] = true;
}
if ($_option->getMaxCharacters()) {
$_textAreaValidate['maxlength'] = $_option->getMaxCharacters();
}
$_textAreaValidate['validate-no-utf8mb4-characters'] = true;
?>
<textarea id="options_<?= $block->escapeHtmlAttr($_option->getId()) ?>_text"
class="product-custom-option"
<?php if (!empty($_textAreaValidate)) {?>
data-validate="<?= $block->escapeHtml(json_encode($_textAreaValidate)) ?>"
<?php } ?>
name="options[<?= $block->escapeHtmlAttr($_option->getId()) ?>]"
data-selector="options[<?= $block->escapeHtmlAttr($_option->getId()) ?>]"
rows="5"
cols="25"><?= $block->escapeHtml($block->getDefaultValue()) ?></textarea>
<?php endif; ?>
<?php if ($_option->getMaxCharacters()) :?>
<p class="note note_<?= $block->escapeHtmlAttr($_option->getId()) ?>">
<?= $block->escapeHtml(__('Maximum %1 characters', $_option->getMaxCharacters())) ?>
<span class="character-counter no-display"></span>
</p>
<?php endif; ?>
</div>
<?php if ($_option->getMaxCharacters()) :?>
<script type="text/x-magento-init">
{
"[data-selector='options[<?= $block->escapeJs($_option->getId()) ?>]']": {
"Magento_Catalog/js/product/remaining-characters": {
"maxLength": "<?= (int)$_option->getMaxCharacters() ?>",
"noteSelector": ".note_<?= $block->escapeJs($_option->getId()) ?>",
"counterSelector": ".note_<?= $block->escapeJs($_option->getId()) ?> .character-counter"
}
}
}
</script>
<?php endif; ?>
</div>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var $block Magento\Catalog\Block\Product\View */
?>
<?php
$required = '';
if ($block->hasRequiredOptions()) {
$required = ' data-hasrequired="' . $block->escapeHtmlAttr(__('* Required Fields')) . '"';
}
?>
<div class="product-options-wrapper" id="product-options-wrapper"<?= /* @noEscape */ $required ?>>
<div class="fieldset" tabindex="0">
<?= $block->getChildHtml('', true) ?>
</div>
</div>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<div class="product-options-bottom">
<?= $block->getChildHtml('', true) ?>
</div>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php /** @var \Magento\Catalog\Block\Product\AbstractProduct $block */ ?>
<?php $_product = $block->getProduct() ?>
<?= $block->getProductPriceHtml(
$_product,
\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE,
\Magento\Framework\Pricing\Render::ZONE_ITEM_VIEW,
[
'price_id_suffix' => '_clone'
]
) ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php /** @var $block \Magento\Catalog\Block\Product\AbstractProduct */ ?>
<?= $block->getReviewsSummaryHtml($block->getProduct(), false, true) ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php /* @var $block \Magento\Catalog\Block\Product\View\AbstractView */?>
<?php $_product = $block->getProduct() ?>
<?php if ($block->displayProductStockStatus()) :?>
<?php if ($_product->isAvailable()) :?>
<div class="stock available" title="<?= $block->escapeHtmlAttr(__('Availability')) ?>">
<span><?= $block->escapeHtml(__('In stock')) ?></span>
</div>
<?php else :?>
<div class="stock unavailable" title="<?= $block->escapeHtmlAttr(__('Availability')) ?>">
<span><?= $block->escapeHtml(__('Out of stock')) ?></span>
</div>
<?php endif; ?>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
// phpcs:disable Magento2.PHP.ShortEchoSyntax.ShortEchoTag
/** @var $block \Magento\Ui\Block\Wrapper */
?>
<?php /* @noEscape */ echo $block->renderApp(
[
'widget_columns' => [
'displayMode' => 'grid'
],
'image' => [
'imageCode' => 'recently_compared_products_grid_content_widget'
]
]
);
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
// phpcs:disable Magento2.PHP.ShortEchoSyntax.ShortEchoTag
/** @var $block \Magento\Ui\Block\Wrapper */
?>
<?php /* @noEscape */ echo $block->renderApp(
[
'widget_columns' => [
'displayMode' => 'list'
],
'image' => [
'imageCode' => 'recently_compared_products_list_content_widget'
]
]
);
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
// phpcs:disable Magento2.PHP.ShortEchoSyntax.ShortEchoTag
/** @var $block \Magento\Ui\Block\Wrapper */
?>
<?php /* @noEscape */ echo $block->renderApp(
[
'listing' => [
'displayMode' => 'grid'
],
'image' => [
'imageCode' => 'recently_compared_products_images_names_widget'
]
]
);
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<div class="widget block block-product-link">
<a <?= /* @noEscape */ $block->getLinkAttributes() ?>><span><?= $block->escapeHtml($block->getLabel()) ?></span></a>
</div>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<span class="widget block block-product-link-inline">
<a <?= /* @noEscape */ $block->getLinkAttributes() ?>><span><?= $block->escapeHtml($block->getLabel()) ?></span></a>
</span>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
// phpcs:disable Magento2.Files.LineLength.MaxExceeded
?>
<?php if (($_products = $block->getProductCollection()) && $_products->getSize()) :?>
<div class="block widget block-new-products-list">
<div class="block-title">
<strong><?= $block->escapeHtml(__('New Products')) ?></strong>
</div>
<div class="block-content">
<?php $suffix = $block->getNameInLayout(); ?>
<ol class="product-items" id="widget-new-products-<?= $block->escapeHtmlAttr($suffix) ?>">
<?php foreach ($_products->getItems() as $_product) :?>
<li class="product-item">
<div class="product-item-info">
<a class="product-item-photo" href="<?= $block->escapeUrl($_product->getProductUrl()) ?>"
title="<?= /* @noEscape */ $block->stripTags($_product->getName(), null, true) ?>">
<?= $block->getImage($_product, 'side_column_widget_product_thumbnail')->toHtml() ?>
</a>
<div class="product-item-details">
<strong class="product-item-name">
<a href="<?= $block->escapeUrl($_product->getProductUrl()) ?>"
title="<?= /* @noEscape */ $block->stripTags($_product->getName(), null, true) ?>)"
class="product-item-link">
<?= /* @noEscape */ $this->helper(Magento\Catalog\Helper\Output::class)->productAttribute($_product, $_product->getName(), 'name') ?>
</a>
</strong>
<?= $block->getProductPriceHtml($_product, '-widget-new-' . $suffix) ?>
<div class="product-item-actions">
<div class="actions-primary">
<?php if ($_product->isSaleable()) :?>
<?php if (!$_product->getTypeInstance()->isPossibleBuyFromList($_product)) :?>
<button type="button" title="<?= $block->escapeHtmlAttr(__('Add to Cart')) ?>"
class="action tocart primary"
data-mage-init='{"redirectUrl":{"url":"<?= $block->escapeUrl($block->getAddToCartUrl($_product)) ?>"}}'>
<span><?= $block->escapeHtml(__('Add to Cart')) ?></span>
</button>
<?php else :?>
<?php
$postDataHelper = $this->helper(Magento\Framework\Data\Helper\PostHelper::class);
$postData = $postDataHelper->getPostData($block->escapeUrl($block->getAddToCartUrl($_product)), ['product' => $_product->getEntityId()]);
?>
<button type="button" title="<?= $block->escapeHtmlAttr(__('Add to Cart')) ?>"
class="action tocart primary"
data-post='<?= /* @noEscape */ $postData ?>'>
<span><?= $block->escapeHtml(__('Add to Cart')) ?></span>
</button>
<?php endif; ?>
<?php else :?>
<?php if ($_product->isAvailable()) :?>
<div class="stock available" title="<?= $block->escapeHtmlAttr(__('Availability')) ?>">
<span><?= $block->escapeHtml(__('In stock')) ?></span>
</div>
<?php else :?>
<div class="stock unavailable" title="<?= $block->escapeHtmlAttr(__('Availability')) ?>">
<span><?= $block->escapeHtml(__('Out of stock')) ?></span>
</div>
<?php endif; ?>
<?php endif; ?>
</div>
</div>
</div>
</div>
</li>
<?php endforeach; ?>
</ol>
<?= $block->getPagerHtml() ?>
</div>
</div>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php if (($_products = $block->getProductCollection()) && $_products->getSize()) :?>
<div class="block widget block-new-products-images">
<div class="block-title">
<strong><?= $block->escapeHtml(__('New Products')) ?></strong>
</div>
<div class="block-content">
<?php $suffix = $block->getNameInLayout(); ?>
<ol id="widget-new-products-<?= $block->escapeHtmlAttr($suffix) ?>"
class="product-items product-items-images">
<?php foreach ($_products->getItems() as $_product) :?>
<li class="product-item">
<a class="product-item-photo" href="<?= $block->escapeUrl($_product->getProductUrl()) ?>"
title="<?= /* @noEscape */ $block->stripTags($_product->getName(), null, true) ?>">
<?php /* new_products_images_only_widget */ ?>
<?= $block->getImage($_product, 'new_products_images_only_widget')->toHtml() ?>
</a>
</li>
<?php endforeach; ?>
</ol>
<?= $block->getPagerHtml() ?>
</div>
</div>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
?>
<?php if (($_products = $block->getProductCollection()) && $_products->getSize()) :?>
<div class="block widget block-new-products-names">
<div class="block-title">
<strong><?= $block->escapeHtml(__('New Products')) ?></strong>
</div>
<div class="block-content">
<?php $suffix = $block->getNameInLayout(); ?>
<ol id="widget-new-products-<?= $block->escapeHtmlAttr($suffix) ?>"
class="product-items product-items-names">
<?php foreach ($_products->getItems() as $_product) :?>
<li class="product-item">
<strong class="product-item-name">
<a href="<?= $block->escapeUrl($_product->getProductUrl()) ?>"
title="<?= /* @noEscape */ $block->stripTags($_product->getName(), null, true) ?>)"
class="product-item-link">
<?= /* @noEscape */ $this->helper(
Magento\Catalog\Helper\Output::class
)->productAttribute($_product, $_product->getName(), 'name') ?>
</a>
</strong>
</li>
<?php endforeach; ?>
</ol>
<?= $block->getPagerHtml() ?>
</div>
</div>
<?php endif; ?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
/**
* Template for displaying new products widget
*
* @var $block \Magento\Catalog\Block\Product\Widget\NewWidget
*/
// phpcs:disable Magento2.Files.LineLength.MaxExceeded
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
if ($exist = ($block->getProductCollection() && $block->getProductCollection()->getSize())) {
$type = 'widget-new-grid';
$mode = 'grid';
$image = 'new_products_content_widget_grid';
$title = __('New Products');
$items = $block->getProductCollection()->getItems();
$showWishlist = true;
$showCompare = true;
$showCart = true;
$templateType = \Magento\Catalog\Block\Product\ReviewRendererInterface::DEFAULT_VIEW;
$description = false;
}
?>
<?php if ($exist) :?>
<div class="block widget block-new-products <?= /* @noEscape */ $mode ?>">
<div class="block-title">
<strong role="heading" aria-level="2"><?= $block->escapeHtml($title) ?></strong>
</div>
<div class="block-content">
<?= /* @noEscape */ '<!-- ' . $image . '-->' ?>
<div class="products-<?= /* @noEscape */ $mode ?> <?= /* @noEscape */ $mode ?>">
<ol class="product-items <?= /* @noEscape */ $type ?>">
<?php foreach ($items as $_item) :?>
<li class="product-item">
<div class="product-item-info">
<a href="<?= $block->escapeUrl($block->getProductUrl($_item)) ?>"
class="product-item-photo">
<?= $block->getImage($_item, $image)->toHtml() ?>
</a>
<div class="product-item-details">
<strong class="product-item-name">
<a title="<?= $block->escapeHtml($_item->getName()) ?>"
href="<?= $block->escapeUrl($block->getProductUrl($_item)) ?>"
class="product-item-link">
<?= $block->escapeHtml($_item->getName()) ?>
</a>
</strong>
<?= $block->getProductPriceHtml($_item, $type); ?>
<?php if ($templateType) :?>
<?= $block->getReviewsSummaryHtml($_item, $templateType) ?>
<?php endif; ?>
<?php if ($showWishlist || $showCompare || $showCart) :?>
<div class="product-item-actions">
<?php if ($showCart) :?>
<div class="actions-primary">
<?php if ($_item->isSaleable()) :?>
<?php if (!$_item->getTypeInstance()->isPossibleBuyFromList($_item)) :?>
<button class="action tocart primary"
data-mage-init='{"redirectUrl":{"url":"<?= $block->escapeUrl($block->getAddToCartUrl($_item)) ?>"}}'
type="button"
title="<?= $block->escapeHtmlAttr(__('Add to Cart')) ?>">
<span><?= $block->escapeHtml(__('Add to Cart')) ?></span>
</button>
<?php else :?>
<?php
$postDataHelper = $this->helper(Magento\Framework\Data\Helper\PostHelper::class);
$postData = $postDataHelper->getPostData(
$block->escapeUrl($block->getAddToCartUrl($_item)),
['product' => (int) $_item->getEntityId()]
)
?>
<button class="action tocart primary"
data-post='<?= /* @noEscape */ $postData ?>'
type="button"
title="<?= $block->escapeHtmlAttr(__('Add to Cart')) ?>">
<span><?= $block->escapeHtml(__('Add to Cart')) ?></span>
</button>
<?php endif; ?>
<?php else :?>
<?php if ($_item->isAvailable()) :?>
<div class="stock available">
<span><?= $block->escapeHtml(__('In stock')) ?></span>
</div>
<?php else :?>
<div class="stock unavailable">
<span><?= $block->escapeHtml(__('Out of stock')) ?></span>
</div>
<?php endif; ?>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if ($showWishlist || $showCompare) :?>
<div class="actions-secondary" data-role="add-to-links">
<?php if ($this->helper(Magento\Wishlist\Helper\Data::class)->isAllow() && $showWishlist) :?>
<a href="#"
data-post='<?= /* @noEscape */ $block->getAddToWishlistParams($_item) ?>'
class="action towishlist"
data-action="add-to-wishlist"
title="<?= $block->escapeHtmlAttr(__('Add to Wish List')) ?>">
<span><?= $block->escapeHtml(__('Add to Wish List')) ?></span>
</a>
<?php endif; ?>
<?php if ($block->getAddToCompareUrl() && $showCompare) :?>
<?php $compareHelper = $this->helper(Magento\Catalog\Helper\Product\Compare::class);?>
<a href="#" class="action tocompare"
data-post='<?= /* @noEscape */ $compareHelper->getPostDataParams($_item) ?>'
title="<?= $block->escapeHtmlAttr(__('Add to Compare')) ?>">
<span><?= $block->escapeHtml(__('Add to Compare')) ?></span>
</a>
<?php endif; ?>
</div>
<?php endif; ?>
</div>
<?php endif; ?>
</div>
</div>
</li>
<?php endforeach ?>
</ol>
</div>
<?= $block->getPagerHtml() ?>
</div>
</div>
<?php endif;?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
// phpcs:disable Magento2.Templates.ThisInTemplate.FoundThis
// phpcs:disable Magento2.Files.LineLength.MaxExceeded
/**
* Template for displaying new products widget
*
* @var $block \Magento\Catalog\Block\Product\Widget\NewWidget
*/
if ($exist = ($block->getProductCollection() && $block->getProductCollection()->getSize())) {
$type = 'widget-new-list';
$mode = 'list';
$image = 'new_products_content_widget_list';
$title = __('New Products');
$items = $block->getProductCollection()->getItems();
/** @var Magento\Catalog\Helper\Output $_helper */
$_helper = $this->helper(Magento\Catalog\Helper\Output::class);
$showWishlist = true;
$showCompare = true;
$showCart = true;
$templateType = \Magento\Catalog\Block\Product\ReviewRendererInterface::DEFAULT_VIEW;
$description = true;
}
?>
<?php if ($exist) :?>
<div class="block widget block-new-products <?= /* @noEscape */ $mode ?>">
<div class="block-title">
<strong role="heading" aria-level="2"><?= $block->escapeHtml($title) ?></strong>
</div>
<div class="block-content">
<?= /* @noEscape */ '<!-- ' . $image . '-->' ?>
<div class="products-<?= /* @noEscape */ $mode ?> <?= /* @noEscape */ $mode ?>">
<ol class="product-items <?= /* @noEscape */ $type ?>">
<?php foreach ($items as $_item) :?>
<li class="product-item">
<div class="product-item-info">
<a href="<?= $block->escapeUrl($block->getProductUrl($_item)) ?>"
class="product-item-photo">
<?= $block->getImage($_item, $image)->toHtml() ?>
</a>
<div class="product-item-details">
<strong class="product-item-name">
<a title="<?= $block->escapeHtmlAttr($_item->getName()) ?>"
href="<?= $block->escapeUrl($block->getProductUrl($_item)) ?>"
class="product-item-link">
<?= $block->escapeHtml($_item->getName()) ?>
</a>
</strong>
<?= $block->getProductPriceHtml($_item, $type) ?>
<?php if ($templateType) :?>
<?= $block->getReviewsSummaryHtml($_item, $templateType) ?>
<?php endif; ?>
<?php if ($showWishlist || $showCompare || $showCart) :?>
<div class="product-item-actions">
<?php if ($showCart) :?>
<div class="actions-primary">
<?php if ($_item->isSaleable()) :?>
<?php if (!$_item->getTypeInstance()->isPossibleBuyFromList($_item)
) :?>
<button class="action tocart primary"
data-mage-init='{"redirectUrl":{"url":"<?= $block->escapeUrl($block->getAddToCartUrl($_item)) ?>"}}'
type="button"
title="<?= $block->escapeHtmlAttr(__('Add to Cart')) ?>">
<span><?= $block->escapeHtml(__('Add to Cart')) ?></span>
</button>
<?php else :?>
<?php
$postDataHelper = $this->helper(Magento\Framework\Data\Helper\PostHelper::class);
$postData = $postDataHelper->getPostData($block->getAddToCartUrl($_item), ['product' => $_item->getEntityId()])
?>
<button class="action tocart primary"
data-post='<?= /* @noEscape */ $postData ?>'
type="button" title="<?= $block->escapeHtmlAttr(__('Add to Cart')) ?>">
<span><?= $block->escapeHtml(__('Add to Cart')) ?></span>
</button>
<?php endif; ?>
<?php else :?>
<?php if ($_item->isAvailable()) :?>
<div class="stock available"><span><?= $block->escapeHtml(__('In stock')) ?></span></div>
<?php else :?>
<div class="stock unavailable"><span><?= $block->escapeHtml(__('Out of stock')) ?></span></div>
<?php endif; ?>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if ($showWishlist || $showCompare) :?>
<div class="actions-secondary" data-role="add-to-links">
<?php if ($this->helper(Magento\Wishlist\Helper\Data::class)->isAllow() && $showWishlist) :?>
<a href="#"
data-post='<?= /* @noEscape */ $block->getAddToWishlistParams($_item) ?>'
class="action towishlist" data-action="add-to-wishlist"
title="<?= $block->escapeHtmlAttr(__('Add to Wish List')) ?>">
<span><?= $block->escapeHtml(__('Add to Wish List')) ?></span>
</a>
<?php endif; ?>
<?php if ($block->getAddToCompareUrl() && $showCompare) :?>
<?php $compareHelper = $this->helper(Magento\Catalog\Helper\Product\Compare::class); ?>
<a href="#" class="action tocompare"
title="<?= $block->escapeHtmlAttr(__('Add to Compare')) ?>"
data-post='<?= /* @noEscape */ $compareHelper->getPostDataParams($_item) ?>'
>
<span><?= $block->escapeHtml(__('Add to Compare')) ?></span>
</a>
<?php endif; ?>
</div>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if ($description) :?>
<div class="product-item-description">
<?= /* @noEscape */ $_helper->productAttribute(
$_item,
$_item->getShortDescription(),
'short_description'
) ?>
<a title="<?= $block->escapeHtmlAttr($_item->getName()) ?>"
href="<?= $block->escapeUrl($block->getProductUrl($_item))?>"
class="action more"><?= $block->escapeHtml(__('Learn More')) ?></a>
</div>
<?php endif; ?>
</div>
</div>
</li>
<?php endforeach ?>
</ol>
</div>
<?= $block->getPagerHtml() ?>
</div>
</div>
<?php endif;?>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
// phpcs:disable Magento2.Security.LanguageConstruct.DirectOutput
// phpcs:disable Magento2.PHP.ShortEchoSyntax.ShortEchoTag
/** @var $block \Magento\Ui\Block\Wrapper */
?>
<?php /* @noEscape */ echo $block->renderApp([
'widget_columns' => [
'displayMode' => 'grid'
],
'image' => [
'imageCode' => 'recently_viewed_products_grid_content_widget'
]
]);
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
// phpcs:disable Magento2.Security.LanguageConstruct.DirectOutput
// phpcs:disable Magento2.PHP.ShortEchoSyntax.ShortEchoTag
/** @var $block \Magento\Ui\Block\Wrapper */
?>
<?php /* @noEscape */ echo $block->renderApp([
'widget_columns' => [
'displayMode' => 'list'
],
'image' => [
'imageCode' => 'recently_viewed_products_list_content_widget'
]
]);
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
// phpcs:disable Magento2.PHP.ShortEchoSyntax.ShortEchoTag
/** @var $block \Magento\Ui\Block\Wrapper */
?>
<?php /* @noEscape */ echo $block->renderApp(
[
'listing' => [
'displayMode' => 'grid'
],
'image' => [
'imageCode' => 'recently_viewed_products_images_names_widget'
]
]
);
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// @codingStandardsIgnoreFile
?>
<?php
/**
* Category layered navigation state
*
* @var $block \Magento\LayeredNavigation\Block\Navigation\State
*/
?>
<?php $_filters = $block->getActiveFilters() ?>
<?php if (!empty($_filters)): ?>
<div class="filter-current" data-mage-init='{"collapsible":{"openedState": "active", "collapsible": true, "active": false }}'>
<strong class="block-subtitle filter-current-subtitle"
role="heading"
aria-level="2"
data-role="title"
data-count="<?= /* @noEscape */ count($_filters) ?>"><?= $block->escapeHtml(__('Now Shopping by')) ?></strong>
<ol class="items">
<?php foreach ($_filters as $_filter): ?>
<li class="item">
<span class="filter-label"><?= $block->escapeHtml(__($_filter->getName())) ?></span>
<span class="filter-value"><?= $block->escapeHtml($block->stripTags($_filter->getLabel())) ?></span>
<?php
$clearLinkUrl = $_filter->getClearLinkUrl();
$currentFilterName = $block->escapeHtmlAttr(__($_filter->getName()) . " " . $block->stripTags($_filter->getLabel()));
if ($clearLinkUrl):
?>
<a class="action previous" href="<?= $block->escapeUrl($_filter->getRemoveUrl()) ?>"
title="<?= $block->escapeHtmlAttr(__('Previous')) ?>">
<span><?= $block->escapeHtml(__('Previous')) ?></span>
</a>
<a class="action remove"
title="<?= $block->escapeHtmlAttr($_filter->getFilter()->getClearLinkText()) ?>"
href="<?= $block->escapeUrl($clearLinkUrl) ?>">
<span><?= $block->escapeHtml($_filter->getFilter()->getClearLinkText()) ?></span>
</a>
<?php else: ?>
<a class="action remove" href="<?= $block->escapeUrl($_filter->getRemoveUrl()) ?>"
title="<?= /* @noEscape */ $block->escapeHtmlAttr(__('Remove')) . " " . $currentFilterName ?>">
<span><?= $block->escapeHtml(__('Remove This Item')) ?></span>
</a>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ol>
</div>
<?php endif; ?>
<?php
/**
* Category layered navigation
*
* @var $block \Magento\LayeredNavigation\Block\Navigation
*/
?>
<?php if (!$block->canShowBlock()) : return; endif; ?>
<?php
$visibleFilters = array_filter($block->getFilters(), function ($filter) {
return $filter->getItemsCount() > 0;
});
$activeFilters = $block->getLayer()->getState()->getFilters();
$isExpanded = $block->getExpanded();
if ($isExpanded === 'auto') {
$isExpanded = count($visibleFilters) <= 7;
}
$name = $block->getNameInLayout();
$parentName = $this->getLayout()->getParentName($name);
if (strpos($parentName, 'sidebar') === false) {
$isExpanded = false;
}
?>
<div class="block filter" data-mage-init='{"slideout":{"toggler":".filter-title","panel":".filter-content"}}'>
<div class="block-title filter-title" tabindex="0">
<strong><?= $block->escapeHtml(__('Shop By')) ?></strong>
<?php if ($activeFilters) : ?>
<span class="count"><?= count($activeFilters) ?></span>
<?php endif; ?>
</div>
<div class="block-content filter-content">
<?= $block->getChildHtml('state') ?>
<?php if ($activeFilters) : ?>
<div class="block-actions filter-actions">
<a href="<?= $block->escapeUrl($block->getClearUrl()) ?>" class="action clear filter-clear"><span><?= $block->escapeHtml(__('Clear All')) ?></span></a>
</div>
<?php endif; ?>
<?php if ($visibleFilters) : ?>
<strong role="heading" aria-level="2" class="block-subtitle filter-subtitle"><span><?= $block->escapeHtml(__('Shopping Options')) ?></span></strong>
<div class="filter-options" id="narrow-by-list">
<?php endif ?>
<?php foreach ($visibleFilters as $i => $filter) : ?>
<div class="filter-options-item filter-<?= $filter->getRequestVar() ?><?= $isExpanded ? ' initially-active active' : '' ?>"
data-mage-init='{"collapsible":{"active":<?= $isExpanded ? 'true' : 'false' ?>,"dialog":true}}'>
<div role="heading" aria-level="2" class="filter-options-title" data-trigger="true" data-role="title"><?= $block->escapeHtml(__($filter->getName())) ?></div>
<div class="filter-options-content" data-role="content"><?= /* @noEscape */ $block->getChildBlock('renderer')->render($filter) ?></div>
</div>
<?php endforeach; ?>
<?php if ($visibleFilters) : ?>
</div>
<?php endif; ?>
</div>
</div>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment