Bir ürünün yeni olup olmadığı nasıl kontrol edilir


15

Hızlı bir aramadan bulduğum tek referans Magento forumlarındaydı, bu da bir ürünün yeni olup olmadığını kontrol etmek için bazı özel kodlar yazmanız gerektiğini gösteriyor.

Öne çıkan açılır listenin yanı sıra Ürünü Tarihten Yeni Olarak Ayarla ve Ürünü Tarihe Yeni Olarak Ayarla alanlarını dikkate alan basit bir isNew()yöntem olacağını düşünürdüm - ama durum böyle değil mi?Mage_Catalog_Model_Product

Özel kodlar gerekli mi?


isNew () yalnızca bunun DB için yeni olup olmadığını kontrol eder (yani henüz kaydedilmemiştir ve henüz bir varlık kimliğine sahip değildir, çoğu zaman
oto-artış

@Fooman Bence bu isObjectNew()ama söylediklerini anlıyorum.
kalenjordan

Bu bağlantıyı kontrol edin. Nasıl yapılacağını belirtir. universalcoder.wordpress.com/2014/04/14/…
Dexter

Yanıtlar:


13

Tarihleri ​​elle dönüştürmemeli ve doğrulamamalısınız, çünkü bu saat dilimi sorunlarına neden olabilir. Magento yerleşik yöntemde isStoreDateInInterval()de Mage_Core_Model_Localesınıfta. Yani böyle görünecek bir yardımcı yöntem oluşturmalısınız

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

Daha fazla bilgiyi burada bulabilirsiniz http://quicktips.ru/all/check-product-is-new/


İyi çağrı çekin - bunun için teşekkürler. Cevabımı çok hızlı güncelledim.
kalenjordan

6

Tek bir yöntem çağrısı yok. En azından farkında değilim.

Yine de her zaman böyle bir şey kullanabilirsiniz:

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

Üzgünüm PHP tarih karşılaştırmasında iyi değilim.

Bu arada iyi bir soru.


GetNewsToDate'in de tanımlanmadığı ürünü göstermek için işlevinizi uyarladım. <? php if ((tarih ("Ymd")> = substr ($ _ ürün-> getNewsFromDate (), 0, 10) && $ _product-> getNewsFromDate ()! = "") && (tarih ("Ymd") < = substr ($ _ ürün-> getNewsToDate (), 0, 10) || $ _product-> getNewsToDate () == "")):?> ... <? php endif?>
Eduardo

5

Referans olarak, yeniliği kontrol etmek için bulduğum yardımcı yöntem. Hem Öne Çıkan açılır listeyi hem de tarihleri ​​destekler ve her iki tarihin de boş olmasını destekler.

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

GÜNCELLEME: @Rooooomine'e, önerdiğim bu manuel tarih dönüşümünün potansiyel yerel sorunlardan dolayı çok kötü bir fikir olduğunu belirttiği için teşekkürler. Mage::app()->getLocale()->isStoreDateInInterval($product->getStoreId(), $newsFromDate, $newsToDate)Bunun yerine göz atın .


3

Birisi için yararlı olabilecek bir hassasiyet. Tüm bu yanıtlar "news_from_date" özniteliğini kullanıyor ancak veritabanında ürünün gerçek oluşturulma tarihini almak istiyorsanız, yöntemi kullanarak "created_at" özniteliğini almalısınız:

$product->getCreatedAt()

Üzerinde çalıştığım projede, bazı ürünlerin "news_from_date" değeri "created_at" değerinden farklı olabilir. Gerçekten de iş kurallarına göre, bir ürün uzun süre stokta kalmayabilir ve daha sonra katalogda geri geldiğinde yeni ürünler olarak geri gelebilir.


0

Hızlı Çözüm

    <?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
Teşekkürler Chirag. Bu kod örneği hakkında beni biraz rahatsız eden tek şey girintidir! :)
kalenjordan

0

Aşağıdaki kodu deneyebilirsiniz

 $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);

$thisNesnesi nerede Mage_Catalog_Model_Productve zaten yüklü değilse ürünü yüklemeniz gerekir.


1
Teşekkürler Anshu - Bence bu boş veya tarihlerden boş desteklemeyebilir.
kalenjordan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.