2011-04-26 60 views
8

我有一個心願單塊停用佈局:如何在phtml中調用塊而不是通過佈局?

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

我現在想調用該塊在PHTML,而不是將它添加到另一個佈局。

如何直接打電話給我?

回答

31

雖然Prattski是正確的,這是拙劣的形式(是我upvoting這樣),已經有開發時無論何時這一直是一個有價值的調試技術時代,或者它造成了幾個小時的編程差異。本着這種精神,這是不良習慣的做法:

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

謹慎使用,如果有的話。

3

Chris - 您應該永遠需要直接從模板中調用塊。這將是一個不好的習慣/練習。找到要添加塊的模板的正確引用,並將其添加到佈局xml中。然後從模板文件中,使用:

echo $this->getChildHtml('your-block'); 
12
echo Mage::app()->getLayout() 
     ->createBlock('somemodule/someblock') 
     ->setSomeVariable($variable) 
     ->setTemplate('somemodule/someblock.phtml') 
     ->toHtml(); 

這可以用於調用塊的任何地方。 setSomeVariable($variable)如果設置可以通過someblock.phtml$this->getSomeVariable();

+1

我怎麼可以添加「之後」或「之前」的功能來調用某些塊之前或之後的代碼塊中的塊。 – drsndodiya 2014-10-17 08:17:20

+0

抱歉沒有試過這個。但是在createBlock中,第三個參數是'array $ attribute'。你可以看看。 – 2015-06-15 09:24:31

2

來訪問我這個奮鬥了年齡和發現,如果你想從佈局的一個完全獨立的部分叫塊時,需要使用略有不同的代碼。用途:

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

相反的:

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

使用此代碼,你可以在任何地方創建自己的塊,或者從其他模塊塊,並把它們放在任何地方。

+0

請注意,需要在佈局中定義該塊。 – l00k 2016-06-03 10:48:53

相關問題