Come verificare se un prodotto è nuovo


15

Da una rapida ricerca l'unico riferimento che ho trovato era sui forum di Magento che suggerisce che devi scrivere un codice personalizzato per verificare se un prodotto è nuovo.

Avrei pensato che ci sarebbe stato un isNew()metodo semplice per Mage_Catalog_Model_Producttenere conto del menu a discesa In primo piano e dei campi Imposta prodotto come nuovo dalla data e Imposta prodotto come nuovo fino alla data - ma non sembra che sia così?

Sono necessari i codez personalizzati?


isNew () sta solo verificando se si tratta di una novità del DB (ovvero non è stato ancora salvato e non ha ancora un ID entità, il più delle volte l'autoincremento)
Kristof a Fooman

@Fooman Penso che sia isObjectNew()ma capisco quello che stai dicendo.
Kalenjordan,

Controlla questo link. Indica come farlo. universalcoder.wordpress.com/2014/04/14/…
Dexter

Risposte:


13

Non devi assolutamente convertire e convalidare le date manualmente, perché ciò può causare problemi di fuso orario. Magento ha un metodo integrato isStoreDateInInterval()in Mage_Core_Model_Localeclasse. Quindi dovresti creare un metodo di supporto che può assomigliare a questo

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

Maggiori dettagli puoi trovare qui http://quicktips.ru/all/check-product-is-new/


Spara bene, grazie per quello. Ho aggiornato la mia risposta molto velocemente.
Kalenjordan,

6

Non esiste una singola chiamata di metodo. Almeno non ne sono consapevole.

Tuttavia puoi sempre usare qualcosa del genere:

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

Mi dispiace non sono bravo nel confronto delle date PHP.

Buona domanda a proposito.


Ho adattato la tua funzione per mostrare il prodotto che non ha definito anche NewNewstoDate. <? php if ((date ("Ymd")> = substr ($ _ product-> getNewsFromDate (), 0, 10) && $ _product-> getNewsFromDate ()! = "") && (date ("Ymd") < = substr ($ _ product-> getNewsToDate (), 0, 10) || $ _product-> getNewsToDate () == "")):?> ... <? php endif?>
Eduardo

5

Per riferimento, ecco il metodo di supporto che mi è venuto in mente per verificare la novità. Supporta sia il menu a discesa In primo piano che le date e supporta anche la data come vuota.

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

AGGIORNAMENTO: Grazie a @Rooooomine per aver menzionato che questa conversione manuale della data che ho suggerito è una pessima idea a causa di potenziali problemi locali. Guarda Mage::app()->getLocale()->isStoreDateInInterval($product->getStoreId(), $newsFromDate, $newsToDate)invece.


3

Una precisione che potrebbe essere utile a qualcuno. Tutte queste risposte utilizzano l'attributo "news_from_date" ma se si desidera ottenere la data effettiva di creazione del prodotto nel database, è necessario ottenere l'attributo "Created_at" utilizzando il metodo:

$product->getCreatedAt()

Nel progetto a cui sto lavorando, alcuni prodotti potrebbero avere un valore di "news_from_date" diverso da "Created_at". In effetti, secondo le regole aziendali, un prodotto può essere esaurito per molto tempo e quindi tornare come nuovi prodotti quando torna nel catalogo.


0

Soluzione rapida

    <?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
Grazie Chirag. L'unica cosa che mi disturba un po 'in questo esempio di codice è il rientro! :)
kalenjordan

0

Puoi provare sotto il codice

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

Dove si $thistrova l'oggetto Mage_Catalog_Model_Producte è necessario caricare il prodotto se non è già caricato.


1
Grazie Anshu - Penso che questo potrebbe non supportare il vuoto da o per le date però.
Kalenjordan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.