วิธีตรวจสอบว่าเป็นสินค้าใหม่


15

จากการค้นหาอย่างรวดเร็วมีเพียงการอ้างอิงเดียวที่ฉันพบคือในฟอรัม Magentoซึ่งแนะนำว่าคุณต้องเขียนโค้ดที่กำหนดเองเพื่อตรวจสอบว่าผลิตภัณฑ์ใหม่หรือไม่

ฉันคิดว่าจะมีisNew()วิธีการง่ายๆในการMage_Catalog_Model_Productคำนึงถึงรายการแบบหล่นลงที่แนะนำรวมถึงการตั้งค่าผลิตภัณฑ์เป็นใหม่จากวันที่และตั้งผลิตภัณฑ์เป็นใหม่ถึงวันที่ - แต่ดูเหมือนจะไม่เป็นเช่นนั้น?

จำเป็นต้องใช้ codez ที่กำหนดเองหรือไม่?


isNew () กำลังตรวจสอบว่านี่เป็นสิ่งใหม่สำหรับฐานข้อมูล (เช่นยังไม่ได้รับการบันทึกและยังไม่มีรหัสเอนทิตีซึ่งส่วนใหญ่เป็นระบบอัตโนมัติ)
Kristof ที่ Fooman

@Fooman ฉันคิดว่านั่น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/


ขอให้โทรดี - ขอบคุณสำหรับสิ่งนั้น ฉันได้อัปเดตคำตอบจริง ๆ แล้ว
kalenjordan

6

ไม่มีการเรียกวิธีการเดียว อย่างน้อยฉันก็ไม่รู้

อย่างไรก็ตามคุณสามารถใช้สิ่งนี้:

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

ขออภัยฉันไม่ดีในการเปรียบเทียบวันที่ของ PHP

คำถามที่ดีโดยวิธีการ


ฉันปรับฟังก์ชันของคุณเพื่อแสดงผลิตภัณฑ์ที่ไม่มี getNewsToDate ที่แน่นอนเช่นกัน <? php if ((date ("Ymd")> = substr ($ _ product-> getNewsFromDate (), 0, 10) && $ _product-> getNewsFromDate ()! = "") && (date ("Ymd") < = substr ($ _ product-> 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" แต่ถ้าคุณต้องการได้รับวันที่สร้างผลิตภัณฑ์ในฐานข้อมูลคุณควรได้แอตทริบิวต์ "created_at" โดยใช้วิธีการ:

$product->getCreatedAt()

ในโครงการที่ฉันกำลังดำเนินการผลิตภัณฑ์บางอย่างอาจมีค่าเป็น "news_from_date" แตกต่างจาก "created_at" ตามกฎเกณฑ์ทางธุรกิจผลิตภัณฑ์สามารถหมดสต็อกเป็นเวลานานและกลับมาเป็นผลิตภัณฑ์ใหม่เมื่อกลับมาในแคตตาล็อก


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
ขอบคุณ Chirag สิ่งเดียวที่รบกวนฉันเล็กน้อยเกี่ยวกับตัวอย่างรหัสนี้คือการเยื้อง! :)
kalenjordan

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
ขอบคุณ Anshu - ฉันคิดว่านี่อาจไม่สนับสนุนเปล่า ๆ
kalenjordan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.