【问题标题】:Magento - List a product collection without the foreachMagento - 列出没有 foreach 的产品集合
【发布时间】:2014-02-05 01:04:36
【问题描述】:

我有一个包含 6 个产品的产品集合。我需要在没有 foreach 的情况下列出这些产品,因为每个产品都有不同的布局结构。 如何在 foreach 之外调用每个产品?

我的代码是:

<?php

  $produtos = array(1115,1105,1019,1017,1013,1011);
  $_productCollection=$this->getLoadedProductCollection();
  $_productCollection = clone $this->getLoadedProductCollection();
  $_productCollection->clear()
                     ->addIdFilter($produtos)
                     ->load();
  $_helper = $this->helper('catalog/output');
?>

变量 $produtos 是一个包含我想要在集合中的产品 ID 的数组

然后,我需要为每个产品属性设置变量。我是这样做的:

<?php foreach ($_productCollection as $_product): ?>
    <?php 
        if($_product->getId() == $produtos[0]){
            $productName1 = $_helper->productAttribute($_product, $_product->getName(), 'name'); 
            $productImage1 = '<img border="0" src=".'echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(143,215);'." />';
            $precoCru1 = $_product->getFinalPrice(); $productPrice1 = Mage::helper('core')->currency($precoCru1, true, false);
            $productUrl1 = $_product->getProductUrl();
        }

        elseif($_product->getId() == $produtos[1]){
            $productName2 = $_helper->productAttribute($_product, $_product->getName(), 'name'); 
            $productImage2 = '<img border="0" src=".'echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(143,215);'." />';
            $precoCru2 = $_product->getFinalPrice(); $productPrice1 = Mage::helper('core')->currency($precoCru1, true, false);
            $productUrl2 = $_product->getProductUrl();                      
        }
    ?>                  
<?php endforeach; ?>

产品名称、网址和价格有效,但图片无效。当我回显每个产品图片时,它给了我相同的 URL

【问题讨论】:

    标签: magento collections product


    【解决方案1】:

    你不能完全避免foreach,因为这不是编程的工作方式,但试试看

    $array = array();
    $c=1;
    foreach($product_collection as $product)
    {
        $array['product_'.$c] = $product;
        $c++;
    }
    

    您将能够参考每个单独的产品

    var_dump($array['product_1']->getData());
    var_dump($array['product_2']->getData());
    

    如果你真的想迷惑下一个程序员,试试上面的代码,然后再这样做

    extract($array);
    var_dump($product_1->getData());
    

    extract 函数会将数组的每个键导出为 PHP 变量。

    【讨论】:

    • 艾伦,感谢您的回答,但我无法做到。我用更多信息编辑了我的问题。你能再帮我一次吗?
    • @Paulo 阅读答案。这个想法是你运行 for each 循环并加载一个包含产品的数组。然后,在循环之外,您可以按编号单独引用它们。
    • 艾伦,我阅读了您的回答,但我不明白如何调用产品图片并调整其大小。请给我这个例子好吗?
    【解决方案2】:

    您可以尝试获取项目,然后将它们用作常规数组并通过它们的索引引用元素:

    $items = $collection->getItems();
    $first = $items[0];
    $second = $items[1];
    

    或者如果您只需要第一个:

    $first = $collection->getFirstItem();
    

    看看 lib/Varien/Data/Collection.php

    【讨论】:

    • 如何调用产品图片并调整其大小?
    • @Paulo 尝试使用缩略图而不是 small_image,您的产品可能没有 small_image。所以这将是 $src = Mage::helper('catalog/image')->init($_product, 'thumbnail')->resize(143,215);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    相关资源
    最近更新 更多