До этого момента я довольно успешно следовал этому руководству.
вот код, с которым я работаю:
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>
Итак, на основании ваших комментариев выше, это звучит как 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 не может загрузить его по некоторым причинам. Надеюсь, вышесказанное поможет вам выбрать верный путь. Не стесняйтесь связаться через службу поддержки если вам нужна дополнительная помощь
Других решений пока нет …