2010-09-11 83 views
3

好吧,所以我已經在我的CMS區域創建了靜態塊,我試圖將它們輸出到我自己構建的自定義主頁模板中。Magento createBlock方法不工作,顯示靜態塊數據

每一個文件,我可以找到輸出表示該塊如下

<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('my-block-identifier')->toHtml() ?> 

,對我沒有工作,所以後來我嘗試了另一種方式。 -

 <?php $block = Mage::getSingleton('core/layout')->createBlock('cms/block')->setBlockId('my-block-identifier'); 
     echo $block->toHtml(); 

所有引用這個的站點都告訴我使用實際塊標識符來獲取塊。因此,我決定手動查找我的cms_block表中的block_id,並查看是否使用block_id數字代替文字my-block-identifier名稱 - 並且它確實有效。所以我很困惑...任何人都可以告訴我如何通過實際標識符來獲取塊,或者通過標識符查找塊ID,以便我可以通過塊名來獲取塊?

任何幫助非常感謝。

+0

哪個magento版本? – silvo 2010-09-11 22:27:51

回答

0

在管理員中,當您編輯靜態塊的內容時,您會在頂部看到一個名爲「第二個標識符」的字段。複製該字段的值,並將其插入到代碼中。所以,如果你的格擋是在管理所謂contact-info,那麼你的代碼如下:

<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('contact-info')->toHtml() ?> 

在管理該標識符文本框中的值也什麼都會被保存到cms_block表,因爲你的工作出。

HTH, JD

+0

對,這就是我在上面發佈時所做的。問題是,setBlockId沒有按照我的意圖工作,它只會通過手動查找block_id字段引用塊,而不是管理部分中的命名塊。我認爲這與我首先在主頁cms頁面中引用Block的事實有關, {{block type =「core/template」template =「homepage/home.phtml」}} - 然後在那個.phtml im調用子塊。所以基本上我正在尋找一種解決方法,通過「標識符」(名稱)來查找block_id, – thrice801 2010-09-13 21:04:39

1

望着cms/block塊源,這些教程有誤導你,或者你誤解他們。

#File: app/code/core/Mage/Cms/Block/Block.php 
class Mage_Cms_Block_Block extends Mage_Core_Block_Abstract 
{ 
    protected function _toHtml() 
    { 
     if (!$this->_beforeToHtml()) { 
      return ''; 
     } 
     $html = ''; 
     if ($blockId = $this->getBlockId()) { 
      $block = Mage::getModel('cms/block') 
       ->setStoreId(Mage::app()->getStore()->getId()) 
       ->load($blockId); 
      if (!$block->getIsActive()) { 
       $html = ''; 
      } else { 
       $content = $block->getContent(); 

       $processor = Mage::getModel('core/email_template_filter'); 
       $html = $processor->filter($content); 
      } 
     } 
     return $html; 
    } 
} 

塊內容始終裝載->load($blockId); - load帶有一個參數總是是指由數據庫ID裝載儀。

因此,如果沒有支持的方法來構建塊,您需要查找塊ID。

$model = Mage::getModel('cms/block')->getCollection() 
->addFieldToFilter('identifier','footer_links') 
->getFirstItem(); 

var_dump($model->getBlockId());