새로운 제품인지 확인하는 방법


15

빠른 검색에서 내가 찾은 유일한 참조는 Magento 포럼에 있었으며 제품이 새로운 것인지 확인하기 위해 사용자 지정 코드를 작성해야 함을 제안합니다.

나는 Featured 드롭 다운과 제품을 New From DateSet Product as New To Date 필드 뿐만 아니라 Featured 드롭 다운 을 고려 하는 간단한 isNew()방법 이 있다고 생각했을 것입니다.Mage_Catalog_Model_Product

커스텀 코덱이 필요합니까?


isNew ()는 이것이 DB에 새로운 것인지 (즉, 아직 저장되지 않았으며 아직 엔티티 ID를 가지고 있지 않은 경우가
많음

@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()

내가 작업하고있는 프로젝트에서 일부 제품의 값은 "created_at"과 다른 "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
고마워 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.