Magento метод createBlock не работает, отображаются данные статического блока - PullRequest
3 голосов
/ 12 сентября 2010

Хорошо, поэтому я создал статические блоки в своей области CMS, и я пытаюсь вывести их внутри собственного шаблона домашней страницы, который я построил.

Каждый документ, который я могу найти, говорит, что выводить блок следующим образом

    <?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();

Все сайты, ссылающиеся на это, говорят мне, чтобы использовать фактический идентификатор блока, чтобы получить блок.Итак, я решил вручную поискать block_id в моей таблице cms_block и посмотреть, сработает ли использование номера block_id вместо буквального имени my-block-identifier - и это сработало.Так что я в замешательстве ... Может кто-нибудь сказать мне, как я могу получить блок по фактическому идентификатору, или посмотреть идентификатор блока по идентификатору, чтобы я мог получить блок по имени блока?

Любая помощьвысоко ценится.

Ответы [ 2 ]

1 голос
/ 12 февраля 2014

Глядя на источник блока 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, при этом один параметр всегда означает кодирование по идентификатору базы данных.

Таким образом, без поддерживаемого способа сделать это встроенным в блок, вам нужно найти идентификатор блока.

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

var_dump($model->getBlockId()); 
0 голосов
/ 12 сентября 2010

В админке, когда вы редактируете содержимое статического блока, вы увидите поле с именем Идентификатор, второе сверху.Скопируйте значение этого поля и вставьте его в свой код.Так что если ваш блок называется contact-info в админке, то ваш код будет выглядеть так:

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

Значение в этом текстовом поле идентификатора в админке также будет сохранено в таблице cms_block, как ты разобрался.

HTH, JD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...