2017-02-23 34 views
0

我想將product.available_date添加到Prestashop 1.6的購物車中。將可用日期添加到cart.php中Prestashop

添加以下線路在購物推車產品線-TPL

{if isset($product.available_date) && $product.available_date > $smarty.now|date_format:'%Y-%m-%d'} 
    <span id="availability_date_label">{l s='Availability date:'}</span> 
    <span id="availability_date_value"> 
    {if Validate::isDate($product.available_date)} 
    {dateFormat date=$product.available_date full=false} 
    {/if} 
    </span> 

但我發現AVAILABLE_DATE的未在Cart.php設置

我發現下面的函數在cart.php

公共職能的getProducts($刷新=假,$ id_product =假,$ id_country = NULL)

,我認爲是用於收集產品數據,它有一個SQL->選擇這樣的:

// Build query 
    $sql = new DbQuery(); 

    // Build SELECT 
    $sql->select('cp.`id_product_attribute`, cp.`id_product`, cp.`quantity` AS cart_quantity, cp.id_shop, pl.`name`, p.`is_virtual`, 
        pl.`description_short`, pl.`available_now`, pl.`available_later`, **(added p.`available_date` here)**,product_shop.`id_category_default`, p.`id_supplier`, 
        p.`id_manufacturer`, product_shop.`on_sale`, product_shop.`ecotax`, product_shop.`additional_shipping_cost`, 
        product_shop.`available_for_order`, product_shop.`price`, product_shop.`active`, product_shop.`unity`, product_shop.`unit_price_ratio`, 
        stock.`quantity` AS quantity_available, p.`width`, p.`height`, p.`depth`, stock.`out_of_stock`, p.`weight`, 
        p.`date_add`, p.`date_upd`, IFNULL(stock.quantity, 0) as quantity, pl.`link_rewrite`, cl.`link_rewrite` AS category, 
        CONCAT(LPAD(cp.`id_product`, 10, 0), LPAD(IFNULL(cp.`id_product_attribute`, 0), 10, 0), IFNULL(cp.`id_address_delivery`, 0)) AS unique_id, cp.id_address_delivery, 
        product_shop.advanced_stock_management, ps.product_supplier_reference supplier_reference'); 

    // Build FROM 
    $sql->from('cart_product', 'cp'); 

    // Build JOIN 
    $sql->leftJoin('product', 'p', 'p.`id_product` = cp.`id_product`'); 
    $sql->innerJoin('product_shop', 'product_shop', '(product_shop.`id_shop` = cp.`id_shop` AND product_shop.`id_product` = p.`id_product`)'); 
    $sql->leftJoin('product_lang', 'pl', ' 
     p.`id_product` = pl.`id_product` 
     AND pl.`id_lang` = '.(int)$this->id_lang.Shop::addSqlRestrictionOnLang('pl', 'cp.id_shop') 
    ); 

    $sql->leftJoin('category_lang', 'cl', ' 
     product_shop.`id_category_default` = cl.`id_category` 
     AND cl.`id_lang` = '.(int)$this->id_lang.Shop::addSqlRestrictionOnLang('cl', 'cp.id_shop') 
    ); 

    $sql->leftJoin('product_supplier', 'ps', 'ps.`id_product` = cp.`id_product` AND ps.`id_product_attribute` = cp.`id_product_attribute` AND ps.`id_supplier` = p.`id_supplier`'); 

    // @todo test if everything is ok, then refactorise call of this method 
    $sql->join(Product::sqlStock('cp', 'cp')); 

    // Build WHERE clauses 
    $sql->where('cp.`id_cart` = '.(int)$this->id); 
    if ($id_product) { 
     $sql->where('cp.`id_product` = '.(int)$id_product); 
    } 
    $sql->where('p.`id_product` IS NOT NULL'); 

    // Build ORDER BY 
    $sql->orderBy('cp.`date_add`, cp.`id_product`, cp.`id_product_attribute` ASC'); 

    if (Customization::isFeatureActive()) { 
     $sql->select('cu.`id_customization`, cu.`quantity` AS customization_quantity'); 
     $sql->leftJoin('customization', 'cu', 
      'p.`id_product` = cu.`id_product` AND cp.`id_product_attribute` = cu.`id_product_attribute` AND cu.`id_cart` = '.(int)$this->id); 
     $sql->groupBy('cp.`id_product_attribute`, cp.`id_product`, cp.`id_shop`'); 
    } else { 
     $sql->select('NULL AS customization_quantity, NULL AS id_customization'); 
    } 

    if (Combination::isFeatureActive()) { 
     $sql->select(' 
      product_attribute_shop.`price` AS price_attribute, product_attribute_shop.`ecotax` AS ecotax_attr, 
      IF (IFNULL(pa.`reference`, \'\') = \'\', p.`reference`, pa.`reference`) AS reference, 
      (p.`weight`+ pa.`weight`) weight_attribute, 
      IF (IFNULL(pa.`ean13`, \'\') = \'\', p.`ean13`, pa.`ean13`) AS ean13, 
      IF (IFNULL(pa.`upc`, \'\') = \'\', p.`upc`, pa.`upc`) AS upc, 
      IFNULL(product_attribute_shop.`minimal_quantity`, product_shop.`minimal_quantity`) as minimal_quantity, 
      IF(product_attribute_shop.wholesale_price > 0, product_attribute_shop.wholesale_price, product_shop.`wholesale_price`) wholesale_price 
     '); 

     $sql->leftJoin('product_attribute', 'pa', 'pa.`id_product_attribute` = cp.`id_product_attribute`'); 
     $sql->leftJoin('product_attribute_shop', 'product_attribute_shop', '(product_attribute_shop.`id_shop` = cp.`id_shop` AND product_attribute_shop.`id_product_attribute` = pa.`id_product_attribute`)'); 
    } else { 
     $sql->select(
      'p.`reference` AS reference, p.`ean13`, 
      p.`upc` AS upc, product_shop.`minimal_quantity` AS minimal_quantity, product_shop.`wholesale_price` wholesale_price' 
     ); 
    } 

    $sql->select('image_shop.`id_image` id_image, il.`legend`'); 
    $sql->leftJoin('image_shop', 'image_shop', 'image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop='.(int)$this->id_shop); 
    $sql->leftJoin('image_lang', 'il', 'il.`id_image` = image_shop.`id_image` AND il.`id_lang` = '.(int)$this->id_lang); 

    $result = Db::getInstance()->executeS($sql); 

我試着在查詢中加入p.available_date,並得到了日期,但如果一個產品有一個組合。然後在兩個組合上添加相同的日期。

任何人都知道如何使它適用於組合?

回答

0

以上查詢將通過將購物車表與產品,類別和製造商表連接來提取數據。上述查詢中沒有聯合組合。但是,你已經注意到了,系統是從上面查詢,如果組合特徵提取id_product_attribute每一個產品是主動進店,然後系統已經具備條件以獲得組合數據,如下圖所示:

if (Combination::isFeatureActive()) { 
    $sql->select(' 
      product_attribute_shop.`price` AS price_attribute, product_attribute_shop.`ecotax` AS ecotax_attr, 
      IF (IFNULL(pa.`reference`, \'\') = \'\', p.`reference`, pa.`reference`) AS reference, 
      (p.`weight`+ pa.`weight`) weight_attribute, 
      IF (IFNULL(pa.`ean13`, \'\') = \'\', p.`ean13`, pa.`ean13`) AS ean13, 
      IF (IFNULL(pa.`isbn`, \'\') = \'\', p.`isbn`, pa.`isbn`) AS isbn, 
      IF (IFNULL(pa.`upc`, \'\') = \'\', p.`upc`, pa.`upc`) AS upc, 
      IFNULL(product_attribute_shop.`minimal_quantity`, product_shop.`minimal_quantity`) as minimal_quantity, 
      IF(product_attribute_shop.wholesale_price > 0, product_attribute_shop.wholesale_price, product_shop.`wholesale_price`) wholesale_price 
     '); 
     $sql->leftJoin('product_attribute', 'pa', 'pa.`id_product_attribute` = cp.`id_product_attribute`'); 
     $sql->leftJoin('product_attribute_shop', 'product_attribute_shop', '(product_attribute_shop.`id_shop` = cp.`id_shop` AND product_attribute_shop.`id_product_attribute` = pa.`id_product_attribute`)'); 
} else { 
     $sql->select(
      'p.`reference` AS reference, p.`ean13`, p.`isbn`, 
      p.`upc` AS upc, product_shop.`minimal_quantity` AS minimal_quantity, product_shop.`wholesale_price` wholesale_price' 
     ); 
} 

爲了得到組合可用日期,只是在選擇查詢添加可用日期列如下圖所示代碼:

$sql->select('pa.available_date as combination_available_date, 
     product_attribute_shop.`price` AS price_attribute, product_attribute_shop.`ecotax` AS ecotax_attr, 
     IF (IFNULL(pa.`reference`, \'\') = \'\', p.`reference`, pa.`reference`) AS reference, 
     (p.`weight`+ pa.`weight`) weight_attribute, 
     IF (IFNULL(pa.`ean13`, \'\') = \'\', p.`ean13`, pa.`ean13`) AS ean13, 
     IF (IFNULL(pa.`isbn`, \'\') = \'\', p.`isbn`, pa.`isbn`) AS isbn, 
     IF (IFNULL(pa.`upc`, \'\') = \'\', p.`upc`, pa.`upc`) AS upc, 
     IFNULL(product_attribute_shop.`minimal_quantity`, product_shop.`minimal_quantity`) as minimal_quantity, 
     IF(product_attribute_shop.wholesale_price > 0, product_attribute_shop.wholesale_price, product_shop.`wholesale_price`) wholesale_price 
    '); 
+0

感謝您的答覆,但它並沒有什麼幫助。如果我在其中一個組合上填寫日期,那麼仍然會獲得屬性的相同日期。 –

+0

http://prntscr.com/ed61iu –

+0

我可能需要做tpl文件中的任何其他事情,以及調用組合的日期? –