【问题标题】:Magento display products list outside magentoMagento 显示除 magento 之外的产品列表
【发布时间】:2014-04-28 07:33:45
【问题描述】:

您好,我正在尝试在框架外的静态页面中嵌入一些 magento 函数。 一切正常,除非我尝试使用 magento 标准输出作为产品列表。

正如我之前所说,我想将 Mage_Catalog_Block_Product_List 与 catalog/product/list.phtml 中的模板一起使用。

代码是:

require_once ('app/Mage.php');
umask(0);
Mage::app('default');
Mage::getSingleton('core/session', array('name' => 'frontend'));
$session = Mage::getSingleton('customer/session', array('name'=>'frontend'));
$layout = Mage::app('default')->setCurrentStore( Mage::app()->getStore()->getId() )
->getLayout();
$layout->getUpdate()
->addHandle('default')
->load();
$layout->generateXml()->generateBlocks();
$head=$layout->getBlock('head');
echo $head->toHtml();

<!-- NOW THE LIST BLOCK -->

$categoryid = 3;
$category = new Mage_Catalog_Model_Category();
$category->load($categoryid);
$_productCollection = $category->getProductCollection();
$_productCollection->addAttributeToSelect('*');

$toolbar=new Mage_Catalog_Block_Product_List_Toolbar();
$toolbar->setCollection($_productCollection);
$list_block=new Mage_Catalog_Block_Product_List();
$list_block->setChild('toolbar', $toolbar);
$list_block->setCollection($_productCollection);



?>
<pre><?php echo $list_block->toHtml();?></pre>

我有这个错误:

Fatal error: Call to a member function createBlock() on a non-object in /webprod/sites/private/html/app/code/core/Mage/Catalog/Block/Product/List.php on line 183

你能帮帮我吗? 谢谢。

【问题讨论】:

    标签: php magento magento-1.8


    【解决方案1】:

    出现错误是因为您正在使用new 创建Mage_Catalog_Block_Product_List 类的实例。您应该使用createBlock 方法,因为那里发生了一些其他事情。此外,我认为您不需要创建 Mage_Catalog_Block_Product_List_Toolbar 块的实例。这应该自动发生(在您收到错误的同一行)。

    当您这样做时,也不要像那样创建类别模型的实例。使用Mage::getModel()
    而且我认为在列表块上调用setCollection 是行不通的。尝试设置类别 ID。 所以你的代码应该变成:

    require_once ('app/Mage.php');
    umask(0);
    Mage::app('default');
    Mage::getSingleton('core/session', array('name' => 'frontend'));
    $session = Mage::getSingleton('customer/session', array('name'=>'frontend'));
    $layout = Mage::app('default')->setCurrentStore( Mage::app()->getStore()->getId() )
    ->getLayout();
    $layout->getUpdate()
    ->addHandle('default')
    ->load();
    $layout->generateXml()->generateBlocks();
    $head=$layout->getBlock('head');
    echo $head->toHtml();
    
    <!-- NOW THE LIST BLOCK -->
    
    $categoryid = 3;
    $category = Mage::getModel('catalog/category');
    $category->load($categoryid);
    
    $list_block= Mage::app()->getLayout()->createBlock('catalog/product_list');
    $list_block->setCategoryId($categoryid)->setTemplate('catalog/product/list.phtml');
    
    ?>
    <pre><?php echo $list_block->toHtml();?></pre>
    

    【讨论】:

    • 感谢您的回复,
    • 我没有收到错误消息,但无论如何我都无法显示产品。也许 ->toHtml() 它不能以这种方式工作。我应该使用 renderView() 吗?谢谢
    • 嗯...奇怪。 toHtml 应该可以正常工作。我已经编辑了答案并在块中添加了一个模板。也许就是这样。
    • 工作完美 :) 它缺少模板。!
    • @Marius 你能试着回答这个问题吗stackoverflow.com/questions/23334738/… 真的很有帮助
    【解决方案2】:
    <?php
        require_once('app/Mage.php'); //Path to Magento
    umask(0);
    Mage::app('default');
    Mage::getSingleton('core/session', array('name' => 'frontend'));
    
        $cat_id = 56;
            $category = Mage::getModel('catalog/category')->load($cat_id);
            $collection = $category->getProductCollection()->addAttributeToSort('position');
            //$catcount = $collection->count();
            Mage::getModel('catalog/layer')->prepareProductCollection($collection);
    foreach ($collection as $product) {
    echo $product->getName();
    echo $product->getPrice();
    echo Mage::helper('catalog/image')->init($product, 'thumbnail')->resize(260);
    echo $product->getProductUrl();
    ?>
    
    Please use that code working fine.
    

    【讨论】:

      猜你喜欢
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多