Frage

Ich versuche, 4 zufällige Produkte auf der homepage mit PHP in eine TPL-Datei, die ich erstellt habe.Ich möchte in der Lage sein, formatieren Sie die Produkte in einer foreach-Schleife wie ich bin mit einigen Formatierungen in die code unten zu sehen...

<div class="three columns">
  <div class="product_container no_border">
    <div class="product">
      <a href="product_page.html"><img src="<?php echo $this->getSkinUrl('images/products/place_holder.jpg'); ?>" alt=" "></a>
    </div>

    <div class="product_title">
      <a href="product_page.html">240 Serving Package</a>
    </div>

    <div class="price_hp">$454.99</div>

    <div class="free_shipping">
      <div class="fs"></div>
      Free shipping for this package
    </div>

    <div class="shop_btn">
      <a href="#">ADD TO CART</a>
    </div>
  </div>
</div>

Ich habe versucht, ein paar Dinge gefunden bei Google aber noch kein Glück.Kategorien festlegen, die in einem array würde sicherlich die Arbeit für das, was ich versuche zu tun, aber es würde auch funktionieren, wenn die Kategorien waren zufällig.

Vielen Dank!

War es hilfreich?

Lösung

Versuche dies. Ich habe für mich gearbeitet:

$products = Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToSelect(array('name', 'thumbnail', 'price')); //feel free to add any other attribues you need.
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products); 
$products->getSelect()->order('RAND()');
$products->getSelect()->limit(4);
foreach ($products as $product)  : ?>

<div class="three columns">
  <div class="product_container no_border">
    <div class="product">
      <a href="<?php echo $product->getProductUrl()?>"><img src="<?php echo Mage::helper('catalog/image')->init($product, 'thumbnail')->resize(100, 80)?>" alt=""></a>
    </div>

    <div class="product_title">
      <a href="<?php echo $product->getProductUrl()?>"><?php echo $product->getName()?></a>
    </div>

    <div class="price_hp"><?php echo Mage::app()->getStore()->getCurrentCurrency()->format($product->getFinalPrice());?></div>

    <div class="free_shipping">
      <div class="fs"></div>
      Free shipping for this package
    </div>

    <div class="shop_btn">
      <a href="<?php echo Mage::helper('checkout/cart')->getAddUrl($product)?>">ADD TO CART</a>
    </div>
  </div>
</div>
<?php 
endforeach;?>

Andere Tipps

Erstellen Block Für Zufällige Produkte

Erstellen Sie ein benutzerdefiniertes Modul mit einem neuen block geben.Ich würde empfehlen, zu verlängern Mage_Catalog_Block_Product_List, dann, wenn die Standard-Produkt-Liste layout genügt für Sie, die Sie gar nicht brauchen, um design Ihre eigene Vorlage.

Dann überschreiben _getProductCollection() oder wenn Sie nicht verlängern Mage_Catalog_Block_Product_list schreiben Sie eine neue öffentliche Methode getProductCollection().

So bereiten Sie das Produkt Sammlung Methode:

Sammlung Filter

Erstellen Sie zunächst die Sammlung und wenden Sie die standard-filter (sichtbar im Katalog und in der aktuellen store):

$productCollection = Mage::getModel('catalog/product')->getCollection();
$productCollection
    ->addStoreFilter()
    ->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());

Performant Zufällige Auswahl

ORDER BY RAND() ist unperformant auf große Tabellen, da es Ergebnisse in eine Ressourcen-intensive temp-Tabelle kopieren.Es hat geladen alle Ergebnisse in eine temporäre Tabelle zuordnen einer zufälligen Zahl zu einzelnen Zeilen und dann zu Sortieren, ohne index.Stattdessen rufen wir alle ids (dies ist schneller und der Umfang der Daten ist managable, auch für große Kataloge), pick einige zufällig und abrufen, diese Zeilen direkt.

Hierzu fügen Sie diesen code nach dem Filter für die Erhebung wurden angewandt:

$numberOfItems = 4;
$candidateIds = $productCollection->getAllIds();

$choosenIds = [];
$maxKey = count($candidateIds)-1;
while (count($choosenIds) < $numberOfItems)) {
  $randomKey = mt_rand(0, $maxKey);
  $choosenIds[$randomKey] = $candidateIds[$randomKey];
}

$productCollection->addIdFilter($choosenIds);

Lesen Sie darüber ausführlich in meinem blog: http://www.schmengler-se.de/en/2015/09/show-random-products-in-magento-you-are-doing-it-wrong/

Abrufen Der Erforderlichen Attribute

Dann wir geben Sie die Attribute an, die geladen werden-und join-Preis und die URL Indizes werden in der Lage zu zeigen die richtigen Preis-und Produkt-URL:

$productCollection
    ->addMinimalPrice()
    ->addFinalPrice()
    ->addTaxPercents()
    ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
    ->addUrlRewrite();

Nicht zuletzt die Rückkehr der Sammlung:

return $productCollection;

Diese Sammlung kann nun verwendet werden Mage_Catalog_Block_Product_List blockiert oder Ihre eigene Vorlage mit foreach ($this->getProductCollection() as $product) wie in Marius' Antwort.


Einfügen von Benutzerdefinierten Block In CMS

Verwenden Sie diesen code, fügen Sie den block in Ihrer Homepage mit your/block als alias für Ihre block-Klasse:

{{block type="your/block" name="random_products" template="catalog/product/list.phtml" column_count="4"}}

Geben Sie Ihre eigene Vorlage, wenn nötig. column_count verwendet von Mage_Catalog_Block_Product_List.


Notes

  1. Alternativ können Sie auch alle PHP-code oben in der Vorlage, aber das ist ziemlich chaotisch und verletzt Magento coding standards und best practices.

  2. Offenbar Magento kommt mit seinen eigenen vordefinierten block type catalog/product_list_random, aber es nutzt order('rand()'), also werde ich nicht empfehlen es für die performance-Gründen oben erklärt.

Sie können versuchen, die gesamte Produktsammlung in einen benutzerdefinierten Block zu laden und zu verwenden array_rand Um die 5 IDs auszuwählen, die an die TPL -Datei zurückgegeben werden.

http://php.net/manual/en/function.array-rand.php

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top