Das neue Magento 2 Frontend „Hyvä“ hat schon große Wellen geschlagen. Super viele Vorteile für sowohl Shopbetreiber, als auch Entwickler. In diesem Türchen zeigen wir ein neues Feature von Hyvä, welches sich „ViewModel-Registry“ nennt. Zusätzlich vergleichen wir es mit der Standard-Methode ViewModels einzubinden und zeigen auf warum es nochmal mehr Code spart.
Magento 2 Standard
Im Magento 2 Standard binden wir ein ViewModel über eine XML-Datei ein:
<!-- Magento Standard - ViewModel einbinden -->
<!-- view/frontend/layout/default.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>
<!-- Block definieren -->
<block name="cx.blockname" template="Codex_Example::example.phtml">
<arguments>
<!-- als Argument das ViewModel -->
<argument name="example_model">
Codex\Example\ViewModel\ExampleModel
</argument>
</arguments>
</block>
</body>
</page>
Nachdem das ViewModel per XML eingebunden wurde, können wir es wie folgt in dem PHTML-Template nutzen:
// Magento Standard - ViewModel benutzen
// view/frontend/templates/example.phtml
// ViewModel laden
<?php $em = $block->getData('example_model'); ?>
// ViewModel Funktionen abrufen
<?php if ($em->showData()): ?>
<div class="special-data">
// ViewModel Daten ausgeben
<?php echo $em->getSpecialData() ?>
</div>
<?php endif; ?>
Hyvä ViewModel-Registry
In Hyvä benötigen wir keine XML-Datei, die das ViewModel einbindet. In Hyvä können wir jedes ViewModel über die ViewModel-Registry direkt im PHTML-Template laden:
// Hyvä - ViewModel Registry benutzen
// view/frontend/templates/example.phtml
<?php
use Hyva\Theme\Model\ViewModelRegistry;
use Codex\Example\ViewModel\ExampleModel;
// Mit der Registry sparen wir uns die XML!
/** @var ViewModelRegistry $viewModels */
// ViewModel laden
$em = $viewModels->require(ExampleModel::class);
// ViewModel Funktionen abrufen
<?php if ($em->showData()): ?>
<div class="special-data">
// ViewModel Daten ausgeben
<?php echo $em->getSpecialData() ?>
</div>
<?php endif; ?>
Dadurch sind wir viel flexibler und können sinnvolle ViewModels, die Hyvä teilweise auch selber mitbringt, ganz einfach an mehreren Stellen schnell und effizient nutzen. Als Beispiel gibt es da die „CurrentCategory“, „CurrentProduct“ und sogar „HeroiconsSolid“ ViewModels.