1

静的ブロックのコンテンツを読み込む標準の Magento ブロックを考えてみましょう。そのブロックからウィジェット (またはその他の CMS 宣言) を解析したい場合、これらの文字列を解析するために標準の preg_match タイプの操作を行うメソッドを構築する必要がありますか、それともビルド済みを使用できますか? -各宣言を取得して自分の配列/オブジェクトに追加するメソッドで?

これらの宣言の通常の解析を処理する「widget/template_filter」クラスを見ると、Varien/Template.php の保護された _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; ?>
4

1 に答える 1

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);
}
于 2013-07-26T13:17:30.523 に答える