2012-01-24 9 views
1

誰かが私を助けてくれることを願っています。Magentoカスタムウィジェットの問題

私は現在Magentoウィジェットを開発しています。Magentoウィジェットは、サブカテゴリとそれらのカテゴリに含まれる製品のリストを引き出し、ulでレンダリングします。

これまでのところ2つの問題があります。 .phtmlテンプレートからHTMLは、私はあなたがそれを選択すると、ウィジェットがバックエンドで表示され、ステージにそれを持っているフロントエンド

でレンダリングされません

  1. 、それテンプレートの正しいパスを指すウィジェットを挿入しますが、フロントエンドをチェックすると何も描画されません。なぜ私は確信していますか?私のコードは以下の通りです。

    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をコードに挿入して、メインカテゴリとして使用することです。

    $mainCategory = Mage::getModel('catalog/category') -> load(3) -> getChildren(); 
    

    EDIT:それは、カテゴリID 3ロードしたコードの下に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); 
}