【问题标题】:magento template xml: add a static block to the product description of all products in specific categorymagento模板xml:在特定类别中的所有产品的产品描述中添加一个静态块
【发布时间】:2015-06-13 01:54:55
【问题描述】:

使用 Magento 1.4.1.1 或 1.5.0.0 并给定与特定类别关联的产品,我需要在单个视图中将静态块附加到产品描述。

我可以创建静态块(测量图像)并在 local.xml 中添加简单的附加代码。但是,我不知道如何将附加的应用限制在某些类别的产品上

EG:所有鞋类产品单视图页面(当然是鞋类)都应显示鞋码测量图像、裙子、裙子尺寸测量图像等。

我真的不想覆盖模板...只是想附加一个块!

【问题讨论】:

    标签: xml templates magento


    【解决方案1】:

    创建一个继承自cms/block 的自定义块类型(您可以将其命名为Somemodule_Categorical_Cms_Block,或选择一个不那么糟糕的名称)。在该块类中,实现如下内容:

    protected function _toHtml()
    {
        if(!$this->isEnabledForCategory()) {
            return "";
        }
        return parent::_toHtml();
    }
    

    实现您自己的isEnabledForCategory 以检查类别。更改您的 local.xml 声明以调用您的新块类,您应该可以开始了。

    希望有帮助!

    谢谢, 乔

    【讨论】:

    • 这不是我的想法,但它会很好地完成我的所有目的。谢谢!
    • 虽然我想知道为什么您认为下面的模板更改是一个更好的答案?我想对我来说它们差不多是平等的,除了你的允许我将所有内容保存在 layout.xml 和一个额外的块中......据我所知,这在 magento 的模块化模板系统的想法中更强大。
    • 我通常对覆盖块持谨慎态度,尽管从技术上讲,您可以在不完全覆盖的情况下做到这一点。这可能是一个更细微的问题,具体取决于您将来会在此处进行多少自定义...
    • IMO magento... 因为无论如何他们都有 100 万英里的 xml... 应该已经有一种方法来检查在 xml 中引用该实体时影响任何实体的属性、类别或任何值配置。 Magento 的 xml 配置在方法上与 TYPO3 的打字稿相似......但与打字稿或 javascript 中的 DOM 不同,magento 的 xml 配置似乎几乎无法访问相关的环境变量。我的意思是,您可以从周日开始以六种方式过滤...但是一旦您获得了集合,布局就无法知道这些过滤器(AFAIK)...它搞砸了。
    【解决方案2】:

    如果您可以假设产品只属于一个类别,那么您可以像这样签入模板文件:

    $product = Mage::registry('current_product');
    $category = $product->getCategory(); // get first category only
    if ($category->getUrlKey() == 'shoes'):
        // Output show size measurements
    elseif ($category->getUrlKey() == 'skirts'):
        // Output skirt measurements
    endif;
    

    这里我使用了getUrlKey,因为它提供了您在管理员中输入的文本,因此易于管理。

    更复杂的方法是使用每个产品的“设计”选项卡中的“自定义布局更新”字段来直接放入 XML,但这需要更多的工作。

    【讨论】:

    • 当我阅读这个问题时,它是一个 CMS 块,所以这里没有模板。但是,如果您认为有模板是正确的,那么这比覆盖块要好得多。
    • 你是对的,CMS 块是有意的。但是,我将“静态”读作不会改变的东西,例如主题文件,而我认为托管内容是动态的,它取决于读取数据库并且可以在您不期望时更改。再说一次,这只是我的奇怪看法。
    • magento 是......让我们说,用最温和的术语来说,我不太喜欢 magento。模板系统如此复杂以至于无法使用。无论如何,有一种方法可以在模板系统 xml 中进行类似 javascript 的追加。如果执行得好,它实际上是一个很酷的想法。我的问题是,“我如何告诉附加只发生在类别 [x] 的产品上?”我认为有一种方法可以做到这一点,但上面的答案基本上是告诉我,“你必须覆盖实际的模板文件......”这可能意味着每 4 个月左右会有一个更邪恶的更新场景。跨度>
    【解决方案3】:

    我需要做这样的事情,我想出了这个:
    1- 创建一个名为“category1_size_guide”的静态块
    2-只要我的主题使用:
    "\app\design\frontend\theme_designer\theme_name\template\page\2columns-right.phtml"
    对于展示产品,我添加了以下代码:

    $product = Mage::registry('current_product');
    $catIds = ($product)?$product->getCategoryIds():array(); //print_r($catIds);
    if(in_array(60, $catIds)){ //60 is category id you want to check
        echo $this->getLayout()->createBlock('cms/block')->setBlockId('category1_size_guide')->toHTML();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多