【问题标题】:Magento: get a static block as html in a phtml fileMagento:在phtml文件中获取静态块作为html
【发布时间】:2011-01-12 12:14:55
【问题描述】:

我有一个名为newest_product(带有内容)的静态块,我想将它作为html 显示在.phtml 文件中。

我试过这段代码:

echo $this->getLayout()->createBlock('cms/block')->setBlockId('newest_product')->toHtml(); 

但这什么都没有显示。

我是否使用了错误的代码?

【问题讨论】:

  • 你刷新缓存了吗?代码接缝正确

标签: php magento


【解决方案1】:

如果您从管理面板创建了名为“block_identifier”的 CMS 块。 然后以下将是在 .phtml 中调用它们的代码

<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('block_identifier')->toHtml(); 
?> 

【讨论】:

  • 我比@Mcs 提到的更喜欢这种方法。使用布局通常很混乱
  • 也喜欢。并且比 Mage::getModel('cms/block') 方法更简单,也可以使用
  • @karantan 在 phtml 文件中设置 ID 基本上是将其硬编码在模板中。布局代表系统的配置部分,其中 id 预计将被使用。希望对您有所帮助。
【解决方案2】:

在布局中(app/design/frontend/your_theme/layout/default.xml):

<default>
    <cms_page> <!-- need to be redefined for your needs -->
        <reference name="content">
            <block type="cms/block" name="cms_newest_product" as="cms_newest_product">
                <action method="setBlockId"><block_id>newest_product</block_id></action>
            </block>
        </reference>
    </cms_page>
</default>

在您的 phtml 模板中:

<?php echo $this->getChildHtml('newest_product'); ?>

不要忘记缓存清理。

我觉得有帮助。

【讨论】:

  • 获取子 CMS 块标题的任何解决方法?我可以通过 php 获取标题,但我不知道如何获取布局 xml 加载的块的标题.. TIA
  • 不要忘记在布局主题中使用 local.xml 通常比覆盖单个 xml 文件更好。
  • "什么是 重新定义以适应我的需要???" - 这意味着您需要将此句柄更改为您正在使用的句柄。 devdocs.magento.com/guides/m1x/magefordev/mage-for-dev-4.html
  • 我相信你可以只使用'as'之后的值作为getChildHtml()的参数。不需要添加“" 行。
【解决方案3】:
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('my_static_block_name')->toHtml() ?>

并使用此链接了解更多信息 http://www.justwebdevelopment.com/blog/how-to-call-static-block-in-magento/

【讨论】:

    【解决方案4】:

    如果您想将 cmsblock 加载到您的模板/块文件/模型等中。您可以按照以下方式执行此操作。这将呈现 cmsblock 中的任何变量位置

    $block  = Mage::getModel('cms/block')
                ->setStoreId(Mage::app()->getStore()->getId())
                ->load('identifier');
    
    $var = array('variable' => 'value', 'other_variable' => 'other value');
    /* This will be {{var variable}} and {{var other_variable}} in your CMS block */
    
    $filterModel = Mage::getModel('cms/template_filter');
    $filterModel->setVariables($var);
    
    echo $filterModel->filter($block->getContent());
    

    【讨论】:

    • 这是从 .phtml 文件中显示您的块的唯一方法,包括 cms 块中的变量,而不使用 XML 和 getChildHtml()。谢谢。
    【解决方案5】:

    我认为这对你有用

    $block = Mage::getModel('cms/block')->setStoreId(Mage::app()->getStore()->getId())->load('newest_product');
    echo $block->getTitle();
    echo $block->getContent();
    

    它确实有效,但现在 CMS 块中的变量不再解析:(

    【讨论】:

    • 这是唯一对我有用的解决方案。非常感谢
    • 这不会将任何通过编辑器上传的图片放入 cms 块中
    【解决方案6】:

    当您在 Magento 中调用 CMS-Static Block 时,以下代码将起作用。

    <?php echo 
    
    $this->getLayout()->createBlock('cms/block')->setBlockId('block_identifier')->toHtml();
    
    ?>
    

    【讨论】:

    • 这与之前发布的答案相同。
    【解决方案7】:

    这应该可以正常工作。

    <?php
    $filter = new Mage_Widget_Model_Template_Filter();
    $_widget = $filter->filter('{{widget type="cms/widget_page_link" template="cms/widget/link/link_block.phtml" page_id="2"}}');
    echo $_widget;
    ?>
    

    【讨论】:

      【解决方案8】:

      当您从管理面板创建一个名为 block_identifier 的新 CMS 块时,您可以使用以下代码从您的 .phtml 文件中调用它:

      <?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('block_identifier')->toHtml(); 
      ?> 
      

      然后清除缓存并重新加载浏览器。

      【讨论】:

        猜你喜欢
        • 2014-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-21
        • 2016-09-19
        相关资源
        最近更新 更多