Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法从Magento产品集合中检索价格信息_Php_Magento_Magento 1.7 - Fatal编程技术网

Php 无法从Magento产品集合中检索价格信息

Php 无法从Magento产品集合中检索价格信息,php,magento,magento-1.7,Php,Magento,Magento 1.7,我试图以类似于list.phtml的网格格式的方式在任意页面上输出某个类别的产品 我有以下片段: $category = Mage::getModel('catalog/category'); $category->load(17); $_productCollection = $category->getProductCollection() ->addAttributeToSelect('name'); $_he

我试图以类似于list.phtml的网格格式的方式在任意页面上输出某个类别的产品

我有以下片段:

$category = Mage::getModel('catalog/category');
$category->load(17);
$_productCollection = $category->getProductCollection()
                               ->addAttributeToSelect('name');
$_helper = Mage::helper('catalog/output');
这为我提供了一个产品集合,然后我使用以下内容进行迭代:

foreach ($_productCollection as $_product): 

<!-- This works -->
<h2 class="product-name">
    <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>">
        <?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?>
    </a>
</h2>

<!-- This does not -->
<?php echo $this->getPriceHtml($_product, true) ?>

<!-- This just returns out of stock -->
<div class="actions">
    <?php if($_product->isSaleable()): ?>
        <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')">
            <span><span><?php echo $this->__('Add to Cart') ?></span></span>
        </button>
    <?php else: ?>
        <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
    <?php endif; ?>                                                    
</div>

endforeach;
foreach($\u产品集合作为$\u产品):

请在phtml文件中尝试下面的代码

$category = Mage::getModel('catalog/category')->load(3);
$_productCollection = $category->getProductCollection()->addAttributeToSelect('*'); 
$productBlock=$this->getLayout()->createBlock("catalog/product");
foreach($_productCollection  as $_product)
{
    //for get the price of product 
    if($_product->isSaleable()) //this will check if product is in stock
       echo $productBlock->getPriceHtml($_product,true);
}

因此,如果您想复制一些类似于基本Magento产品列表中的功能,那么您就走上了研究core的正确道路

  • price函数
    getPriceHtml
    是在抽象类
    Mage\u Catalog\u Block\u Product\u abstract
    中定义的方法。因此,要使用它,您需要从
    Mage\u Catalog\u block\u Product\u Abstract
    one扩展块
  • isSaleable
    返回false,因为您没有将某些属性加入到集合中
  • 如果你想遵循Magento的逻辑,以下是你应该如何实现你的目标

  • 创建自己的模块,或者只在
    local/Mage/Catalog/block/YourBlock.php
    中阻塞。此块应扩展
    Mage\u Catalog\u block\u Product\u Abstract
    。然后在此块中创建一个方法
    getCustomProductCollection()

  • 现在,在
    phtml
    文件中,您只需调用此方法:

    $productCollection = $this->getCustomProductCollection();
    
  • 代码的其余部分也可以工作

    $productBlock=$this->getLayout()->createBlock("catalog/product");
    echo $productBlock->getPriceHtml($_product,true);
    

    试试这个

    Dude你有没有在没有
    addAttributeToSelect
    方法的情况下试过。我认为ProductCollection提供了所有基本属性。如果没有,我恐怕你必须对你需要的每一个属性都做
    addAttributeToSelect
    。@SAM是的,试过了->addAttributeToSelect('price')/>addAttributeToSelect('inventory')/>addAttributeToSelect('saleable'),但它们只是暗中捅了一刀。也找不到引用这些调用的文档…有一件事您可以交叉检查。您的Phtml必须是
    catalog/product\u list
    类的实例&您必须使用
    $\u productCollection=$this->getLoadedProductCollection()图像目录、模型、产品列表的方法。如果这也不起作用,那么我建议您在本地模块中模拟一个类,如
    Mage\u Catalog\u Model\u Product\u list
    ,然后您可以根据需要定制收藏加载。这是我过去做过的事情。所以它必须起作用。希望它能帮上忙只是一个建议-你不应该在循环中加载产品,特别是如果你已经有了产品集合;您应该只将所需的数据包含到集合中;另外,从Magento的角度实例化块实例时,新的Mage_目录_块_产品
    也是错误的方法-Magento使用Factory模式创建模型、块和辅助对象objects@SlayerBirden谢谢,你能建议我如何包括定价数据吗?我的循环只是我主页上的
      from list.phtml中的标准代码。它必须存在于product collection list.phtml中,但我似乎无法在调用中重新创建相同的数据模型,以在代码顶部获取集合。@Slayer Birden..感谢您找出我的错误。我已经编辑了我的代码。嗨,这行得通。此解决方案是否存在@SlayerBirden指出的问题,即递归使用->createBlock(“目录/产品”)可能会有问题?感谢代码看起来不错,但是@RodgersandHammertime是正确的-最好只实例化一次块-在循环之外:
      $catalogBlock=$this->getLayout()->createBlock(“目录/产品”)
      ,然后在循环中使用它的方法
      $catalogBlock->getPriceHtml()
      感谢您发布此消息。我需要引用新创建的块吗?我已经创建了块并使其扩展了Mage\u Catalog\u block\u Product\u Abstract,但结果是相同的,当我对新创建的$productCollection执行var\u dump()时,它返回为null?
      $productBlock=$this->getLayout()->createBlock("catalog/product");
      echo $productBlock->getPriceHtml($_product,true);