加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

布局 – 在Magento之外加载Magento子html

发布时间:2020-12-14 18:51:57 所属栏目:资源 来源:网络整理
导读:我在Magento外面为我网站的某些部分加载Magento块.我可以用以下类似的东西成功地做到这一点. require_once $docRoot.'/app/Mage.php';umask(0);Mage::app('default');...$layout = Mage::getSingleton('core/layout');$block = $layout-createBlock('Mage_Pa
我在Magento外面为我网站的某些部分加载Magento块.我可以用以下类似的东西成功地做到这一点.
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();

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

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

解决方法

布局对象是块对象的集合.块以父/子树形式组织.

您的布局有一个块.您尚未添加任何子块.因此,当块的模板尝试使用getChildHtml呈现子项时,它无法找到一个,并且不会生成其他输出.

此外,默认情况下,topLinks阻止不会渲染任何内容.它需要添加链接.这通常通过其他layout.xml文件完成.

最后,通过调用启动渲染可能更好

echo $block_header->toHtml();

下面是一个示例,说明如何正确嵌套块,以及调用它们的操作方法,这样您就可以在正常的调度过程之外渲染块.它与您的不同之处在于我们创建了一个新的链接块,添加了一个链接,并将其添加到您的顶级块.

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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读