यदि कोई उत्पाद नया है, तो कैसे जांचें


15

एक त्वरित खोज से मुझे जो एकमात्र संदर्भ मिला वह मैगनेटो मंचों पर था जो यह सुझाव दे रहा है कि यदि कोई उत्पाद नया है तो आपको यह जांचने के लिए कुछ कस्टम कोड लिखना होगा।

मैंने सोचा होगा कि एक सरल isNew()विधि होगी Mage_Catalog_Model_Productजिस पर विशेष रूप से ड्रॉपडाउन के साथ-साथ सेट उत्पाद के रूप में नई तिथि और सेट उत्पाद के रूप में नए से तारीख फ़ील्ड्स को ध्यान में रखा जाता है - लेकिन ऐसा नहीं लगता है?

क्या तेह कस्टम कोड की जरूरत है?


isNew () केवल जाँच कर रहा है कि क्या यह DB के लिए नया है (अर्थात इसे अभी तक सहेजा नहीं गया है और इसकी अभी तक कोई इकाई आईडी नहीं है, अधिकांश समय
ऑटोइन्क्रिमेंट है

@ मुझे लगता है कि है, isObjectNew()लेकिन मुझे लगता है कि तुम क्या कह रहे हो।
kalenjordan

इस लिंक को देखें। यह बताता है कि यह कैसे करना है। Universalcoder.wordpress.com/2014/04/14/…
Dexter

जवाबों:


13

आपको तिथियों को मैन्युअल रूप से परिवर्तित और मान्य नहीं करना चाहिए, क्योंकि इससे टाइमज़ोन समस्याएँ हो सकती हैं। Magento 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/


अच्छी कॉल शूट करें - इसके लिए धन्यवाद। मैंने अपना उत्तर वास्तविक त्वरित अपडेट कर दिया है।
कालेंजर्डन

6

कोई एकल विधि कॉल नहीं है। कम से कम मुझे इसकी जानकारी नहीं है।

फिर भी आप हमेशा कुछ इस तरह का उपयोग कर सकते हैं:

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

क्षमा करें, मैं PHP की तारीख की तुलना में अच्छा नहीं हूँ।

वैसे अच्छा सवाल है।


मैंने उत्पाद को दिखाने के लिए आपके फ़ंक्शन को अनुकूलित किया है, जिनके पास नहीं है, तो निश्चित रूप से भी निर्धारित करें। <? php if ((("Ymd")> = root ($ _ उत्पाद-> getNewsFromDate (), 0, 10) && $ _product-> getNewsFromDate ()! = = ") और& (" Ymd ") <! = root ($ _ उत्पाद-> getNewsToDate (), 0, 10) || $ _product-> getNewsToDate () == "")::? ... ... <? php endif?>
Eduardo

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

अद्यतन: यह उल्लेख करने के लिए @Rooooomine का धन्यवाद कि मैंने जो मैनुअल तिथि रूपांतरण का सुझाव दिया था, संभावित स्थानीय मुद्दों के कारण बहुत बुरा विचार है। इसके Mage::app()->getLocale()->isStoreDateInInterval($product->getStoreId(), $newsFromDate, $newsToDate)बजाय बाहर की जाँच करें ।


3

एक सटीक जो किसी के लिए उपयोगी हो सकती है। ये सभी उत्तर विशेषता "news_from_date" का उपयोग कर रहे हैं, लेकिन यदि आप डेटाबेस में उत्पाद के निर्माण की वास्तविक तिथि प्राप्त करना चाहते हैं, तो आपको विधि का उपयोग करके "create_at" विशेषता प्राप्त करनी चाहिए:

$product->getCreatedAt()

जिस प्रोजेक्ट में मैं काम कर रहा हूं, उसमें कुछ उत्पादों का मूल्य "news_from_date" से अलग हो सकता है। दरअसल व्यावसायिक नियमों के अनुसार, एक उत्पाद लंबे समय तक स्टॉक से बाहर हो सकता है और फिर कैटलॉग में वापस आने पर नए उत्पादों के रूप में वापस आ सकता है।


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
धन्यवाद अंशु - मुझे लगता है कि यह खाली से या तारीख तक समर्थन नहीं कर सकता है।
कलनजोर्डन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.