נשתמש בVIEWMODULE על מנת להפריד את הלוגיקה מהBLOCK ולהשאיר את הבלוק מתפקד רק לתצוגה , נכנס רק ממגנטו 2.2 וזהו הדרך הנכונה יותר לעבודה.
*חייב להיות מחובר לBLOCK או על ידי חיבור כמו פה או על ידי בניה של קובץ יעודי כמו בקבצי הפרוייקט
MODULE/ViewModel/DeliveryMessage.php
declare(strict_types=1);
namespace Training\ViewModelExample\ViewModel;
use Magento\Framework\View\Element\Block\ArgumentInterface;
class DeliveryMessage implements ArgumentInterface
{
public function getMessage(): string
{
return 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Maxime, obcaecati.';
}
}
פה יש לבצע implements ArgumentInterface על מנת שיודגר כVIEWNODULE
<?xml version="1.0" encoding="UTF-8"?>
<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.main">
<block name="delivery_message"
class="Magento\Framework\View\Element\Template"
template="Training_ViewModelExample::delivery_message.phtml"
before="product.info.price">
<arguments>
<argument name="view_model" xsi:type="object">Training\ViewModelExample\ViewModel\DeliveryMessage</argument>
</arguments>
</block>
</referenceContainer>
</body>
</page>
הוספת arguments על מנת להגדיר את הקלאס
<?php /** @var \Magento\Framework\View\Element\Template $block */?>
<div class="delivery_box">
<strong><?= $block->getViewModel()->getMessage()?></strong>
</div>
יש לקרוא למידע באמצעות ()getViewModel או באמצעות $viewModel = $block->getData('view_model')
מודול רלוונטי : zur.web-e.co.il\app\code\CustomProductAttribute\NewAtt\ViewModel\MyNewViewModel.php
דוקומנטציה : https://devdocs.magento.com/guides/v2.4/extension-dev-guide/view-models.html?itm_source=devdocs&itm_medium=search_page&itm_campaign=federated_search&itm_term=viewmodule