Magento - 从静态块中解析小部件/ cms声明

时间:2012-12-05 06:48:36

标签: magento content-management-system

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

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

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

- 编辑 -

呃...第二天读完这篇文章,我当然措手不及。我怪我的女朋友。

更好的说法是......

考虑以下静态块:

<?php $block = Mage::getModel('cms/block')->setStoreId(Mage::app()->getStore()->getId())->load('my_static_block') ?>
<?php $content = $block->getContent() ?>

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

{{widget type="my/widget" template="my/template.phtml"}}

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

<?php foreach ($content->getWidgets() as $widget) : ?>
    <?php echo $widget->getValue() ?>
<?php endforeach; ?>

1 个答案:

答案 0 :(得分:0)

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

/**
 * 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);
}