Magento - 当php BodyClass =='what'时调用静态块

时间:2010-11-04 18:09:48

标签: php magento

在我的2col-inside.phtml文件中,我可以使用以下方法成功调用块: <?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('blue-banner')->toHtml() ?>

但是我想基于URI或body类提供一个独特的横幅。所以像:

<?php if($bodyClass['category-blue']): ?>  
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('blue-banner')->toHtml() ?>
<?php elseif($bodyClass['category-red']): ?>  
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('red-banner')->toHtml() ?> 
<?php else($bodyClass['category-yellow']): ?>  
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('yellow-banner')->toHtml() ?>  
<?php endif;?>

将BlockId设置为页面url也会起作用(我只需返回并重命名所有块以与页面url完全匹配),但我不知道如何提取JUST页面url。

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

您甚至不需要执行任何开发来在特定类别页面或任何基于cms或布局的页面上显示静态块。使用Magento的Widgets功能。

  1. 转到“CMS - &gt;小部件”

  2. 按“添加新窗口小部件实例”按钮

  3. 选择窗口小部件类型(在您的情况下是“CMS静态块”)和应显示的主题。按“继续”按钮。

  4. 输入“Widget Instance Title”并选择应显示的商店。

  5. 按“添加布局更新”按钮并选择小部件“显示在”设置(类别,产品,CMS页面,结帐页面等),然后选择要显示的页面部分。

  6. 转到“窗口小部件选项”标签,然后选择要显示的静态块。

  7. 希望它能在没有任何开发的情况下帮助您解决问题:)

答案 1 :(得分:0)

不漂亮,但如果您将静态块命名为与页面名称相同,则此方法有效:

<?php   $_base_url = $this->helper('core/url')->getHomeUrl();
        $class = str_replace($_base_url, '', $this->helper('core/url')->getCurrentUrl());
        $pagetitle = str_replace('.html', '', $class);
        $page = str_replace('industries/', '', $pagetitle);
?>
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId($page)->toHtml() ?>

答案 2 :(得分:0)

app/design/frontend/default/<theme>/catalog/catalog/category/view.phtml

中尝试此操作
$cat_name = $this->getCurrentCategory()->getName();
$block_name = $cat_name.'-banner';  
echo $this->getLayout()->createBlock('cms/block')->setBlockId($block_name)->toHtml();

在那里抛出一些if语句来检查空值,你应该离开。

干杯, JD

答案 3 :(得分:0)

2col-inside.phtml中添加您想要横幅的地方。

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

这是安全的,因为如果banner_id不存在,则不会回显任何内容。

对于您想要横幅编辑的每个类别,它都是“自定义布局更新”框以包含以下内容...

<reference name="content">
    <block type="cms/block" name="banner_block">
        <action method="setBlockId"><block_id>blue_banner</block_id></action>
    </block>
</reference>

...根据需要更改block_id。在产品和CMS页面上也可以这样做。如果页面未使用2cols-inside.phtml模板,则不会发生任何变化。