Как переопределить модуль-проверка/.../корзина/товар/по умолчанию.phtml?
Я хочу настроить страницу корзины. Я пытаюсь переопределить его с помощью модуля. Я создал модуль, который работает нормально. Я создал макет:
Checkout_cart_item_renderers.xml
<?xml version="1.0"?> <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="checkout.cart.item.renderers">
<referenceBlock name="default">
<action method="setTemplate">
<argument name="template" xsi:type="string">Custom_Addprofile::cart/item/default.phtml</argument>
</action>
</referenceBlock>
</referenceBlock>
</body> </page>
Я создал файл шаблона следующим образом:
Шаблоны/корзина/товар/по умолчанию.phtml
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
// @codingStandardsIgnoreFile
/** @var $block \Magento\Checkout\Block\Cart\Item\Renderer */
die('ssssssssssssssssssssss');
$_item = $block->getItem();
$product = $_item->getProduct();
$isVisibleProduct = $product->isVisibleInSiteVisibility();
/** @var \Magento\Msrp\Helper\Data $helper */
$helper = $this->helper('Magento\Msrp\Helper\Data');
$canApplyMsrp = $helper->isShowBeforeOrderConfirm($product) && $helper->isMinimalPriceLessMsrp($product);
?>
<tbody class="cart item">
<tr class="item-info">
<td data-th="<?php echo $block->escapeHtml(__('Item')); ?>" class="col item">
<?php if ($block->hasProductUrl()):?>
<a href="<?php /* @escapeNotVerified */ echo $block->getProductUrl() ?>"
title="<?php echo $block->escapeHtml($block->getProductName()) ?>"
tabindex="-1"
class="product-item-photo">
<?php else:?>
<span class="product-item-photo">
<?php endif;?>
<?php echo $block->getImage($block->getProductForThumbnail(), 'cart_page_product_thumbnail')->toHtml(); ?>
<?php if ($block->hasProductUrl()):?>
</a>
<?php else: ?>
</span>
<?php endif; ?>
<div class="product-item-details">
<strong class="product-item-name">
<?php if ($block->hasProductUrl()):?>
<a href="<?php /* @escapeNotVerified */ echo $block->getProductUrl() ?>"><?php echo $block->escapeHtml($block->getProductName()) ?></a>
<?php else: ?>
<?php echo $block->escapeHtml($block->getProductName()) ?>
<?php endif; ?>
</strong>
<?php if ($_options = $block->getOptionList()):?>
<dl class="item-options">
<?php foreach ($_options as $_option) : ?>
<?php $_formatedOptionValue = $block->getFormatedOptionValue($_option) ?>
<dt><?php echo $block->escapeHtml($_option['label']) ?></dt>
<dd>
<?php if (isset($_formatedOptionValue['full_view'])): ?>
<?php /* @escapeNotVerified */ echo $_formatedOptionValue['full_view'] ?>
<?php else: ?>
<?php /* @escapeNotVerified */ echo $_formatedOptionValue['value'] ?>
<?php endif; ?>
</dd>
<?php endforeach; ?>
</dl>
<?php endif;?>
<?php if ($messages = $block->getMessages()): ?>
<?php foreach ($messages as $message): ?>
<div class="cart item message <?php /* @escapeNotVerified */ echo $message['type'] ?>"><div><?php echo $block->escapeHtml($message['text']) ?></div></div>
<?php endforeach; ?>
<?php endif; ?>
<?php $addInfoBlock = $block->getProductAdditionalInformationBlock(); ?>
<?php if ($addInfoBlock): ?>
<?php echo $addInfoBlock->setItem($_item)->toHtml() ?>
<?php endif;?>
</div>
</td>
<?php if ($canApplyMsrp): ?>
<td class="col msrp" data-th="<?php echo $block->escapeHtml(__('Price')); ?>">
<span class="pricing msrp">
<span class="msrp notice"><?php /* @escapeNotVerified */ echo __('See price before order confirmation.'); ?></span>
<?php $helpLinkId = 'cart-msrp-help-' . $_item->getId(); ?>
<a href="#" class="action help map" id="<?php /* @escapeNotVerified */ echo($helpLinkId); ?>" data-mage-init='{"addToCart":{"helpLinkId": "#<?php /* @escapeNotVerified */ echo $helpLinkId;?>","productName": "<?php /* @escapeNotVerified */ echo $product->getName(); ?>","showAddToCart": false}}'>
<span><?php /* @escapeNotVerified */ echo __("What's this?"); ?></span>
</a>
</span>
</td>
<?php else: ?>
<td class="col price" data-th="<?php echo $block->escapeHtml(__('Price')); ?>">
<?php echo $block->getUnitPriceHtml($_item); ?>
</td>
<?php endif; ?>
<td class="col qty" data-th="<?php echo $block->escapeHtml(__('Qty')); ?>">
<div class="field qty">
<label class="label" for="cart-<?php /* @escapeNotVerified */ echo $_item->getId() ?>-qty">
<span><?php /* @escapeNotVerified */ echo __('Qty') ?></span>
</label>
<div class="control qty">
<input id="cart-<?php /* @escapeNotVerified */ echo $_item->getId() ?>-qty"
name="cart[<?php /* @escapeNotVerified */ echo $_item->getId() ?>][qty]"
data-cart-item-id="<?php /* @escapeNotVerified */ echo $_item->getSku() ?>"
value="<?php /* @escapeNotVerified */ echo $block->getQty() ?>"
type="number"
size="4"
title="<?php echo $block->escapeHtml(__('Qty')); ?>"
class="input-text qty"
maxlength="12"
data-validate="{required:true,'validate-greater-than-zero':true}"
data-role="cart-item-qty"/>
</div>
</div>
</td>
<td class="col subtotal" data-th="<?php echo $block->escapeHtml(__('Subtotal'));?>">
<?php if ($canApplyMsrp): ?>
<span class="cart msrp subtotal">--</span>
<?php else: ?>
<?php echo $block->getRowTotalHtml($_item); ?>
<?php endif; ?>
</td>
</tr>
<tr class="item-actions">
<td colspan="100">
<div class="actions-toolbar">
<?php /* @escapeNotVerified */ echo $block->getActions($_item) ?>
</div>
</td>
</tr>
</tbody>
Я не могу это сделать. При загрузке
Локальный хост/magentostore/оформить заказ/корзина/ страница. Он загружает страницу корзины из ядра magento, которую я проверено, временно поместив die() в файл default.phtml.
4 answers
Вы можете сделать это с помощью переопределения в своем модуле следующим способом,
Вам необходимо изменить имя ссылки вашего xml,
Сначала создайте app/code/Custom/Addprofile/view/frontend/layout/checkout_cart_index.xml,
<?xml version="1.0"?>
<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 class="Magento\Checkout\Block\Cart" name="checkout.cart.form">
<block class="Magento\Framework\View\Element\RendererList" name="checkout.cart.item.renderers.override" as="renderer.list.custom"/>
<arguments>
<argument name="renderer_list_name" xsi:type="string">checkout.cart.item.renderers.override</argument>
</arguments>
</referenceBlock>
</body>
</page>
Теперь ваш checkout_cart_item_renderers.xml
<?xml version="1.0"?>
<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.override">
<block class="Magento\Checkout\Block\Cart\Item\Renderer" as="default" template="Custom_Addprofile::cart/item/default.phtml" />
<block class="Magento\Checkout\Block\Cart\Item\Renderer" as="simple" template="Custom_Addprofile::cart/item/default.phtml" />
</referenceBlock>
</body>
</page>
Наконец, через три дня. У меня это получилось. Ниже приведен правильный способ его переопределения.
App\code\Vendor\Module\Block\Cart\AbstractCart.php
<?php
/**
* Override cart item block in custom module
*/
namespace Vendor\Custom\Block\Cart;
class AbstractCart
{
public function afterGetItemRenderer(\Magento\Checkout\Block\Cart\AbstractCart $subject, $result)
{
$result->setTemplate('Vendor_Custom::cart/item/default.phtml');
return $result;
}
}
App\code\Vendor\Module\etc\di.xml
<!--To override cart template-->
<type name="Magento\Checkout\Block\Cart\AbstractCart">
<plugin name="cart-item-override" type="Vendor\Custom\Block\Cart\AbstractCart" sortOrder="1"/>
</type>
Приложение\код\Поставщик\Пользовательский\просмотр\интерфейс\корзина\товар\по умолчанию.phtml
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// @codingStandardsIgnoreFile
/** @var $block \Magento\Checkout\Block\Cart\Item\Renderer */
die('template overridden');
$_item = $block->getItem();
$product = $_item->getProduct();
$isVisibleProduct = $product->isVisibleInSiteVisibility();
/** @var \Magento\Msrp\Helper\Data $helper */
$helper = $this->helper('Magento\Msrp\Helper\Data');
$canApplyMsrp = $helper->isShowBeforeOrderConfirm($product) && $helper->isMinimalPriceLessMsrp($product);
?>
<tbody class="cart item">
<tr class="item-info">
<td data-th="<?= $block->escapeHtml(__('Item')) ?>" class="col item">
<?php if ($block->hasProductUrl()):?>
<a href="<?= /* @escapeNotVerified */ $block->getProductUrl() ?>"
title="<?= $block->escapeHtml($block->getProductName()) ?>"
tabindex="-1"
class="product-item-photo">
<?php else:?>
<span class="product-item-photo">
<?php endif;?>
<?= $block->getImage($block->getProductForThumbnail(), 'cart_page_product_thumbnail')->toHtml() ?>
<?php if ($block->hasProductUrl()):?>
</a>
<?php else: ?>
</span>
<?php endif; ?>
<div class="product-item-details">
<strong class="product-item-name">
<?php if ($block->hasProductUrl()):?>
<a href="<?= /* @escapeNotVerified */ $block->getProductUrl() ?>"><?= $block->escapeHtml($block->getProductName()) ?></a>
<?php else: ?>
<?= $block->escapeHtml($block->getProductName()) ?>
<?php endif; ?>
</strong>
<p><strong>Note: </strong>This is a renewal prodcut.</p>
<?php if ($_options = $block->getOptionList()):?>
<dl class="item-options">
<?php foreach ($_options as $_option) : ?>
<?php $_formatedOptionValue = $block->getFormatedOptionValue($_option) ?>
<dt><?= $block->escapeHtml($_option['label']) ?></dt>
<dd>
<?php if (isset($_formatedOptionValue['full_view'])): ?>
<?= /* @escapeNotVerified */ $_formatedOptionValue['full_view'] ?>
<?php else: ?>
<?= /* @escapeNotVerified */ $_formatedOptionValue['value'] ?>
<?php endif; ?>
</dd>
<?php endforeach; ?>
</dl>
<?php endif;?>
<?php if ($messages = $block->getMessages()): ?>
<?php foreach ($messages as $message): ?>
<div class="cart item message <?= /* @escapeNotVerified */ $message['type'] ?>"><div><?= $block->escapeHtml($message['text']) ?></div></div>
<?php endforeach; ?>
<?php endif; ?>
<?php $addInfoBlock = $block->getProductAdditionalInformationBlock(); ?>
<?php if ($addInfoBlock): ?>
<?= $addInfoBlock->setItem($_item)->toHtml() ?>
<?php endif;?>
</div>
</td>
<?php if ($canApplyMsrp): ?>
<td class="col msrp" data-th="<?= $block->escapeHtml(__('Price')) ?>">
<span class="pricing msrp">
<span class="msrp notice"><?= /* @escapeNotVerified */ __('See price before order confirmation.') ?></span>
<?php $helpLinkId = 'cart-msrp-help-' . $_item->getId(); ?>
<a href="#" class="action help map" id="<?= /* @escapeNotVerified */ ($helpLinkId) ?>" data-mage-init='{"addToCart":{"helpLinkId": "#<?= /* @escapeNotVerified */ $helpLinkId ?>","productName": "<?= /* @escapeNotVerified */ $product->getName() ?>","showAddToCart": false}}'>
<span><?= /* @escapeNotVerified */ __("What's this?") ?></span>
</a>
</span>
</td>
<?php else: ?>
<td class="col price" data-th="<?= $block->escapeHtml(__('Price')) ?>">
<?= $block->getUnitPriceHtml($_item) ?>
</td>
<?php endif; ?>
<td class="col qty" data-th="<?= $block->escapeHtml(__('Qty')) ?>">
<div class="field qty">
<label class="label" for="cart-<?= /* @escapeNotVerified */ $_item->getId() ?>-qty">
<span><?= /* @escapeNotVerified */ __('Qty') ?></span>
</label>
<div class="control qty">
<input id="cart-<?= /* @escapeNotVerified */ $_item->getId() ?>-qty"
name="cart[<?= /* @escapeNotVerified */ $_item->getId() ?>][qty]"
data-cart-item-id="<?= /* @escapeNotVerified */ $_item->getSku() ?>"
value="<?= /* @escapeNotVerified */ $block->getQty() ?>"
type="number"
size="4"
title="<?= $block->escapeHtml(__('Qty')) ?>"
class="input-text qty"
data-validate="{required:true,'validate-greater-than-zero':true}"
data-role="cart-item-qty"/>
</div>
</div>
</td>
<td class="col subtotal" data-th="<?= $block->escapeHtml(__('Subtotal')) ?>">
<?php if ($canApplyMsrp): ?>
<span class="cart msrp subtotal">--</span>
<?php else: ?>
<?= $block->getRowTotalHtml($_item) ?>
<?php endif; ?>
</td>
</tr>
<tr class="item-actions">
<td colspan="100">
<div class="actions-toolbar">
<?= /* @escapeNotVerified */ $block->getActions($_item) ?>
</div>
</td>
</tr>
</tbody>
Спасибо
Вот правильный способ переопределить файл.phtml по умолчанию.
Во-первых, вам нужно записать последовательность в module.xml . Без этих последовательностей вы не сможете переопределить.
App/code/VendorName/ModuleName/etc/module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="VendorName_ModuleName" setup_version="0.0.1">
<sequence>
<module name="Magento_Checkout" />
<module name="Magento_Bundle" />
<module name="Magento_Catalog" />
<module name="Magento_ConfigurableProduct" />
<module name="Magento_Downloadable" />
<module name="Magento_GroupedProduct" />
</sequence>
</module>
На следующем шаге вы должны установить свой шаблон в checkout_cart_item_renderers.xml
App/code/VendorName/ModuleName/view/frontend/layout/checkout_cart_item_renderers.xml
<?xml version="1.0"?>
<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="checkout.cart.item.renderers.bundle" template="VendorName_ModuleName::cart/item/default.phtml" />
<referenceBlock name="checkout.cart.item.renderers.virtual" template="VendorName_ModuleName::cart/item/default.phtml" />
<referenceBlock name="checkout.cart.item.renderers.default" template="VendorName_ModuleName::cart/item/default.phtml" />
<referenceBlock name="checkout.cart.item.renderers.simple" template="VendorName_ModuleName::cart/item/default.phtml" />
<referenceBlock name="checkout.cart.item.renderers.configurable" template="VendorName_ModuleName::cart/item/default.phtml" />
<referenceBlock name="checkout.cart.item.renderers.grouped" template="VendorName_ModuleName::cart/item/default.phtml" />
</body>
</page>
И последний шаг - это ваш шаблон, который должен находиться на этом пути.
Приложение/код/Имя поставщика/имя модуля/вид/интерфейс/шаблоны/корзина/товар/по умолчанию.phtml
Наслаждайтесь!
Я нашел ответ с помощью плагина здесь
Как использовать перепишите файл шаблона корзины/товара/по умолчанию.phtml в мой модуль в Magento2
, что позволяет нам переопределить шаблон. Но разве мы не можем сделать это так, как сделал я? Если есть какая-либо ошибка, пожалуйста, укажите.