'আপডেট_এট' দ্বারা কার্ট আইটেম বাছাই


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
}

তবে এই মানগুলি সহজেই তুলনা করার জন্য আমার একগুচ্ছ ডেটটাইম অবজেক্ট তৈরি করা দরকার এবং এটি গণনার দিক থেকে জটিলতর কাজ বলে মনে হচ্ছে।


তুমি কি চেষ্টা করেছ?
Marius

1
@ মারিয়াস হ্যাঁ, পৃষ্ঠাটি এই মুহুর্তে রেন্ডারিং বন্ধ করে।
easymoden00b

ত্রুটিগুলির জন্য var / লগটি পরীক্ষা করুন বা ত্রুটি প্রতিবেদন সক্ষম করুন।
Marius

@ মারিয়াস আমি সর্বদা এতটা ব্যতিক্রমী হয়ে উঠছি: এ: 5: {আই: 0; এস: 59: "রেজিস্ট্রি কী" _সিংটন / কোর / রিসোর্স "ইতিমধ্যে বিদ্যমান"; i: 1; s: 763: "# 0 /opt/magento/app/Mage.php(225): পুরোনো যাদুকর :: throwException ( 'পুরোনো যাদুকর রেজিস্ট্রি ট ...') ..
easymoden00b

1
উত্তর আপডেট হয়েছে। দয়া করে চেক করুন।
অমিত বেরা

উত্তর:


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 ফাংশন সাজান use

$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_Quote.In এই কলে Magento হয় called 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 () ফাংশনটি ব্যবহার করুন:

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;
    }

}

মারাত্মক ত্রুটি: অপরিজ্ঞাত পদ্ধতিতে কল করুন ম্যাগেজ_সেলস_মোডেল_ রিসোর্স_কোট_ আইটেম_সংশোধন :: অ্যাডঅ্যাট্রিবিউটটোসর্ট () ...
ইজমোডেন00 বি

অপেক্ষা কর আমি চেক করব।
অমিত বেড়া

আমি [আপডেট হওয়া উত্তর দেখুন] এর মতো কিছু করার জন্য প্রলুব্ধ হলাম তবে এটি কেবল একটি গুচ্ছ আরও কোড যা কিছুটা অল্পস্বল্প এবং খুব ম্যাজেন্টো-বান্ধব নয়।
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;
}

প্রথম দিকে লেখা:

সম্ভবত এই পরিস্থিতিতে এটি খুব ভাল সমাধান নয়, তবে এটি মনে রাখবেন। (ম্যাজেন্টোতে এমন অনেকগুলি জায়গা রয়েছে যেখানে এটি ব্যবহারযোগ্য হতে পারে)

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

    return $items;
}

GetData () পদ্ধতির অভ্যন্তরে আপনার যে কোনও ফিল্ড বাছাই করতে পছন্দ করুন। আপনার ক্ষেত্রে এটি হতে পারে updated_at। আরও updated_atভাল ting োকানোর ক্ষেত্রে এর টাইমস্ট্যাম্প sertোকান।


টাইমস্ট্যাম্পের মাধ্যমে আমি ধরে নিয়েছি আপনি একটি ডেটটাইম অবজেক্টের (যার সাথে তুলনাকারীরা কাজ করেন) ইনস্ট্যান্টেশন বলতে চাইছেন?
easymoden00b

আপনার পরীক্ষা করা দরকার। আপনি সেখানে আপডেট_এটি রাখার পরে এটি বাছাই করতে পারে
zhartaunik

ঠিক আছে, আমি এটি দিয়ে চেষ্টা করব ... এখন মজা একটি টেম্পলেট ফাইলের মধ্যে কেবল একটি ফাংশন ব্যবহার করার জন্য একটি জটিল মডিউল তৈরি করা শুরু করে .. ম্যাজেন্টো কখনও কখনও এত বোকা: এক ফাংশন কলের জন্য 5 ফাইলের মতো সি ..
ইজিমোডেন00 বি

এই ধরণটি অনুসরণ করে আমি মেনুতে বিভাগগুলি সাজিয়েছি। ক্লকওয়ার্কের মতো চলে
জার্তৌনিক

যদি দুটি আইটেমের একই আপডেটেড সময় থাকে তবে তারা একে অপরকে ওভাররাইট করে।
easymoden00b
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.