কোনও পণ্য নতুন কিনা তা যাচাই করবেন


15

দ্রুত অনুসন্ধান থেকে পাওয়া কেবলমাত্র রেফারেন্সটি ছিল ম্যাগেন্টো ফোরামগুলিতে যা প্রস্তাব দিচ্ছে যে কোনও পণ্য নতুন কিনা তা পরীক্ষা করতে আপনাকে কিছু কাস্টম কোড লিখতে হবে।

আমি ভাবতাম এমন একটি সহজ isNew()পদ্ধতি থাকবে Mage_Catalog_Model_Productযা বৈশিষ্ট্যযুক্ত ড্রপডাউন হিসাবে সেট করে সেই সাথে তারিখ থেকে নতুন হিসাবে সেট পণ্য এবং নতুন পণ্য হিসাবে তারিখের ক্ষেত্রগুলিকে সেট করে - তবে এটি মনে হয় না?

কি কাস্টম কোডজ প্রয়োজন?


isNew () কেবল এটি ডিবি-তে নতুন কিনা তা পরীক্ষা করছে (যেমন এটি এখনও সংরক্ষণ করা হয়নি এবং এটির সত্তা আইডি নেই, বেশিরভাগ সময় স্বতঃআগ্রহ)
ক্রিস্টফ ফুমান

@ ফুমান আমি এটি মনে করি isObjectNew()তবে আপনি যা বলছেন তা পেয়েছি।
কালেঞ্জর্ডান

এই লিঙ্কটি পরীক্ষা করুন। এটি কীভাবে করা যায় তা উল্লেখ করে। universalcoder.wordpress.com/2014/04/14/…
ডেক্সটার

উত্তর:


13

আপনাকে অবশ্যই তারিখগুলিকে ম্যানুয়ালি রূপান্তর এবং বৈধতা দিতে হবে না, কারণ এটি সময় অঞ্চল সমস্যার কারণ হতে পারে issues ম্যাজেন্টো ক্লাসে অন্তর্নির্মিত পদ্ধতি isStoreDateInInterval()রয়েছে Mage_Core_Model_Locale। সুতরাং আপনার সাহায্যকারী পদ্ধতি তৈরি করা উচিত যা দেখতে এটি দেখতে পারে

function isProductNew(Mage_Catalog_Model_Product $product)
{
    $newsFromDate = $product->getNewsFromDate();
    $newsToDate   = $product->getNewsToDate();
    if (!$newsFromDate && !$newsToDate) {
        return false;
    }
    return Mage::app()->getLocale()
            ->isStoreDateInInterval($product->getStoreId(), $newsFromDate, $newsToDate);
}

আরও বিশদ আপনি এখানে জানতে পারেন http://quicktips.ru/all/check-product-is-new/


শুভ কল করুন - তার জন্য ধন্যবাদ। আমি আমার উত্তর বাস্তব দ্রুত আপডেট করেছি।
kalenjordan

6

কোনও একক পদ্ধতির কল নেই। কমপক্ষে আমি এটি সম্পর্কে সচেতন নই।

তবুও আপনি সর্বদা এরকম কিছু ব্যবহার করতে পারেন:

<?php if (date("Y-m-d") >= substr($_product->getNewsFromDate(), 0, 10) && date("Y-m-d") <= substr($_product->getNewsToDate(), 0, 10)) : ?>
...
<?php endif ?>

দুঃখিত আমি পিএইচপি তারিখ তুলনা ভাল না।

যাইহোক ভাল প্রশ্ন।


নিউজ টুডেটের নির্দিষ্টকরণ নেই এমন পণ্যটি প্রদর্শন করতে আমি আপনার ফাংশনটি মানিয়ে নিয়েছি। <? পিএইচপি যদি ((তারিখ ("Ymd")) = সাবস্ট্রাস্ট ($ _ পণ্য-> getNewsFromDate (), 0, 10) && pr _ উত্পাদ-> getNewsFromDate ()! = "") এবং (তারিখ ("Ymd") < = সাবস্ট্রিট ($ _ পণ্য-> getNewsToDate (), 0, 10) || $ _প্রডেক্ট-> getNewsToDate () == "")):?> ... <? পিএইচপি এন্ডিফ?>
এডুয়ার্ডো

5

রেফারেন্সের জন্য, আমি নতুনত্ব যাচাই করার জন্য এখানে এসেছি এমন সহায়িকা পদ্ধতি। এটি উভয় বৈশিষ্ট্যযুক্ত ড্রপডাউন পাশাপাশি তারিখগুলিকে সমর্থন করে এবং তারিখটি খালি থাকার ক্ষেত্রেও সমর্থন করে।

public function isNew($product)
{
    if ($product->getData('featured_product')) {
        return true;
    }

    if ($product->getData('news_from_date') == null && $product->getData('news_to_date') == null) {
        return false;
    }

    if ($product->getData('news_from_date') !== null) {
        if (date('Y-m-d', strtotime($product->getData('news_from_date'))) > date('Y-m-d', time())) {
            return false;
        }
    }

    if ($product->getData('news_to_date') !== null) {
        if (date('Y-m-d', strtotime($product->getData('news_to_date'))) < date('Y-m-d', time())) {
            return false;
        }
    }

    return true;
}

আপডেট: @ রুমূমাইনকে ধন্যবাদ জানাতে যে আমি প্রস্তাবিত এই ম্যানুয়াল তারিখের রূপান্তরটি সম্ভাব্য স্থানীয় সমস্যাগুলির কারণে খুব খারাপ ধারণা। Mage::app()->getLocale()->isStoreDateInInterval($product->getStoreId(), $newsFromDate, $newsToDate)পরিবর্তে চেক আউট ।


3

একটি নির্ভুলতা যা কারও পক্ষে কার্যকর হতে পারে। এই সমস্ত উত্তরগুলি "নিউজ_ফর্ম_ডেট" বৈশিষ্ট্যটি ব্যবহার করছে তবে আপনি যদি ডাটাবেসে পণ্যটি তৈরির আসল তারিখ পেতে চান তবে আপনার পদ্ধতিটি ব্যবহার করে "নির্মিত_্যাট" বৈশিষ্ট্যটি পাওয়া উচিত:

$product->getCreatedAt()

আমি যে প্রকল্পে কাজ করছি তাতে কিছু পণ্যের "নিউজ_ফর্ম_ডেট" এর মান "তৈরি_আট" থেকে আলাদা হতে পারে। প্রকৃতপক্ষে ব্যবসায়ের নিয়ম অনুসারে, কোনও পণ্য দীর্ঘ সময়ের জন্য স্টকের বাইরে থাকতে পারে এবং ক্যাটালগে ফিরে এলে নতুন পণ্য হিসাবে ফিরে আসতে পারে।


0

দ্রুত সমাধান

    <?php
    foreach ($_productCollection as $_product):
    $date = date("Y-m-d 00:00:00");
        $newtodate = $_product['news_to_date'];
        $newfromdate = $_product['news_from_date'];

    if (isset($newfromdate) and isset($newtodate) and $date >= $newfromdate and $date <= $newtodate) 
       {
          echo "Product is new";
        }?>
     <?php endforeach ?>

1
ধন্যবাদ চিরাগ। এই কোড উদাহরণটি সম্পর্কে আমাকে কেবল কিছুটা বিরক্ত করার বিষয়টি হ'ল ইনডেন্টেশন! :)
কালেঞ্জর্ডান

0

আপনি কোড নীচে চেষ্টা করতে পারেন

 $current_date = new DateTime($date); // compare date
 $from_date = new DateTime($this->getData('news_from_date')); // begin date
 $to_date = new DateTime($this->getData('news_to_date')); // end date        
 $new = ($current_date >= $from_date && $current_date <= $to_date);

কোথায় $thisঅবজেক্ট Mage_Catalog_Model_Productএবং আপনার যদি পণ্যটি ইতিমধ্যে লোড না করা হয় তবে তা লোড করতে হবে।


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