'update_at' द्वारा कार्ट आइटम सॉर्ट करना


15

इस तरह से मुझे कार्ट आइटम मिल रहे हैं:

$quote = Mage::getModel('checkout/cart')->getQuote();
$items=$quote->getAllitems();

मैं कुछ इस तरह करना चाहता हूं:

$items->sortBy('updated_at','desc');

ऐसा करने के लिए उचित मैजेंटो तरीका क्या है?

मुझे ऐसा कुछ करने के लिए लुभाया जाता है:

$productArray=array();
foreach($items as $item){
    $product=$item->getProduct();
    array_push($productArray,$product);
}
$productArray = $this->sortArray($productArray);

protected sortArray($productArray){
    ...sort by updated date;
    return $sortedArray
}

हालाँकि, मुझे आसानी से इन मूल्यों की तुलना करने के लिए डेटटाइम ऑब्जेक्ट्स का एक गुच्छा बनाने की आवश्यकता होगी और यह एक कम्प्यूटेशनल बोझिल ऑपरेशन का एक सा प्रतीत होता है।


क्या तुमने कोशिश की?
मेरियस

1
@ मार्स हाँ, पृष्ठ इस बिंदु पर प्रतिपादन बंद कर देता है।
४00 पर easymoden00b

त्रुटियों के लिए var / log की जाँच करें या त्रुटि रिपोर्टिंग को सक्षम करें।
मेरियस

@ मार्स मैं कभी इतना अनमोल हो रहा हूँ: a: 5: {i: 0; s: 59: "मेज़ रजिस्ट्री कुंजी" _singleton / core / संसाधन "पहले से ही मौजूद है? मैं: 1; s: 763:" # 0 /opt/magento/app/Mage.php(225): Mage :: throwException ('Mage रजिस्ट्री k ...') ..
easymoden00b

1
उत्तर अपडेट किया गया .please check
अमित बेरा

जवाबों:


3

द्वारा क्रमबद्ध करने का कोई कार्य नहीं है

वस्तु getAllItemsसे आने के कारण arrayऔर मेरे अनुसारconcept you cannot sort this by field.

  public function getAllItems()
    {
        $items = array();
        foreach ($this->getItemsCollection() as $item) {
            if (!$item->isDeleted()) {
                $items[] =  $item;
            }
        }
        return $items;
    }

इस स्थिति में, आप getItemsCollection().किसी भी फ़ील्ड द्वारा seOrder फ़ंक्शन सॉर्ट का उपयोग कर सकते हैं

$items=$quote->getItemsCollection()->setOrder('updated_at', 'desc');

foreach ($items as $item) {
    if (!$item->isDeleted()) {
    //Do your code $item
    }
}

संपादित करें:

वर्ग श्रेणी Mage_Sales_Model_Quote

कक्षा को फिर से लिखना बेहतर होगा । यह कॉल मैगनेटो सभी वस्तुओं को प्राप्त करने के लिए फ़ंक्शन और जी मुख्य उत्तरदायी है।Mage_Sales_Model_Quotecalled getAllItems()etItemsCollection() function

  <global>
    <models>
      <magento65343>
        <class>StackExchange_Magento65343_Model</class>
        <resourceModel>magento65343_mysql4</resourceModel>
      </magento65343>
            <sales>
                <rewrite>
                    <quote>StackExchange_Magento65343_Model_Sales_Quote</quote>
                </rewrite>
            </sales>
    </models>

पुनर्वितरित वर्ग:

<?php
class StackExchange_Magento65343_Model_Sales_Quote extends Mage_Sales_Model_Quote
{
}

सेटऑर्डर का उपयोग करें () सॉर्ट के लिए फ़ंक्शन:

SetOrder () समारोह तरह खेतों से आइटम संग्रह

<?php
class StackExchange_Magento65343_Model_Sales_Quote extends Mage_Sales_Model_Quote
{
     public function getItemsCollection($useCache = true)
    {
        if ($this->hasItemsCollection()) {
            return $this->getData('items_collection');
        }
        if (is_null($this->_items)) {
            $this->_items = Mage::getModel('sales/quote_item')->getCollection()->setOrder('updated_at', 'desc');
            $this->_items->setQuote($this);
        }
        return $this->_items;
    }

}

घातक त्रुटि: अपरिभाषित विधि से कॉल करें Mage_Sales_Model_Resource_Quote_Item_Collection :: addAttributeToSort () ...
easymoden00b

रुको मैं जाँच करूँगा
अमित बेरा

मुझे ऐसा कुछ करने के लिए लुभाया जाता है [अपडेट किया गया उत्तर देखें] लेकिन यह सिर्फ एक गुच्छा अधिक कोड है जो थोड़ा सा अस्पष्ट है और बहुत मैजेंटो के अनुकूल नहीं है।
easymoden00b

0

समाधान:

Mage_Sales_Model_Quote::getAllVisibleItemsइसके साथ अपनी विधि को फिर से लिखें :

public function getAllVisibleItems()
{
    $items = array();
    foreach ($this->getItemsCollection() as $item) {
        if (!$item->isDeleted() && !$item->getParentItemId()) {
            $timeStamp = Mage::getModel('core/date')->timestamp($item->getData('updated_at'));
            $items[$timeStamp] =  $item;
        }
        ksort($items);
    }
    return $items;
}

जल्दी लिखा:

संभवतः यह इस स्थिति में बहुत अच्छा समाधान नहीं है, लेकिन इसे ध्यान में रखें। (Magento के कई ऐसे स्थान हैं जहाँ यह उपयोगी हो सकता है)

public function getAllItems()
{
    $items = array();
    foreach ($this->getItemsCollection() as $item) {
        if (!$item->isDeleted()) {
            $items[$item->getData('...')] =  $item;
        }
    }
    ksort($items)

    return $items;
}

GetData () विधि के अंदर आप जिस भी क्षेत्र को क्रमबद्ध करना चाहते हैं, डाल दें। आपके मामले में यह हो सकता है updated_atupdated_atबेहतर डालने के मामले में इसकी टाइमस्टैम्प डालें।


टाइमस्टैम्प द्वारा मुझे लगता है कि आपको डेटटाइम ऑब्जेक्ट (जिसमें से तुलनित्र काम करते हैं) का तात्पर्य है?
१३:५ym पर easymoden00b

आपको प्रयोग करने की आवश्यकता है। हो सकता है कि जब आप इसे अपडेट कर सकते हैं तो इसे सॉर्ट कर सकते हैं
zhartaunik

ठीक है, मैं इसे एक कोशिश करूँगा ... अब मज़ा एक एकल फ़ाइल के भीतर एक एकल फ़ंक्शन का उपयोग करने के लिए एक जटिल मॉड्यूल बनाने का शुरू होता है .. Magento कभी-कभी इतना बेवकूफ होता है: सी एक फ़ंक्शन कॉल के लिए 5 फ़ाइलों की तरह।
easymoden00b

इस पैटर्न के बाद मैंने मेनू में श्रेणियों को क्रमबद्ध किया। घड़ी की तरह
चलता है

यदि दो वस्तुओं का अद्यतन समय समान है तो वे एक दूसरे को ओवरराइट कर देंगे।
easymoden00b
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.