Frage

Ich arbeite an einem CMS -Block, um Produkte auf der Homepage zu zeigen. Ich richte meine eigene Vorlagendatei ein, die geladen wird $this->getProduct() für die Daten.

Das Problem, das ich habe, ist, dass ich das benutze catalog/product_view Blocktyp und es lädt nur ein Produkt. Wenn ich das Widget also mehrmals mit mehreren Produkt -IDs wiederhole, wiederholt es das erste (ich vermute, weil der Klassenkonstruktor das Produkt in den Konstruktor erhält, und Magento nicht wird nicht Laden Sie es mehr als einmal pro Anfrage)

Zum Beispiel dies:

{{block type="catalog/product_view" product_id="1234" template="page/html/featured/product.phtml"}}
{{block type="catalog/product_view" product_id="5678" template="page/html/featured/product.phtml"}}

Wenn zweimal wiederholt wird, wird das Produkt mit ID 1234 zweimal mit diesem Code angezeigt:

App/Design/Frontend/MyPackage/Seite/HTML/Featured/Product.phtml

<?php 
$p = $this->getProduct();
$img = $p->getImageUrl();
$description = $p->getShortDescription();
$name = $p->getName();
$link = $p->getProductUrl();

echo "<div style='display:inline-block;width: 20%;float: left;'>
        <a href ='$link'><img style='width:80%;margin:0 10%;' src='$img' />
        <div class='product-name'>$name</div>
        </a>
        <div class='home-product-description'>$description</div>
    </div>";

Gibt es einen anderen Blocktyp (Modell), mit dem ich einzelne Produkte laden kann, vielleicht als Singleton? Ich möchte in der Lage sein, ein anderes Produkt für jedes Mal zu erhalten, wenn ich das Widget mit derselben Vorlage aufrufe, um die Ausgabe anzuzeigen. Die einzige andere Option, die ich mir vorstellen konnte, war das Laden einer Sammlung einer bestimmten Kategorie in der Vorlage selbst, aber natürlich den Zweck der Flexibilität, die das CMS bietet.

War es hilfreich?

Lösung

Dafür gibt es ein Widget! In Ihrer CMS -Seite,

{{widget type="catalog/product_widget_link"
         anchor_text="[Optional: CUSTOM LINK TEXT]"
         template="catalog/product/widget/link/link_block.phtml"
         id_path="product/223552"}}

Passen Sie dann App/Design/Frontend/Base/Default/Vorlage/Katalog/Produkt/widget/link/link_block.phtml an. Ich benutze so etwas:

<?php

$_product = $this->getProduct();
$_image = '';
$_price = '$' . money_format('%n', $_product->getFinalPrice());

if ($_product) {
    $_image = Mage::helper('catalog/image')->init($_product, 'thumbnail')
        ->keepAspectRatio(true)
        ->keepFrame(true)
        ->resize(115,115)
        ->__toString();
}
?>
<div class="item">
    <a <?php echo $this->getLinkAttributes() ?>>
        <img src="<?php echo $_image; ?>" alt="<?php echo $this->htmlEscape($this->getAnchorText()); ?>" style="border:0" />
        <?php echo nl2br($this->htmlEscape($this->getAnchorText())); ?><br />
        <b><?php echo $_price; ?></b>
    </a>
</div>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top