Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

Produkttyp im Frontend korrekt anzeigen und verkaufen

Produkttyp im Frontend korrekt anzeigen und verkaufen

~6 Min. Lesezeit Zuletzt aktualisiert am 9. August 2026

Wie schon bei Zahlungs- und Versandarten (Block 8) zeigt sich auch hier der Lohn der Wiederverwendung: Weil PointsPackage von Virtual erbt (Kapitel 73), funktionieren "In den Warenkorb", Mengenfeld und die komplette Produktseite bereits ohne einen einzigen zusätzlichen Handgriff. Dieses Kapitel ergänzt nur die eine informative Zusatzbox, die ein Punkte-Paket von einem gewöhnlichen virtuellen Produkt unterscheidet.

Der automatische Layout-Handle

Beim Rendern der Produktdetailseite hängt Magento\Catalog\Controller\Product\View automatisch den Handle catalog_product_view_type_<type_id> an - für Punkte-Pakete also catalog_product_view_type_loyalty_points_package. Eine Layout-Datei mit genau diesem Namen wird nur für Produkte dieses einen Typs geladen, ganz ohne eigene Bedingungslogik im Template - der Vorteil aus Kapitel 71 wird hier konkret.

app/code/Mironsoft/Loyalty/view/frontend/layout/catalog_product_view_type_loyalty_points_package.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>
        <referenceContainer name="product.info.main">
            <block class="Magento\Catalog\Block\Product\View"
                   name="loyalty.points.package.info"
                   template="Mironsoft_Loyalty::product/view/type/points-package.phtml"
                   after="product.info.price"/>
        </referenceContainer>
    </body>
</page>

class="Magento\Catalog\Block\Product\View" ist bewusst explizit gesetzt statt den generischen Template-Block zu übernehmen - nur so steht im Template $block->getProduct() zur Verfügung, derselbe Block, den auch Magentos eigene, einfache Produktinfo-Blöcke im Kern verwenden.

app/code/Mironsoft/Loyalty/view/frontend/templates/product/view/type/points-package.phtml
<?php

declare(strict_types=1);

/** @var \Magento\Catalog\Block\Product\View $block */
/** @var \Magento\Framework\Escaper $escaper */

$pointsAmount = (int) $block->getProduct()->getData('loyalty_points_package_amount');
?>
<?php if ($pointsAmount > 0): ?>
    <div class="mb-4 rounded-xl border border-brand-accent/30 bg-sky-50 p-4">
        <p class="mb-0 text-sm font-semibold text-brand-dark">
            <?= $escaper->escapeHtml(
                __('You will receive %1 loyalty points with this purchase.', number_format($pointsAmount))
            ) ?>
        </p>
    </div>
<?php endif; ?>

Warenkorb und Bestellung ohne neues Template

getOrderOptions() aus Kapitel 73 füllt bereits beim Hinzufügen zum Warenkorb das generische additional_options-Array. Sowohl Hyväs Warenkorb-Renderer als auch die klassische Bestellübersicht im Kundenkonto lesen diese Struktur produkttyp-unabhängig aus - "500 Bonuspunkte" erscheint dadurch automatisch als Zusatzzeile unter dem Produktnamen, ganz ohne eigenes Cart-Item- oder Order-Item-Template.

Tipp: Trotzdem gilt: automatisch bedeutet nicht ungetestet. Ein Punkte-Paket einmal vollständig durch Warenkorb, Checkout-Zusammenfassung und Bestellbestätigungs-E-Mail durchklicken, bevor der Typ live geschaltet wird - die additional_options-Konvention ist zwar Magento-Standard, aber ein individuell angepasstes Hyvä-Cart-Template könnte sie theoretisch trotzdem anders rendern als erwartet.

Achtung: Fehlt die informative Box auf der Produktseite trotz korrekt gesetztem loyalty_points_package_amount, ist die häufigste Ursache ein Tippfehler im Dateinamen des Layout-Updates - er muss exakt catalog_product_view_type_loyalty_points_package.xml lauten, identisch zum Typ-Code aus Kapitel 72. Ein einzelner abweichender Buchstabe führt zu keinem Fehler, nur zu einem stillschweigend nicht geladenen Layout-Update.

Ein Punkte-Paket lässt sich jetzt vollständig anzeigen, in den Warenkorb legen und bestellen. Was beim tatsächlichen Bestellabschluss mit den enthaltenen Punkten passiert, klärt Kapitel 76.