2014-07-07 3 views
3

Je ne peux pas obtenir l'attribut supplémentaire 'nom' de la collection de produits lorsque j'utilise l'itérateur de ressources.itérateur de collection Magento - impossible d'obtenir l'attribut supplémentaire

Ma collection de produits:

 $productCollection = Mage::getModel('catalog/product')->getCollection(); 
     $productCollection->addAttributeToSelect('name') 
     ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id=entity_id', null, 'left') 
     ->addAttributeToFilter('category_id', array('in' => $subCategories))->addAttributeToFilter('visibility', '4') 
     ->getSelect()->group('e.entity_id'); 

Iterator:

Mage::getSingleton('core/resource_iterator')->walk($productCollection->getSelect(), array(array($this, 'generateXml'))); 

fonction generateXml:

public function generateXml($args){ 
    var_dump($args['row']); 
... 

array(11) { 
    ["entity_id"]=> 
    string(5) "49335" 
    ["entity_type_id"]=> 
    string(1) "4" 
    ["attribute_set_id"]=> 
    string(2) "18" 
    ["type_id"]=> 
    string(6) "simple" 
    ["sku"]=> 
    NULL 
    ["has_options"]=> 
    string(1) "0" 
    ["required_options"]=> 
    string(1) "0" 
    ["created_at"]=> 
    string(19) "2014-05-28 19:18:49" 
    ["updated_at"]=> 
    string(19) "2014-05-28 19:20:21" 
    ["category_id"]=> 
    string(3) "236" 
    ["visibility"]=> 
    string(1) "4" 
} 

Merci à l'avance.

Répondre

8

Au lieu de cela:

(...) 
$productCollection->addAttributeToSelect('name') 
(...) 

devrait être:

(...) 
$productCollection->addAttributeToSelect(array('name'),'inner') 
(...) 
+0

Enfin je l'ai trouvé! Tous les exemples que j'ai trouvés jusqu'à présent suggèrent addAttributeToSelect ('name') ou addAttributeToSelect (array ('name')) qui ne fonctionnait pas du tout. L'ajout d'un type de jointure a résolu cela pour moi. Il faut probablement faire attention à ne pas ajouter trop de jointures de cette façon ou la performance peut prendre un coup sérieux :-) – Saustrup

+0

Note rapide: le second paramètre est $ jointype, et les valeurs valides semblent être fausses, "internes" ou "gauches" . – Saustrup

+1

Je suis content que ce morceau de code soit utile :) – Krzysztof

0

Je ne suis pas entièrement sûr de ce que vous cherchez à accomplir. Cependant, ci-dessous peut vous aider un peu. Même si je ne suis pas au courant de l'resource_interator cela peut aider

<?php 
// $this-> may not work depending upon block type. However this helper is what allows you to grab other necessary values  
$_helper = $this->helper('catalog/output'); 
$products = Mage::getModel('catalog/product') 
    ->getCollection() 
    // ->addCategoryFilter($category) If you have the category object you can filter by this 
    // I'm just using the below example to grab these three attribute values. 
    ->addAttributeToSelect(array('name', 'product_url', 'small_image')) 
    ->load(); 
?> 

      <!-- Display Each product's detailed info Granted this is not in an xml format. Which you can alter to your needs, but this should be a good base point I don't believe the resource --> 
     <?php foreach ($products as $product): ?> 
      <li> 
      <?php // Product Image ?> 
      <a href="<?php echo $product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($product, 'small_image'), null, true) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($product, 'small_image')->resize(135); ?>" width="135" height="135" alt="<?php echo $this->stripTags($this->getImageLabel($product, 'small_image'), null, true) ?>" /></a> 
      <?php // Product description ?> 
      <?php $_productNameStripped = $this->stripTags($product->getName(), null, true); ?> 

      <!-- Below is where the helper is needed for product name. --> 
      <h3 class="product-name"><a href="<?php echo $product->getProductUrl() ?>" title="<?php echo $productNameStripped; ?>"><?php echo $_helper->productAttribute($product, $product->getName() , 'name'); ?></a></h3> 
      </li> 
     <?php endforeach ; ?> 
+0

Un grand merci pour l'aide. J'éviterais d'utiliser cette solution car dans ce cas je travaille avec une grande collection. – Krzysztof

Questions connexes