Bu, düzgün ve kesmeksizin nasıl yapılacağıdır.
OP'nin kullanım durumunu aramadım, ancak arabadaki oluşturucuları değiştirebilmeliydim. Sorun, OP'nin durumunda olduğu gibi, Magento_Checkout
modülün oluşturuculara ad vermediği anlamına gelir, bu da referans alınamayacakları ve şablonlarının geleneksel veya belgelenmiş yöntemler kullanılarak değiştirilebileceği anlamına gelir. Bununla birlikte, bazı itirazlardan sonra, Magento2'nin bize doğrudan XML düzeninde sağladığı araçları kullanarak nasıl yapılacağını keşfettim.
Magento\Sales\Block\Items\AbstractItems
Blokta olduğu gibi aynı yaklaşımın çalıştığı başka yerler olduğunu unutmayın . Magento_Checkout
Ve Magento_Sales
modüller, madde render azami yararlanmak ikisi isimsiz bir bloğun şablonunu değiştirmek için birini yol açacak sorguları birçoğu bu kapakları bu yüzden. Bunun yayınlanmasının nedeni, ödeme veya satış modüllerindeki oluşturucu şablonlarının nasıl değiştirileceğini arayan başkalarının kaçınılmazlığıdır.
İlk olarak çözümü sunacağım ve sonra neden işe yaradığını bilmek isteyen herkes için ayrıntılı olarak açıklayacağım.
Çözüm
checkout_cart_index.xml
Düzen dosyasına aşağıdakileri ekleyin :
<referenceBlock name="checkout.cart.form">
<arguments>
<argument name="overridden_templates" xsi:type="array">
<item name="default" xsi:type="string">LinusShops_Moneymaker::Magento_Checkout/cart/item/default.phtml</item>
<item name="simple" xsi:type="string">LinusShops_Moneymaker::Magento_Checkout/cart/item/simple.phtml</item>
<item name="configurable" xsi:type="string">LinusShops_Moneymaker::Magento_Checkout/cart/item/configurable.phtml</item>
</argument>
</arguments>
</referenceBlock>
Modül adı ve yolunun kod tabanınızı yansıtacak şekilde değiştirilmesi gerektiğini unutmayın.
açıklama
Bu overridden_templates
, varsayılan olarak tanımlanmamış blok verilerinden yararlanarak çalışır .
İçinde Magento_Checkout
, checkout_cart_index.xml
düzen dosyası aşağıdaki bloğu tanımlar:
<block class="Magento\Checkout\Block\Cart\Grid" name="checkout.cart.form" as="cart-items" template="cart/form.phtml" after="cart.summary">
<block class="Magento\Framework\View\Element\RendererList" name="checkout.cart.item.renderers" as="renderer.list"/>
<block class="Magento\Framework\View\Element\Text\ListText" name="checkout.cart.order.actions"/>
</block>
Daha sonra checkout_cart_item_renderers.xml
düzen dosyasında bu oluşturuculardan birkaçını tanımlar :
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<update handle="checkout_item_price_renderers"/>
<body>
<referenceBlock name="checkout.cart.item.renderers">
<block class="Magento\Checkout\Block\Cart\Item\Renderer" as="default" template="cart/item/default.phtml">
<block class="Magento\Checkout\Block\Cart\Item\Renderer\Actions" name="checkout.cart.item.renderers.default.actions" as="actions">
<block class="Magento\Checkout\Block\Cart\Item\Renderer\Actions\Edit" name="checkout.cart.item.renderers.default.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.default.actions.remove" template="Magento_Checkout::cart/item/renderer/actions/remove.phtml"/>
</block>
</block>
<block class="Magento\Checkout\Block\Cart\Item\Renderer" as="simple" template="cart/item/default.phtml">
<block class="Magento\Checkout\Block\Cart\Item\Renderer\Actions" name="checkout.cart.item.renderers.simple.actions" as="actions">
<block class="Magento\Checkout\Block\Cart\Item\Renderer\Actions\Edit" name="checkout.cart.item.renderers.simple.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.simple.actions.remove" template="Magento_Checkout::cart/item/renderer/actions/remove.phtml"/>
</block>
</block>
</referenceBlock>
</body>
</page>
Ne yazık ki, onların takma adları tarafından başvurulan, olamaz default
ve simple
sırasıyla.
Bununla birlikte, Magento\Checkout\Block\Cart\Grid
adlandırılmış checkout.cart.form
ve oluşturucuların üst öğesi olan Blok'a bakıldığında getItemHtml
, ilişkili şablondaki yönteme bir çağrı olduğu not edilebilir cart/form.phtml
. Bu yöntem daha sonra çağırır getItemRenderer
. Bu yöntemlerin her ikisi de Grid
'nin üst sınıfında tanımlanmıştır AbstractBlock
. Bu noktada overridden_templates
veriler kullanılmıştır:
/**
* Retrieve item renderer block
*
* @param string|null $type
* @return \Magento\Framework\View\Element\Template
* @throws \RuntimeException
*/
public function getItemRenderer($type = null)
{
if ($type === null) {
$type = self::DEFAULT_TYPE;
}
$rendererList = $this->_getRendererList();
if (!$rendererList) {
throw new \RuntimeException('Renderer list for block "' . $this->getNameInLayout() . '" is not defined');
}
$overriddenTemplates = $this->getOverriddenTemplates() ?: [];
$template = isset($overriddenTemplates[$type]) ? $overriddenTemplates[$type] : $this->getRendererTemplate();
return $rendererList->getRenderer($type, self::DEFAULT_TYPE, $template);
}
Bu bilgi ile, bloğu mizanpaj XML'sinden verilerle doldurmak Magento2'nin arguments
sözdizimini kullanarak basittir .