gpt4 book ai didi

layout - 在 Magento 之外加载 Magento 子 html

转载 作者:行者123 更新时间:2023-12-02 10:00:50 25 4
gpt4 key购买 nike

我正在 Magento 之外加载我网站的某些部分的 Magento block 。我可以使用类似以下内容成功地完成此操作。

require_once $docRoot.'/app/Mage.php';
umask(0);
Mage::app('default');
...

$layout = Mage::getSingleton('core/layout');
$block = $layout->createBlock('Mage_Page_Block_Html_Header');
$block->setTemplate('page/html/header.phtml');
echo $block->renderView();

问题是,如果我正在渲染的 block 有子 block (html),它们不会包含在输出中。在上面的示例中,文件 header.phtml 包含以下对输出中缺少的子 html 的调用。

...
<?php echo $this->getChildHtml('topLinks') ?>
...

最佳答案

布局对象是 block 对象的集合。这些 block 以父/子树形式组织。

您的布局只有一个 block 。您尚未向其中添加任何子 block 。因此,当您的 block 的模板尝试使用 getChildHtml 渲染子级时,它找不到子级,并且不会生成任何其他输出。

此外,默认情况下,topLinks block 不会呈现任何内容。它需要添加链接。这通常是通过其他layout.xml 文件完成的。

最后,最好通过调用

来开始渲染
echo $block_header->toHtml();

下面是如何正确嵌套 block 以及调用其操作方法的示例,以便您能够在正常调度过程之外渲染 block 。它与您的不同之处在于,我们创建一个新的链接 block ,向其添加链接,然后将其添加到您的顶级 block 。

require_once 'app/Mage.php';
umask(0);
Mage::app('default');

$layout = Mage::getSingleton('core/layout');

$block_header = $layout->createBlock('page/html_header')->setTemplate('page/html/header.phtml');

// <block type="" name="top.links" as="topLinks"/>
$block_links = $layout->createBlock('page/template_links','top.links')->setTemplate('page/template/links.phtml');
$block_header->setChild('topLinks',$block_links);

//<reference name="top.links">
// <action method="addLink" translate="label title" module="customer"><label>My Account</label><url helper="customer/getAccountUrl"/><title>My Account</title><prepare/><urlParams/><position>10</position></action>
//</reference>
$block_links->addLink('My Account','foo/baz/bar/','My Account','','',10);

echo $block_header->toHtml();

关于layout - 在 Magento 之外加载 Magento 子 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4577620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com