Magento: несколько пользовательских блоков выводят один и тот же код! - PullRequest
0 голосов
/ 25 января 2010

У меня есть пользовательский модуль, который имеет несколько блоков. Если я включу эти блоки в страницу CMS друг за другом, они будут работать как положено. Если я включу их в файлы XML макета, все они отображают исходный код последнего из этих XML-файлов. Далее следует минимальный тестовый пример (который для меня демонстрирует такое поведение), а также ожидаемые и фактические результаты.

код

/ приложение / и т.д. / модули / Test_Tester.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Test_Tester>
            <active>true</active>
            <codePool>local</codePool>
        </Test_Tester>
    </modules>
</config>

/ приложение / код / ​​местные / Test / Tester / и т.д. / config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Test_Tester>
            <version>0.1.0</version>
        </Test_Tester>
    </modules>
    <global>
        <blocks>
            <test_tester>
                <class>Test_Tester_Block</class>
            </test_tester>
        </blocks>
    </global>
</config>

/ приложение / код / ​​местные / Test / Tester / Block / One.php

<?php
class Test_Tester_Block_One extends Mage_Catalog_Block_Product_List_Upsell
{
    protected function _prepareData()
    {
echo 'One.php';

//...MORE code here, it's not really relevant though
    }
}

/ приложение / код / ​​местные / Test / Tester / Block / Two.php

<?php
class Test_Tester_Block_Two extends Mage_Catalog_Block_Product_List_Upsell
{
    protected function _prepareData()
    {
echo 'Two.php';

//...MORE code here, it's not really relevant though
    }
}

/ app / design / frontend / INTERFACE / TEMPLATE / layout / page.xml (под

..
<block type="core/text_list" name="testa" as="testa" />
<block type="core/text_list" name="testb" as="testb" />
..

/ app / design / frontend / INTERFACE / TEMPLATE / layout / cms.xml (под

<reference name="testa">
  <block type="test_tester/one" template="tester/one.phtml"/>
</reference>
<reference name="testb">
  <block type="test_tester/two" template="tester/two.phtml"/>
</reference>

/ приложение / дизайн / интерфейс / ИНТЕРФЕЙС / ШАБЛОН / шаблон / страницы / home_template.phtml

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

/ приложение / дизайн / интерфейс / ИНТЕРФЕЙС / ШАБЛОН / тестер / one.phtml

one.phtml

/ приложение / дизайн / интерфейс / ИНТЕРФЕЙС / ШАБЛОН / тестер / two.phtml

two.phtml

Ожидаемое

Это должно распечатать (на главной странице, где блоки включены):

One.php
one.phtml
Two.php
two.phtml

Фактический объем производства

Если я включу блоки в CMS-страницу домашней страницы, например:

{{block type="test_tester/one" template="tester/one.phtml"}}
{{block type="test_tester/two" template="tester/two.phtml"}}

... Я получаю ожидаемый результат. Однако, используя макет, как указано выше в примере кода, я получаю:

Two.php
two.phtml
Two.php
two.phtml

Я думаю, что сошел с ума - я не вижу, что я испортил.

1 Ответ

1 голос
/ 25 января 2010

Попробуйте указать имена блоков на домашней странице CMS. Подобные ошибки, которые я получил, были решены таким образом. Я вижу, что вы пытаетесь обернуть блоки в текстовые списки, но из того, что я вижу, вы никогда не идентифицируете блоки внутри страницы CMS. Попробуйте что-нибудь на этот счет вместо:

{{block type="test_tester/one" template="tester/one.phtml" name="testa"}}
{{block type="test_tester/two" template="tester/two.phtml" name="testb"}}

Если вы не можете отойти от родительских блоков как контейнеров, возможно, вам придется переосмыслить часть вашего макета. Если это не поможет, дайте мне знать, и мы попробуем что-нибудь еще. Надеюсь, это поможет.

Спасибо, Джо

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