създаване на основен здравей свят, който да се показва в заглавката на страницата на Magento

Просто навлизам в Magento и неща, които изглеждат доста интуитивни на повърхността, изглежда не работят според очакванията. Ето един много основен пример за шаблон, който се опитвам да накарам да работи на ниво „здравей свят“, преди да копая по-дълбоко.

В дефиницията на блок "header" в моето оформление page.xml имам включен следния блок:

<block type="core/text_list" name="helloRob" as="helloRob" template="page/html/hellorob.phtml" />

След това в моя файл header.phtml добавих...

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

Съдържанието на файла hellorob.phtml е:

<h1>Hello Rob</h1>

И все пак, когато показвам страницата, не получавам очаквания елемент H1 в заглавката. Ако премахна извикването "getChildHtml" и го заменя с действителния HTML, тогава той показва H1. Така че знам, че персонализираният ми файл header.phtml се зарежда. Също така успях да потвърдя, че добавям моя блок към правилния XML файл с оформление, защото когато коментирам друг блок в същия файл, коментираният блок вече не се показва на страницата ми.

Проверих кода, търсейки нещо очевидно, като печатна грешка. Проверих също за всякакви конфликти при именуване -- следователно "helloRob", а не "helloWorld".

Имам чувството, че пропускам нещо невероятно очевидно, като да търся очилата ти само за да ги намеря на върха на главата ти.

Всяка помощ -- с кода -- не моите очила -- ще бъде оценена!

--Грабя


person Rob Emenecker    schedule 30.10.2013    source източник


Отговори (1)


Проблемът тук е вашето разбиране за типовете блокове. Блоковете в Magento правят различни неща, този, който сте използвали тук core/text_list служи за конкретна цел. Можете да видите какво прави един блок, като погледнете неговия код Блок файл, core/text_list се намира в app/code/core/Mage/Core/Block/Text/List.php

 protected function _toHtml()
{
    $this->setText('');
    foreach ($this->getSortedChildren() as $name) {
        $block = $this->getLayout()->getBlock($name);
        if (!$block) {
            Mage::throwException(Mage::helper('core')->__('Invalid block: %s', $name));
        }
        $this->addText($block->toHtml());
    }
    return parent::_toHtml();
}

Както можете да видите, целта му е просто да отпечата дъщерни блокове. Този тип блок се използва за текстови менюта и като блокове само като контейнери за други блокове.

Тъй като търсите блок за просто отпечатване на съдържанието на шаблон, така че type="core/template" ще се справи добре, това е методът _toHtml()

 protected function _toHtml()
{
    if (!$this->getTemplate()) {
        return '';
    }
    $html = $this->renderView();
    return $html;
}
person Luke Collymore    schedule 30.10.2013
comment
Благодаря Люк! Откривам, че има много случаи на не знам какво не знам с Magento. Вие сте прав, разбирането ми за блокови ТИПОВЕ липсва, наред с много други аспекти на Magento. Крайната ми цел, за която въпросът ми беше отправна точка, беше да абстрахирам няколко реда код - включително блокови зареждания - в отделен отделен блок, който след това администраторът на сайта може по същество да включва/изключва чрез Custom Display XML на CMS страница. С вашата информация успях успешно да създам блока на средния слой в заглавката и да го накарам да се показва по предназначение на страниците на CMS. - person Rob Emenecker; 31.10.2013