Застрял в No_Frills_Magento_layout разделе 2.4

До этого момента я довольно успешно следовал этому руководству.
вот код, с которым я работаю:

public function complexAction()
{
$layout= Mage::getSingleton('core/layout');
$path = Mage::getModuleDir('', 'Nofrills_Booklayout') . DS . 'page-layouts' . DS . 'complex.xml';
$xml = simplexml_load_file($path, Mage::getConfig()->getModelClassName('core/layout_element'));
$layout->setXml($xml);
$layout->generateBlocks();
echo $layout->setDirectOutput(true)->getOutput();
}
}

После загрузки соответствующего URL я получаю только белый экран.
Я var_dumped $ path и $ Xml, и оба, кажется, отображают правильную информацию. но когда я делаю то же самое с:

$layout->setDirectOutput(true)->getOutput();

Я получил:

string(0) ""

Любой совет будет полезен.

оригинальный код из complex.xml

<layout>
<block type="nofrills_booklayout/template" name="root" template="simple-page/2col.phtml" output="toHtml">
<block type="nofrills_booklayout/template" name="additional_head" template="simple-page/head.phtml" />

<block type="nofrills_booklayout/template" name="sidebar">
<action method="setTemplate"><template>simple-page/sidebar.phtml</template></action>
</block>

<block type="core/text_list" name="content" />
</block>
</layout>

1

Решение

Итак, на основании ваших комментариев выше, это звучит как getOutput возвращает пустую строку и то, что пустой белый экран не является скрытой ошибкой PHP, это результат того, что Magento / PHP ничего не рендерит для макета.

Первый шаг отладки: убедитесь, что вы загружаете complex.xml ты так думаешь. Следующее должно повторить содержимое файла

header('Content-Type: text/plain'); //tell the browser not to render HTML
echo $xml->asXml();
echo "\nDone\n";

Предполагая, что вы видите тот же XML, что и в файле, перейдите к следующим шагам.

Следующий макет XML (в complex.xml)

<layout>
<block type="nofrills_booklayout/template" name="root" template="simple-page/2col.phtml" output="toHtml">
<block type="nofrills_booklayout/template" name="additional_head" template="simple-page/head.phtml" />

<block type="nofrills_booklayout/template" name="sidebar">
<action method="setTemplate"><template>simple-page/sidebar.phtml</template></action>
</block>

<block type="core/text_list" name="content" />
</block>
</layout>

должен

  • Создать nofrills_booklayout/template блок
  • Установите шаблон этого блока в simple-page/2col.phtml
  • Визуализируйте этот шаблон simple-page/2col.phtml

simple-page/2col.phtml шаблон содержит следующее

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title></title>
<?php echo $this->getChildhtml('additional_head'); ?>
</head>
<body>
<?php echo $this->getChildhtml('sidebar'); ?>
<section>
<?php echo $this->getChildhtml('content'); ?>
</section>
</body>
</html>

Итак, поскольку ваш код отображает пустую строку вместо пустой страницы со скелетом HTML, это говорит мне, что Magento / PHP никогда не доберется до 2col.phtml, я мог бы

  • Убедитесь, что для параметра «Разрешить символические ссылки» в бэкэнде установлено значение «да». Несмотря на ярлык, эта функция на самом деле означает «не позволяйте людям рендерить файлы phtml вне app/designи модули No Frills немного возятся с этим, так что вам не нужно беспокоиться о app/design пока ты не готов. Вы получили это далеко в книге, так что я не думаю, что это проблема, но стоит проверить

  • Убедитесь, что ваш текущий код модуля имеет simple-page/2col.phtml

  • Попробуйте создать блок шаблона непосредственно в PHP — это работает?

.

$block = Mage::getSingleton('core/layout')
->createBlock('nofrills_booklayout/template')
->setTemplate('simple-page/2col.phtml');

var_dump($block->toHtml());

Мое предположение твое simple-page/2col.phtml отсутствует или PHP не может загрузить его по некоторым причинам. Надеюсь, вышесказанное поможет вам выбрать верный путь. Не стесняйтесь связаться через службу поддержки если вам нужна дополнительная помощь

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]