【问题标题】:How to create a child block programmatically?如何以编程方式创建子块?
【发布时间】:2012-08-08 02:46:03
【问题描述】:

我有一个页面,其中包含一些以编程方式包含的模板块,如下所示:

public function indexAction() {
    $this->loadLayout();
    $block = $this->getLayout()
        ->createBlock('core/template')
        ->setTemplate('somefolder/sometemplate.phtml');
    
    $this->getLayout()->getBlock('content')->append($block);
    $this->renderLayout();

}

我想在 sometemplate.phtml 里面放 $this->getChildHtml('somechild') 来插入另一个块。

我试过了

$box = $this->getLayout()
->createBlock('page/html')
->setTemplate('somefolder/somechild.phtml');
$block->append($box);

但它没有用。我该怎么做?

【问题讨论】:

    标签: magento


    【解决方案1】:

    我使用 setChild 方法解决了这个问题,如下:

    $block->setChild('somealias',$childBlock);
    

    所以我可以使用

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

    【讨论】:

    • 如果我已经从 $childBlock 添加了别名。 setChild的第一个参数怎么办?
    • 指定一个不同的别名?
    • 嗨@RicardoMartins,在这个例子中,somealias 也是你使用的 phtml 文件名?
    • 嗨@SagarPPanchal。没有。模板 phtml 是在 xml 或块类 (php) 中指定的。
    【解决方案2】:

    补充里卡多·马丁斯的答案
    如果您直接在一个块中需要它,您可以按照产品价格执行操作

    Mage_Catalog_Block_Product:

    public function getPriceHtml($product)
    {
        $this->setTemplate('catalog/product/price.phtml');
        $this->setProduct($product);
        return $this->toHtml();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多