我希望有人可以帮助我在这里。Magento自定义小工具问题
我目前正在开发一个Magento小部件,通过一个子类别列表和包含在这些类别中的产品,并将它们呈现在ul中。
到目前为止我有两个问题。
- 从一个.phtml模板中的HTML没有得到呈现在前端
我就得到了其中由小部件显示在后端的阶段,当你选择它,它插入指向模板的正确路径的小部件,但是当您检查前端时,它不呈现任何内容。我不确定为什么?我的代码如下。
- 产品名称不通过
我从前端的一个.phtml模板文件测试了我的PHP代码拉和它的作品在一定程度上。它呈现几个标签,每个标签都有一个类别链接,然后在该类别的正确产品列表的下面。每个产品是一个链接,它有该产品的正确的URL,但它似乎并没有通过使用产品名称来拉动:
<?php echo $_product->getName()?>
下面是我的代码,与路径的文件。
模板/目录/导航/ pronav_list.phtml
<?php
$mainCategory = Mage::getModel('catalog/category') -> load(3) -> getChildren();
$categoryIDs = explode(',', $mainCategory);
?>
<?php foreach($categoryIDs as $catID): ?>
<div class="row">
<?php $category = Mage::getModel('catalog/category') -> load($catID); ?>
<a href="<?php echo $category -> getUrl(); ?>" title="<?php echo $category -> getName(); ?>"><?php echo $category -> getName(); ?></a>
<?php $_productCollection = Mage::getResourceModel('catalog/product_collection') -> addCategoryFilter($category); ?>
<?php if(count($_productCollection)>0): ?>
<ul>
<?php foreach ($_productCollection as $_product): ?>
<li>
<a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_product->getName()?>"><?php echo $_product->getName() ?></a>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
<?php endforeach?>
应用程序/代码/本地/ Ecreation/PNListWidget /砌块
<?php
class Ecreation_PNListWidget_Block_List extends Mage_Core_Block_Template
implements Mage_Widget_Block_Interface {
protected function _construct() {
parent::_construct();
}
protected function _toHtml() {
$blockHTML = $this -> getLayout() -> createBlock('cms/block') -> toHtml();
return parent::_toHtml();
}
}
?>
应用程序/代码/本地/ Ecreation /PNListWidget/etc/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Ecreation_PNListWidget>
<version>0.1.0</version>
</Ecreation_PNListWidget>
</modules>
</config>
应用程序/代码/本地/ Ecreation/PNListWidget的/ etc/widget.xml
<?xml version="1.0"?>
<widgets>
<list type="pronav/list_widget">
<name>ProNav Navigation List Widget</name>
<description>Automatically renders 2nd level categories and their products.</description>
<parameters>
<template>
<required>1</required>
<visible>1</visible>
<label>Template</label>
<type>select</type>
<values>
<nav_list translate="label">
<value>catalog/navigation/pronav_list.phtml</value>
<label>ProNav Navigation List</label>
</nav_list>
</values>
</template>
</parameters>
</list>
</widgets>
我希望我已经尽可能详细,并且有人能够指出我在正确的方向。
注意:最终我想让小部件做的是允许用户选择顶级类别,然后获取该类别的ID并将其插入到要用作主类别的代码中下面它加载类ID码3:
$mainCategory = Mage::getModel('catalog/category') -> load(3) -> getChildren();
编辑:OK家伙,我已经修改了一个.phtml文件代码中现在显示的产品名称,以及只显示已设置为产品在目录中可见。下面的代码。
<?php
$mainCategory = Mage::getModel('catalog/category') -> load(3) -> getChildren();
$categoryIDs = explode(',', $mainCategory);
?>
<div class="row">
<?php foreach($categoryIDs as $catID): ?>
<?php $category = Mage::getModel('catalog/category') -> load($catID);?>
<?php $_productCollection = Mage::getResourceModel('catalog/product_collection') -> addAttributeToSelect(array('name','visibility'), 'inner') -> addCategoryFilter($category); ?>
<?php if(count($_productCollection)>0): ?>
<ul>
<a href="<?php echo $category -> getUrl();?>" title="<?php echo $category -> getName();?>"><?php echo $category -> getName(); ?></a>
<?php foreach ($_productCollection as $_product): ?>
<?php $productVisibility = $_product->getVisibility(); ?>
<?php if($productVisibility != 1): ?>
<li>
<a href="<?php echo $_product->getProductUrl(); ?>" title="<?php echo $_product->getName(); ?>"><?php echo $_product->getName(); ?></a>
</li>
<?php endif; ?>
<?php endforeach;?>
</ul>
<?php endif; ?>
<?php endforeach ?>
</div>
在CMS页面或静态块使用块声明时,用下面的代码这完美的作品:
{{block type="catalog/navigation" template="catalog/navigation/pronav_list.phtml"}}
现在,我也稍微修改部件代码,但仍然没有显示在前端。您可以在后端看到小部件,并插入它以生成此代码:
{{widget type="cms/list_widget" template="catalog/navigation/pronav_list.phtml" id_path="category/3"}}
同样,在前端不会产生任何东西。我很肯定,这是以下文件之一中的小部件代码的问题。
list.php的 - 位于应用程序/代码/本地/ Ecreation/PNListWidget /砌块/
<?php
class Ecreation_PNListWidget_Block_List extends Mage_Core_Block_Template
implements Mage_Widget_Block_Interface {
protected function _construct() {
parent::_construct();
}
protected function _toHtml() {
$blockHTML = $this -> getLayout() -> createBlock('cms/block') -> toHtml();
return parent::_toHtml();
}
public function getCategoryID() {
$idPath = explode('/', $this -> _getData('id_path'));
}
}
?>
widget.xml - 位于应用程序/代码/本地/ Ecreation/PNListWidget的/ etc/
<?xml version="1.0"?>
<widgets>
<list type="catalog/navigation">
<name>ProNav Category and Product Navigation List</name>
<description>Automatically renders 2nd level categories and their products.</description>
<parameters>
<id_path translate="label">
<visible>1</visible>
<required>1</required>
<label>Category</label>
<type>label</type>
<helper_block>
<type>adminhtml/catalog_category_widget_chooser</type>
<data>
<button translate="open">
<open>Select Category...</open>
</button>
</data>
</helper_block>
<sort_order>90</sort_order>
</id_path>
<template translate="label">
<label>Template</label>
<visible>1</visible>
<type>select</type>
<value>catalog/navigation/pronav_list.phtml</value>
<values>
<default translate="label">
<value>catalog/navigation/pronav_list.phtml</value>
<label>ProNav Sub-Category Navigation List</label>
</default>
</values>
</template>
</parameters>
</list>
</widgets>
config.xml中 - 位于应用程序/代码/本地/ Ecreation/PNListWidget的/ etc/
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Ecreation_PNListWidget>
<version>0.1.0</version>
</Ecreation_PNListWidget>
</modules>
</config>
我知道我非常接近,但这令人沮丧,我需要满足截止日期才能正常工作,所以如果任何人有任何建议或可以指向正确的方向,那就太棒了。谢谢。
你说的那么 “上前台工作正常”,结果是什么,如果你使用像一个小部件? –
它不起作用。 –
有没有人对此有过任何指示。我真的需要一些建议。谢谢。 –