נשתמש בVIEWMODULE על מנת להפריד את הלוגיקה מה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