如何在每个产品名称下的Magento目录页面上添加自定义内容?

时间:2015-11-10 07:53:59

标签: magento magento-1.9 magento-layout-xml

我创建了一个自定义模块,可以为每个产品附加一些信息。现在,我想在产品名称下的目录页面上显示自定义信息。

这是快照,向您展示我想要做的事情。

Catalog page

这是我的布局xml

<?xml version="1.0"?>
<!--
/**
 * Custom module

 */
-->
<layout>
    <catalog_category_default translate="label">   
        <reference name="name.after">
            <block type="catalog/product_list" name="custom_content" template="custommodule/default.phtml"/>
        </reference>              
    </catalog_category_default>
</layout>

但这不起作用。是否可以在产品名称下呈现自定义内容而无需修改任何.phtml文件?

非常感谢!

2 个答案:

答案 0 :(得分:0)

我知道这是一个快速而肮脏的黑客,更加勤奋的magento开发人员会嘲笑,但它会给你你想要的结果,并且很容易让你恭维

“正确”的解决方案可能涉及编写自定义块并在app / design / frontend / YourPackage / YourTheme / template / product / list.phtml的foreach循环中调用它 - 但是,我可以快速为您提供肮脏的hackaround不应该对你征税过多。您可以通过滥用产品属性系统来轻松完成。

首先在产品使用的属性集中创建新的产品属性。 我们将使用它来存储我们想要在您的产品名称和价格之间注入的自定义内容。为了这个例子,我们将其称为customcontent。确保将“前端产品视图页面”上的属性“可见”值设置为“否”。

编辑你的产品并将这个新属性设置为你想要的自定义内容 - 你也可以在这里使用html标签。默认情况下,产品属性(由于某种原因)具有30个字符的任意限制,但如果您需要它来保存更长的字符串,您可以通过编辑app / code / mage / eav / model / entity / Attribute.php轻松更改此字符。更改ATTRIBUTE_CODE_MAX_LENGTH的值。

然后在你的app / design / frontend / YourPackage / YourTheme / template / product / list.phtml中找到第49行附近的以下代码行

<?php foreach ($_productCollection as $_product): ?>
插入以下内容后直接

<?php  $_customcontent =$_product->getResource()->getAttribute('customcontent')->getFrontend()->getValue($_product);?>

您现在已将产品customcontent属性中的字符串存储在名为$ _customcontent

的变量中

因此,如果您在list.phtml中找到以下行

<h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_productNameStripped; ?>"><?php echo $_helper->productAttribute($_product, $_product->getName() , 'name'); ?></a></h2>

您可以轻松地在其下方添加新的段落或标题,并使用

将其填充到您的自定义内容中
<?php echo $_customcontent ?>

我知道这可能代表了一种非常不正统的解决方案,但它确实有效,并且可以非常快速地实现,而且不需要您对编写自己的自定义块有任何了解。

答案 1 :(得分:0)

你可以尝试:

<catalog_categoryd_default>
 <reference name="content">
  <block type="catalog/product_list" name="custom_content" template="custommodule/default.phtml" after="nameofTheNameBlock"/>
</reference>
</catalog_categoryd_default>