首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magento -解析静态块中的widget/cms声明

问Magento -解析静态块中的widget/cms声明
EN

Stack Overflow用户
提问于 2012-12-05 14:48:36
回答 1查看 985关注 0票数 1

考虑一个加载静态块内容的标准Magento块。如果我想从该块中解析出任何小部件(或任何其他CMS声明),是否需要构造一个执行标准preg_match类型操作的方法来解析这些字符串,或者我是否可以使用内置方法来获取每个声明并将其添加到我自己的数组/对象中?

查看处理这些声明的正常解析的“widget/template_filter”类,我能找到的唯一有用的方法是Varien/Template.php中的protected _getIncludeParameters()方法。

现在已经很晚了,所以我想我明天会用更多的细节来更新这个问题。

-编辑--

呃..。第二天读了这篇文章,我肯定写得很糟糕。我怪我的女朋友。

更好的表达方式应该是...

考虑下面的静态块:

代码语言:javascript
复制
<?php $block = Mage::getModel('cms/block')->setStoreId(Mage::app()->getStore()->getId())->load('my_static_block') ?>
<?php $content = $block->getContent() ?>

$content将为我提供未解析的内容,其中的cms/widget声明仍然完好无损,例如:

代码语言:javascript
复制
{{widget type="my/widget" template="my/template.phtml"}}

现在,我只是想将这个声明转换回一个对象(或者更恰当地说,我将有几个{{widget}}声明放入一个数组中),这样我就可以检查参数值,执行其他工作,例如:

代码语言:javascript
复制
<?php foreach ($content->getWidgets() as $widget) : ?>
    <?php echo $widget->getValue() ?>
<?php endforeach; ?>
EN

回答 1

Stack Overflow用户

发布于 2013-07-26 21:17:31

这就是我用原始值或解析值加载块的方式:

代码语言:javascript
复制
/**
 * Implement function getStaticBlock().
 *
 * @return array
 */
public function getStaticBlock($blockName) {
    // get the content of the block
    $content=array();
    if (!empty($blockName)) $content=Mage::getModel('cms/block')
        ->load($blockName)
        ->getContent();

    return array($content);
}

/**
 * Implement function getRenderedBlock().
 *
 * @return array
 */
public function getRenderedBlock($blockName) {
    // get the content of the block
    $content=array();
    if (!empty($blockName)) $content=Mage::app()
        ->getLayout()
        ->createBlock('cms/block')
        ->setBlockId($blockName)
        ->toHtml();

    return array($content);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13717783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档