2012-01-24 46 views
1

我希望有人可以帮助我在这里。Magento自定义小工具问题

我目前正在开发一个Magento小部件,通过一个子类别列表和包含在这些类别中的产品,并将它们呈现在ul中。

到目前为止我有两个问题。

  1. 从一个.phtml模板中的HTML没有得到呈现在前端

我就得到了其中由小部件显示在后端的阶段,当你选择它,它插入指向模板的正确路径的小部件,但是当您检查前端时,它不呈现任何内容。我不确定为什么?我的代码如下。

  1. 产品名称不通过

我从前端的一个.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> 

我知道我非常接近,但这令人沮丧,我需要满足截止日期才能正常工作,所以如果任何人有任何建议或可以指向正确的方向,那就太棒了。谢谢。

+0

你说的那么 “上前台工作正常”,结果是什么,如果你使用像一个小部件? –

+0

它不起作用。 –

+0

有没有人对此有过任何指示。我真的需要一些建议。谢谢。 –

回答

0

试试这个

应用程序/代码/本地/ Ecreation/PNListWidget /砌块

protected function _toHtml() { 
    $blockHTML = $this -> getLayout() -> createBlock('cms/block') -> toHtml(); 
    return parent::_toHtml($blockHTML); 
}