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_Checkoutmodü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\AbstractItemsBlokta olduğu gibi aynı yaklaşımın çalıştığı başka yerler olduğunu unutmayın . Magento_CheckoutVe Magento_Salesmodü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.xmlDü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.xmldü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.xmldü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 defaultve simplesırasıyla.
Bununla birlikte, Magento\Checkout\Block\Cart\Gridadlandırılmış checkout.cart.formve 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_templatesveriler 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 argumentssözdizimini kullanarak basittir .