Question

Je suis en train d'obtenir 4 produits au hasard sur la page d'accueil en utilisant PHP dans un fichier TPL j'ai créé. Je voudrais être en mesure de formater les produits dans une boucle foreach j'utilise une mise en forme dans le code ci-dessous ... vu

<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>

J'ai essayé quelques choses qui se trouvent sur Google, mais pas encore la chance. Configuration des catégories dans un tableau serait certainement travailler pour ce que je suis en train de faire, mais ce serait aussi si les catégories étaient aléatoires.

Merci!

Était-ce utile?

La solution

Essayez ceci. Je travaillais pour moi:

$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;?>

Autres conseils

Créer un bloc pour les produits aléatoires

Vous devez créer un module personnalisé avec un nouveau type de bloc. Je vous recommande d'étendre Mage_Catalog_Block_Product_List, puis, si la mise en page de la liste des produits par défaut suffit pour vous, vous ne même pas besoin de concevoir votre propre modèle.

Ensuite, passer outre _getProductCollection() ou si vous ne couvre pas Mage_Catalog_Block_Product_list écrire une nouvelle méthode publique getProductCollection().

Comment préparer la collection de produits dans cette méthode:

Filtre Collection

Tout d'abord, créez la collection et d'appliquer le filtre standard (visible dans catalogue et disponible en magasin courant):

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

Performant Sélection aléatoire

ORDER BY RAND() est unperformant sur de grandes tables, car il en résulte une copie de table temporaire à forte intensité de ressources. Il doit charger tous les résultats dans une table temporaire, attribuer un nombre aléatoire à chaque ligne et puis trier sans index. Au lieu de cela, nous récupérons tous les IDs (ce qui est plus rapide et la quantité de données est même managable pour les grands catalogues), cueillir au hasard et récupérer ces lignes directement.

Pour ce faire, insérer ce code après les filtres de collecte ont été appliquées:

$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);

Vous pouvez lire à ce sujet en détail dans mon blog: http://www.schmengler-se.de/en/2015/09/show-random-products-in-magento-you-are-doing-it- mauvais /

Récupérer les attributs nécessaires

Ensuite, nous précisons les attributs à charger et rejoindre les indices des prix et URL pour être en mesure de montrer le bon prix et URL du produit:

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

Last but not least, retourner la collection:

return $productCollection;

Cette collection peut maintenant être utilisé dans des blocs de Mage_Catalog_Block_Product_List ou dans votre propre modèle avec foreach ($this->getProductCollection() as $product) comme dans la réponse de Marius.


Insérer un bloc personnalisé dans le CMS

Utilisez ce code pour insérer le bloc dans votre page d'accueil, avec your/block étant l'alias de votre classe de bloc:

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

Indiquez votre propre modèle si nécessaire. column_count est utilisé par Mage_Catalog_Block_Product_List.


Remarques

  1. Sinon, vous pouvez mettre tout le code PHP ci-dessus de votre modèle, mais cela est tout à fait désordre et viole les normes et les meilleures pratiques de codage de Magento.

  2. Apparemment, Magento est livré avec son propre catalog/product_list_random de type bloc prédéfini, mais il utilise order('rand()'), donc je ne le recommanderais pas pour les raisons expliquées ci-dessus performances.

Vous pouvez essayer de charger toute la collection de produits dans une mesure Block et utilisation array_rand pour choisir les 5 ID qui sont retournés dans le fichier TPL.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top