0

local.xml で、レイアウトの更新を作成して、カスタムのフィルター処理された製品コレクションを表示できるようにしました。

これは local.xml にあります。

<CATEGORY_7>
        <block type="catalog/category_view" name="category.products" template="catalog/category/view.phtml">
            <block type="catalog/product_list" name="product_list" template="catalog/product/cashcrop.phtml">
                <block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
                    <block type="page/html_pager" name="product_list_toolbar_pager"/>
                </block>
                <action method="addColumnCountLayoutDepend"><layout>empty</layout><count>6</count></action>
                <action method="addColumnCountLayoutDepend"><layout>one_column</layout><count>5</count></action>
                <action method="addColumnCountLayoutDepend"><layout>two_columns_left</layout><count>4</count></action>
                <action method="addColumnCountLayoutDepend"><layout>two_columns_right</layout><count>4</count></action>
                <action method="addColumnCountLayoutDepend"><layout>three_columns</layout><count>3</count></action>
                <action method="setToolbarBlockName"><name>product_list_toolbar</name></action>
                <action method="setColumnCount"><columns>4</columns></action>

            </block>
        </block>
</CATEGORY_7>

テンプレート ファイルは list.phtml のコピーですが、コレクションをフィルター処理するように変更されています。

<?php
    $_productCollection = Mage::getModel('catalog/product')->getCollection();
    //$_productCollection=$this->getLoadedProductCollection();
    $_productCollection
    ->addAttributeToSelect('*')
    //->addAttributeToFilter('status', 1)
    //->addAttributeToFilter('visibility', 4)
    ->addAttributeToFilter('randament', array('in' => array(101, 102)))
    ->load()
    ;
    $this->setCollection($_productCollection);
    $_helper = $this->helper('catalog/output');
?>

これは機能し、コレクションには 105 個の製品が含まれています。問題はツールバーです - 表示されていません。ツールバーが表示されない理由を誰か知っていますか? (これ<?php echo $this->getToolbarHtml(); ?>が空の文字列を返すことはわかっていますが、その理由はわかりません。

どんな助けでも感謝します。

乾杯、マイケル。

4

2 に答える 2

0

すべてを再初期化する必要はありません。これを試して、動作するかどうかを確認してください:

<CATEGORY_7>
    <reference name="product_list">
        <action method="setTemplate">
            <tpl>catalog/product/cashcrop.phtml</tpl>
        </action>
    </reference>
</CATEGORY_7>

また、スクリプトやレイアウト ファイルで自動インクリメント データを使用することにも注意が必要です。これを DB のカテゴリのレイアウト更新に入れたいと思います。お使いの環境では問題にならないかもしれませんが、7 はストレージ バックエンドの任意の機能であり、カテゴリ名などのより意味のあるものとは対照的です。

于 2012-11-23T20:05:56.637 に答える
0

実際、私は自分でそれを理解しました。テンプレートを上書きしても問題ありません。カテゴリのカスタム レイアウト更新セクションに配置すれば十分です。local.xml に配置する必要はありません。

問題は、Mage/Catalog/Block/Product/List.php の _beforeHtml() 関数にあります。ブロックの _getProductCollection() 関数によってツールバーが初期化されています。ブロックの _getProductCollection() 関数は、現在のコレクションを取得しようとするため、常に空のコレクションを返します。カテゴリの製品コレクション。

そのため、簡単で汚い修正として、コードを _beforeHtml() 関数からコピーし、cashcrop.phtml テンプレートに直接挿入しました。テンプレートの上部は次のようになります。

<?php
    $_productCollection = Mage::getModel('catalog/product')->getCollection();
    $_productCollection->addAttributeToSelect('*')
                        ->addAttributeToFilter('randament', array('in' => array(101, 102)))
                        ->addAttributeToFilter('inflorire', array('in' => array(97)))
                        ->addMinimalPrice()
                        ->addFinalPrice()
                        ->addTaxPercents();

    Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($_productCollection);
    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($_productCollection);

    $_helper = $this->helper('catalog/output');

    $toolbar = $this->getToolbarBlock();
    $collection = $_productCollection;

    // use sortable parameters
    if ($orders = $this->getAvailableOrders()) {
        $toolbar->setAvailableOrders($orders);
    }
    if ($sort = $this->getSortBy()) {
        $toolbar->setDefaultOrder($sort);
    }
    if ($dir = $this->getDefaultDirection()) {
        $toolbar->setDefaultDirection($dir);
    }
    if ($modes = $this->getModes()) {
        $toolbar->setModes($modes);
    }

    // set collection to toolbar and apply sort
    $toolbar->setCollection($_productCollection);

    $this->setChild('toolbar', $toolbar);
    Mage::dispatchEvent('catalog_block_product_list_collection', array(
        'collection' => $_productCollection
    ));

    $_productCollection->load();
?>

これが理想的な解決策ではないことは承知していますが、機能しています。他の誰かがより良い解決策を持っているなら、私はそれについて聞きたいです.

乾杯、マイケル。

于 2012-11-25T11:40:56.990 に答える