Sắp xếp giỏ hàng


7

Trong giỏ hàng, chúng tôi cần sắp xếp các sản phẩm theo thứ tự chúng được thêm vào và các sản phẩm được nhóm cần phải được sắp xếp theo thứ tự abc.


Bất kỳ khả năng bao gồm mã bạn đã thử cho đến nay?
Prateek

Câu trả lời:


11

Chúng tôi sẽ cần sửa lỗi này trong 2 phần. Phần đầu tiên thực sự là theo dõi những sản phẩm đơn giản trong giỏ hàng đến từ các sản phẩm được nhóm. Thứ hai là phân loại.

Đầu tiên cho việc theo dõi. Chúng tôi sẽ thêm một cột bổ sung sales_flat_quote_itemđể lưu trữ thông tin đó.

Để làm điều này đúng cách viết mô-đun của riêng bạn, một hướng dẫn về điều bạn có thể tìm thấy ở đây trên Tutsplus.com .

Bạn cũng sẽ cần một tập lệnh cài đặt. Kiểm tra hướng dẫn Inchoo này về điều đó.

Thêm phần sau vào tập lệnh cài đặt của bạn

$installer = new Mage_Sales_Model_Resource_Setup('core_setup');

$installer->addAttribute('quote_item', 'is_grouped', array(
    'type'     => Varien_Db_Ddl_Table::TYPE_SMALLINT,
    'visible'  => false,
    'required' => false,
    'default'  => 0
));

$installer->endSetup();

Đây sẽ là một giá trị 0 hoặc 1 đơn giản .

Bây giờ chúng ta cần đặt giá trị đó khi một sản phẩm được thêm vào giỏ hàng. Chúng ta có thể làm điều này với một người quan sát.

Thêm vào sau đây trong của bạn config.xml

<sales_quote_item_set_product>
    <observers>
        <[namespace]_[module]_sales_quote_item_set_product>
            <class>[Namespace]_[Module]_Model_Observer</class>
            <method>salesQuoteItemSetProduct</method>
        </[namespace]_[module]_sales_quote_item_set_product>
    </observers>
</sales_quote_item_set_product>

Bây giờ chúng ta cần biết khi thêm vào giỏ hàng, đây là một sản phẩm được nhóm lại. Chúng tôi sẽ làm điều đó với một trường nhập liệu đơn giản trong biểu mẫu thêm vào giỏ hàng .

Thêm phần sau vào bố cục mô-đun XML của bạn. Nó sẽ thêm một trường đầu vào khi loại sản phẩm được nhóm.

<?xml version="1.0"?>
<layout version="0.1.0">
    <PRODUCT_TYPE_grouped>
        <reference name="product_options_wrapper">
            <block type="core/text" name="isgrouped.input">
                <action method="setText"><text><![CDATA[<input type="hidden" name="isgrouped" value="1"/>]]></text></action>
            </block>
        </reference>
    </PRODUCT_TYPE_grouped>
</layout>

Và một lớp quan sát kiểm tra sự hiện diện của đầu vào.

class [Namespace]_[Module]_Model_Observer
{
    public function salesQuoteItemSetProduct($o)
    {
        $this->_setIsGrouped($o);
        return $this;
    }

    protected function _setIsGrouped($o)
    {
        $isGrouped = (int)$this->getRequest()->getPost('isgrouped');
        if ($isGrouped) {
            $quoteItem = $o->getQuoteItem();
            $quoteItem->setIsGrouped($isGrouped);
        }
    }
}

Điều này sẽ đặt trường bảng is_groupedthành 1 khi sản phẩm đơn giản xuất phát từ một sản phẩm được nhóm.

Bây giờ để phân loại! Lớp khối đằng sau giỏ hàng Mage_Checkout_Block_Cartmà chúng ta sẽ cần phải viết lại từ mô-đun của chính chúng ta. Bạn có thể làm điều đó bằng cách thêm dòng sau vào thẻ config> globaltrongconfig.xml

<blocks>
    <checkout>
        <rewrite>
            <cart>[Namespace]_[Module]_Block_Checkout_Cart</cart>
        </rewrite>
    </checkout>
</blocks>

getItemsphương thức bây giờ có thể lọc ra các mục được nhóm và lọc chúng theo thứ tự bảng chữ cái

class [Namespace]_[Module]_Block_Checkout_Cart extends Mage_Checkout_Block_Cart
{

    /**
     * Return customer quote items
     *
     * @return array
     */
    public function getItems()
    {
        if ($this->getCustomItems()) {
            return $this->getCustomItems();
        }

        $grouped = [];
        $items = parent::getItems();

        /**
         * Filter all the grouped items out to sort them
         */
        foreach ($items as $i => $item) {
            if ($item->getIsGrouped() == 1) {
                $grouped["{$item->getName()}{$item->getId()}"] = $item;
                unset($items[$i]);
            }
        }

        ksort($grouped, SORT_STRING); // sort key (which is name) alphabetically

        return array_merge($grouped, $items);
    }
}

TUYÊN BỐ TỪ CHỐI: mã chưa được kiểm tra vì vậy có thể cần một số điều chỉnh ở đây hoặc ở đó nhưng nó sẽ hoạt động chung. Nếu không chỉ bình luận


3
Để lại nhận xét này ngay bây giờ: bạn có thể đạt được điều tương tự mà không cần thêm trường mới, vì dữ liệu đã được lưu trong info_buyRequesttùy chọn:$groupedId = $item->getBuyRequest()->getData('super_product_config')['product_id']
Fabian Schmengler

1
thưởng thức những điểm internet ngọt ngào ngọt ngào Ông Mangelbangel
chào mừng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.