首页 文章

如何在phtml中调用块而不是通过布局?

提问于
浏览
8

我已禁用wishlist块的布局:

<block type="catalog/product_view" name="product.info.addtoto" as="addtoto" template="catalog/product/view/addto.phtml"/>

我现在想在phtml中调用该块而不是将其添加到另一个布局 .

我该如何直接调用它?

4 回答

  • 3

    虽然Prattski是正确的,这是一种糟糕的形式(我正在这样做),有时候开发时,这是一个有 Value 的调试技术,或者它产生了几个小时的编程差异 . 本着这种精神,这是做这件事的坏习惯:

    <?php print $this->getLayout()
                     ->createBlock("catalog/product_view")
                     ->setTemplate("catalog/product/view/addto.phtml")
                     ->toHtml(); ?>
    

    如果有的话,请谨慎使用 .

  • 31
    echo  Mage::app()->getLayout()
            ->createBlock('somemodule/someblock')
            ->setSomeVariable($variable)
            ->setTemplate('somemodule/someblock.phtml')
            ->toHtml();
    

    这可以在任何地方用于调用块 . setSomeVariable($variable) 如果设置可以在 someblock.phtml 中通过 $this->getSomeVariable(); 进行访问

  • 3

    克里斯 - 你应该直接从模板中调用一个块 . 进入这将是一个坏习惯/做法 . 找到要添加块的模板的正确引用,并将其添加到布局xml中 . 然后从模板文件中,使用:

    echo $this->getChildHtml('your-block');
    
  • 12

    多年来我一直在努力解决这个问题,并且发现如果你想从布局的一个完全独立的部分调用一个块,你需要使用稍微不同的代码 . 使用:

    <?php echo $this->getBlockHtml('any_block'); ?>
    

    代替:

    <?php echo $this->getChildHtml('any_block'); ?>
    

    使用此代码,您可以在任何地方创建自己的块,也可以从其他模块中选择块并将它们放在任何位置 .

相关问题