2010-07-15 11 views
4

Cela devrait être supposé être bête mais ça me rend fou! Tout ce que je veux est de montrer les nouveaux produits pour une catégorie spécifique, mais tout ce que je reçois est de nouveaux produits de n'importe quelle catégorie.Nouveaux produits par catégorie dans Magento

Supposant Je veux montrer la catégorie 74, j'ai essayé presque toute combinaison de ce code

{{block type="catalog/product_new" name="home.catalog.product.new" alias="product_homepage" category_id="74" template="catalog/product/new.phtml"}} 

Avec un category_id directement affecté

{{block type="catalog/product_new" category_id="74" template="catalog/product/new.phtml"}} 

Avec catégorie implicite ou selon quelle catégorie J'accède

{{block type="catalog/product_new" template="catalog/product/new.phtml"}} 

Ce code a été testé, codé en dur dans ho me code de la page, en créant un bloc statique avec elle et en l'incluant à travers le panneau de catégorie (bloc statique et produits) ... mais sans valeur. J'ai testé presque tout le code que j'ai trouvé dans ce forum et dans d'autres, mais aucun résultat.

Indépendamment de tout code (avec category_id = "74" affecté et non), je reçois tout le temps le même résultat. Le filtre de catégorie ne fonctionne pas et affiche les nouveaux produits de toute catégorie, pas les nouveaux produits de la catégorie actuelle, ni les produits d'une catégorie codée manuellement (par exemple category_id = "74"). J'utilise les produits de la liste à la place de nouveaux produits, fonctionne bien en page d'accueil et en tant que bloc statique, les catégories semblent être bien créé

{{block type="catalog/product_list" category_id="74" template="catalog/product/list.phtml"}} 

qui me montre les produits qui appartiennent à la catégorie 74

J'utilise Magento Magento ver. 1.3.2.4, et me montre le même résultat même en utilisant différents modèles.

Des conseils seront accueillis

Avoir une belle journée, J.

PS J'ai essayé avec d'autres catégories, non seulement 74. Avec les catégories de parents, les catégories d'enfants ... mais aucun résultat

Répondre

1

Le bloc catalog/product_new n'accepte pas de catégorie_id en tant que paramètre. Si vous souhaitez effectuer cette opération pour une seule catégorie, vous devez créer votre propre bloc personnalisé descendant de catalog/product_new et remplacer la méthode _beforeToHtml pour utiliser un ID de catégorie.

Espérons que ça aide!

Merci, Joe

+0

Pourriez-vous être plus précis? En tant que programmeur, je comprends ce que vous voulez dire lorsque vous parlez de la méthode override _beforeToHtml mais je ne suis pas un programmeur php et ma connaissance de ce langage est limitée. Je suppose que le fichier que je devrais modifier est l'application \ code \ core \ Mage \ Catalogue \ Bloc \ Produit \ Nouveau.php du fichier de base, n'est-ce pas? Voici mon code, pouvez-vous m'aider à le remplir? Merci pour votre aide, J. – juankomik

+0

S'il vous plaît pouvez-vous expliquer comment récupérer de nouveaux produits par catégorie ID (c'est-à-dire: séparés par des virgules => 3, 6,7) ... –

0

Cela fonctionne pour moi.

protected function _beforeToHtml() 
    { 
     $todayDate = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT); 

     $collection = Mage::getResourceModel('catalog/product_collection'); 
     $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds()); 

     $collection = $this->_addProductAttributesAndPrices($collection) 
      ->addStoreFilter() 
      ->addAttributeToFilter('news_from_date', array('date' => true, 'to' => $todayDate)) 
      ->addAttributeToFilter('news_to_date', array('or'=> array(
       0 => array('date' => true, 'from' => $todayDate), 
       1 => array('is' => new Zend_Db_Expr('null'))) 
      ), 'left') 
      ->addAttributeToSort('news_from_date', 'desc') 
      ->setPageSize($this->getProductsCount()) 
      ->setCurPage(1) 
     ; 


     if($categoryId=$this->getCategoryId()){ 
     $category = Mage::getModel('catalog/category')->load($categoryId); 
     $collection->addCategoryFilter($category); 
} 

     $this->setProductCollection($collection); 

     return parent::_beforeToHtml(); 
    } 
0

Je pense que vous voulez modifier le New.php comme ceci:

$collection = Mage::getResourceModel('catalog/product_collection');

devient ce (getStoreId en option) ...

$featCat = Mage::getModel('catalog/category')->load($this->getCategory()); $collection = Mage::getResourceModel('catalog/product_collection')->setStoreId($this->getStoreId())->addCategoryFilter($featCat);

... Évidemment, vous devrez créer getter et setter comme 'setCategory', 'getCategory'

3

Enfin très simple ...

Utilisez le bloc de définition ci-dessous:

{{block type="catalog/product_new" name="home.catalog.product.new" alias="allCatalogNewProducts" category_id="5" template="catalog/product/new.phtml"}} 

Pour récupérer le category_id, vous devez modifiy la fonction _beforeToHtml de la nouvelle classe comme ceci:

fichier dans le répertoire \ app \ Code \ core \ Mage \ Catalog \ bloc \ produit \ New.php Préférez supplément ce fichier dans le chemin local

protected function _beforeToHtml() 
    { 
     $todayDate = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT); 

     $collection = Mage::getResourceModel('catalog/product_collection'); 
     $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds()); 

     $collection = $this->_addProductAttributesAndPrices($collection) 
      ->addStoreFilter() 
      ->addAttributeToFilter('news_from_date', array('date' => true, 'to' => $todayDate)) 
      ->addAttributeToFilter('news_to_date', array('or'=> array(
       0 => array('date' => true, 'from' => $todayDate), 
       1 => array('is' => new Zend_Db_Expr('null'))) 
      ), 'left') 
      ->addAttributeToSort('news_from_date', 'desc') 
      ->setPageSize($this->getProductsCount()) 
      ->setCurPage(1) 
     ; 

     if($categoryId=$this->getData('category_id')){ 
     $category = Mage::getModel('catalog/category')->load($categoryId); 
     $collection->addCategoryFilter($category); 
     } 


     $this->setProductCollection($collection); 

     return parent::_beforeToHtml(); 

Vous pouvez voir qu'un si elle a été ajoutée déclaration:

if($categoryId=$this->getData('category_id')){ 
    $category = Mage::getModel('catalog/category')->load($categoryId); 
    $collection->addCategoryFilter($category); 
    } 

Vous récupérez la category_id avec la fonction $ this-> getData ('category_id')

... Profitez

Questions connexes