嘿嘿,一段时间以来一直在研究 magento 主题(......而且我对系统的理解正在缓慢但稳定地增长)。我需要尽快开始处理一些自定义模块,所以我从这个小项目开始了解我的方向:
我找到了一些代码来管理我一直在复制并粘贴到模板文件中的特定任务:
<?php
$ids = $_product->getCategoryIds();
$cat = Mage::getModel('catalog/category')->load($ids[0]);
$isFF = false;
foreach ($ids as $key=>$val) {
$cat = Mage::getModel('catalog/category')->load($val);
$name = $cat->getName();
if ( $name === 'Fast Fulfillment' ) {
$isFF = true;
}
}
if ($isFF) { echo '<span class="ff-logo"></span>'; }
?>
非常简单。我只是检查产品是否属于特定类别,如果是,则生成一个元素。(我知道有大约 5 种可靠的方法可以做到这一点……这是我使用的方法)。
每次显示产品块时,我都需要对此进行测试,并且到目前为止,我一直在复制此代码以使其工作。它确实有效,但是是反击(我不应该将逻辑放入视图层)。
好的 - 所以,让我们制作一个简单的模块来共享功能:
本地/WACI/ProductFlag/etc/config.xml
<config>
<modules>
<WACI_ProductFlag>
<version>0.1.0</version>
</WACI_ProductFlag>
</modules>
<global>
<blocks>
<WACI_ProductFlag>
<class>WACI_ProductFlag_Block_View</class>
</WACI_ProductFlag>
</blocks>
</global>
</config>
等/模块/WACI_All.xml
<config>
<modules>
<WACI_CustomPageLayouts>
<codePool>local</codePool>
<active>true</active>
</WACI_CustomPageLayouts>
</modules>
<modules>
<WACI_ProductFlag>
<codePool>local</codePool>
<active>true</active>
</WACI_ProductFlag>
</modules>
</config>
现在,对于班级......我不确定 aBlock
或 aHelper
是否合适。我去了Block
,但是 - idk...我可能错了(这些东西的教程差异很大)。
本地/WACI/ProductFlag/Block/View.php
<?php
/**
* WACI
*
* @codepool Local
* @category View
* @package WACI
* @module ProductFlag
*/
class WACI_ProductFlag_Block_View extends Mage_Core_Block_Template
{
private $_focus;
private $_isFF = false;
public function getIsFF( $product ){
$this->_focus = "FF";
$isFF = false;
$ids = $product->getCategoryIds();
$cat = Mage::getModel('catalog/category')->load($ids[0]);
foreach ($ids as $key=>$val) {
$cat = Mage::getModel('catalog/category')->load($val);
$name = $cat->getName();
if ( $name === 'Fast Fulfillment' ) {
$isFF = true;
}
}
}
protected function _toHtml(){
$html = parent::_toHtml();
if ($this->_focus === "FF") {
if ($this->_isFF){
$html .= '<span class="ff-logo"></span>';
}
}
return $html;
}
}
?>
希望很清楚,我只想根据任何给定产品的输入输出一个字符串。我应该覆盖_toHtml()
传递字符串吗?再次。可能不是...
在我的local.xml中,我引用了该块:
<catalog_product_view>
<reference name="content">
<reference name="product.info">
<block type="WACI/ProductFlag" name="product.flag" as="productFlag" output="toHtml" />...
...我不清楚这是否实例化了这个类?我不这么认为。无论如何,我不确定如何在我的product/view/media.phtml中解决它,因为我需要调用带有参数的方法。
我认为我不需要模板文件,因为我只是输出一个字符串,但我认为我没有见过没有关联模板的块模块。也许一个助手类是合适的?
无论如何,它是行不通的。
我要么收到一个致命错误,说我的媒体类没有getIsFF()
方法(不足为奇),要么什么都没有出现。我的配置文件是正确的,但仅此而已,我想。
杰布斯。我都转了。
有法师技能的人可以澄清这个简单的问题并指出正确的方向吗?
干杯!