Stok ürünlerden katalog ürün listesinin sonuna gitme [kapalı]


14

Stoktaki ürünleri katalog listesinin sonuna itmem gerekiyor

Lütfen bu sorunu veya bu dosyayı nasıl çözeceğimi bana yönlendirin

şimdiye kadar buldum Toolbar.phpve üzerinde çalışıyorum




1
Magento'da yeniyim, bu yüzden noob sorusu, /app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Collection.php - bu dosya boş, tamam mı?
Alexandr Sopkov

Ben el kapalı dosyayı bilmiyorum ama Magento ürün koleksiyonunu oluşturur ve daha sonra benzeri bir tür filtre ekleyin nereye bulmak istersiniz düşünüyorum stackoverflow.com/questions/4803495/...
kevando

3
Bu soruyu konu dışı olarak kapatmak için oy veriyorum çünkü kabul edilen bir cevap olmadan çok eski
SR_Magento

Yanıtlar:


11

Çözüm 1

Bu, stok ürünlerinden sayfa numarasının tamamında değil, sayfa listesinin sonuna taşınır:

1. olay gözlemci ekleyin:

<frontend>
    <events>
        <catalog_block_product_list_collection>
            <observers>
                <ssd_test>
                    <type>model</type>
                    <class>ssd_test/observer</class>
                    <method>catalogBlockProductCollectionBeforeToHtml</method>
                </ssd_test>
            </observers>
        </catalog_block_product_list_collection>
    </events>
</frontend>

2. gözlemci mantığı:

public function catalogBlockProductCollectionBeforeToHtml($observer)
{
    /**
     * @var $products Varien_Data_Collection
     */
    $products         = $observer->getEvent()->getCollection();
    $soldOuts         = array();
    if ($products instanceof Varien_Data_Collection) {
        foreach ($products as $product) {
            if (!$product->isSaleable()) {
                $products->removeItemByKey($product->getId());
                $soldOuts[] = $product;
            }
        }
        foreach ($soldOuts as $product) {
            $products->addItem($product);
        }
    }
    return $this;
}

3.Set " Display Out of Stock Products" den " Yes" konulu System->Configuration->Inventory.

Çözüm 2

Bu, stok ürünlerinden tüm sayfalandırma içinde listenin sonuna taşınır:

config.xml:

    <frontend>
        <events>
            <catalog_product_collection_load_before>
                <observers>
                    <review>
                        <type>model</type>
                        <class>ssd_test/observer</class>
                        <method>catalogProductCollectionLoadBefore</method>
                    </review>
                </observers>
            </catalog_product_collection_load_before>
        </events>
    </frontend>

Observer.php:

    public function catalogProductCollectionLoadBefore($observer)
    {
        $toolbar = Mage::getBlockSingleton('catalog/product_list_toolbar');
        if ($toolbar) {
            $products = $observer->getEvent()->getCollection();

            $stockId = Mage_CatalogInventory_Model_Stock::DEFAULT_STOCK_ID;
            $websiteId = Mage::app()->getStore($products->getStoreId())->getWebsiteId();

            $products->getSelect()->joinLeft(
                array('_inv' => $products->getResource()->getTable('cataloginventory/stock_status')),
                "_inv.product_id = e.entity_id and _inv.website_id=$websiteId and _inv.stock_id=$stockId",
                array('stock_status')
            );
            $products->addExpressionAttributeToSelect('in_stock', 'IFNULL(_inv.stock_status,0)', array());

            $products->getSelect()->reset('order');
            $products->getSelect()->order('in_stock DESC');

            if ($toolbar->getCurrentOrder()) {
                $products->addAttributeToSort($toolbar->getCurrentOrder(), $toolbar->getCurrentDirection());
            }
        }

        return $this;
    }

Set " Display Out of Stock Products" den " Yes" konulu System->Configuration->Inventory.

Yukarıdaki mantıklar katalog sıralama / sayfalama işlevselliğinizi etkilemez, sadece satılmayan ürünleri sonuna kadar taşır.


Bunun işe yarayacağından emin misin? Sayfalandırmayı etkilemeyeceğini söylüyor, ancak stokta bulunan ürünlerin alt kısmındaki AKIM SAYFASINDAN taşınacaktır. Yani bir sonraki sayfaya giderseniz, bir önceki sayfada stokta olmayanları gördükten sonra stok ürünlerinde görebilirsiniz.
Marius

Evet Sayfa numaralandırmasının her sayfasında sayfa listesinin sonuna
taşınır

Sanırım buradaki görev, sayfanın değil listenin sonunda stokta kalan ürünlerin taşınmasıydı. Bu yüzden stoktaki ürünlerle birlikte ilk N sayfasını görmelisiniz ve stokta olmayan bir sayfayı görüntüledikten sonra, bundan sonra gelen diğer tüm stoklar stokta kalmaz.
Marius

Evet, başka bir çözüm vermeye çalışacağım :)
mageUz

1
Çözüm 2 bir cazibe gibi çalışıyor! Bunun için çok teşekkür ederim!
Derik Nel

0

Bu işlevselliği web siteme uyguladım.

  • Collection.php dosyasını /app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php dizininden / app / code / local / Mage / Catalog / Model / Resource / Product / dizinine kopyalayın.

  • Collection.php'yi düzenleyin , satır 1570 civarında metni bulun $ storeId = $ this-> getStoreId ();

  • Aşağıdaki satırları doğrudan ekleyin:

        $this->getSelect()->joinLeft(
        array('_inventory_table'=>$this->getTable('cataloginventory/stock_item')),
        "_inventory_table.product_id = e.entity_id",
        array('is_in_stock', 'manage_stock')
    );
    $this->addExpressionAttributeToSelect('on_top',
    '(CASE WHEN (((_inventory_table.use_config_manage_stock = 1) AND (_inventory_table.is_in_stock = 1)) OR  ((_inventory_table.use_config_manage_stock = 0) AND (1 - _inventory_table.manage_stock + _inventory_table.is_in_stock >= 1))) THEN 1 ELSE 0 END)',
     array());
    $this->getSelect()->order('on_top DESC');

Önbelleğinizi yıkayın ve ürünleriniz artık stoktaki ürünleri otomatik olarak önce ve stokta kalan ürünler otomatik olarak sıralayacaktır.


3
Lütfen yerel çekirdek geçersiz kılmaları önermekten kaçının. Mage_Catalog_Model_Resource_Product_Collection sınıfını doğru bir şekilde genişletmek çok daha iyi olurdu.
Reid Blomquist

1
Belki kendi cevabınızı ekleyebilir ve bize bunun nasıl yapılacağını gösterebilirsiniz?
SR_Magento
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.