2014-08-29 57 views
1

我使用此免費module示例向產品添加新視頻網址字段。一切工作正常,我可以看到product.tpl新數據,但我無法獲得數據到product-list.tpl什麼對我來說非常重要,我想爲每個產品添加播放按鈕。我發現爲了這個目的,我必須使用hookActionProductListOverride函數,但沒有運氣。任何人都可以幫助我?從附加字段檢索信息到產品列表

public function hookDisplayAdminProductsExtra($params) { 
    $id_product = Tools::getValue('id_product'); 
    $sampleObj = Belvg_Sample::loadByIdProduct($id_product); 
    if(!empty($sampleObj) && isset($sampleObj->id)){ 
     $this->context->smarty->assign(array(
      'belvg_textarea' => $sampleObj->textarea, 
     )); 
    } 

    return $this->display(__FILE__, 'views/admin/sample.tpl'); 
} 

public function hookActionProductUpdate($params) { 
    $id_product = Tools::getValue('id_product'); 
    $sampleObj = Belvg_Sample::loadByIdProduct($id_product); 
    $sampleObj->textarea = Tools::getValue('belvg_sample'); 
    $sampleObj->id_product = $id_product; 

    if(!empty($sampleObj) && isset($sampleObj->id)){ 
     $sampleObj->update(); 
    } else { 
     $sampleObj->add(); 
    } 
} 

public function hookDisplayFooterProduct($params) { 
    $id_product = Tools::getValue('id_product'); 
    $sampleObj = Belvg_Sample::loadByIdProduct($id_product); 
    if(!empty($sampleObj) && isset($sampleObj->id)){ 
     $this->context->smarty->assign(array(
      'belvg_textarea' => $sampleObj->textarea, 
     )); 
    } 

    echo $sampleObj->textarea; 
} 

回答

1

不容易解決這個問題,可以不那麼醜陋,但在我的情況下工作就像一個魅力。

很多與Belvg的模塊花了幾個小時後,我用這個模塊,幾乎同樣的問題相同,但有語言支持和更大的靈活性:http://nemops.com/prestashop-products-new-tabs-fields

需要添加多個自定義字段,所以它更詳細的原始問題需要:

// adding more fields 
    $sql = 'ALTER TABLE ' . _DB_PREFIX_ . 'product_lang ADD `custom_field1`, `custom_field2` TEXT NOT NULL'; 
    ... 

    // adding argument for the getCustomField() and multiply lines 
    $this->context->smarty->assign(array(
     'custom_field1' => $this->getCustomField('custom_field1',(int)Tools::getValue('id_product')), 
     'custom_field2' => $this->getCustomField('custom_field2',(int)Tools::getValue('id_product')), 
    ... 

    // expanding the actionProductUpdatea hook 
     if(!Db::getInstance()->update('product_lang', array('custom_field1'=> pSQL(Tools::getValue('custom_field1_'.$lang['id_lang'])),'custom_field2'=> pSQL(Tools::getValue('custom_field2_'.$lang['id_lang']))) ,'id_lang = ' . $lang['id_lang'] .' AND id_product = ' .$id_product)) 
    ... 

    // this is the missing part! 
    // upgrading the getCustomField() function to accept multiple custom fields and registering global vars 
public function getCustomField($getKey,$id_product) 
{ 
    $result = Db::getInstance()->ExecuteS('SELECT '.$getKey.', id_lang FROM '._DB_PREFIX_.'product_lang WHERE id_product = ' . (int)$id_product); 

    if(!$result) 
     return array(); 

    foreach ($result as $field) { 
     $val=$field[$getKey]; 
     $fields[$field['id_lang']] = $val; 
     if(!empty($val)){ 
      !Configuration::updateValue($getKey, $val); 
     } 
    } 
    return $fields; 
} 

調用每個.tpl的$custom_field1$custom_field2做工精細是這樣的:

{if $custom_field1} 
     {if isset($custom_field1) && $custom_field1} 
      <div>{$custom_field1}</div> 
    {/if} 
    {if $custom_field2} 
     {if isset($custom_field2) && $custom_field2} 
      <div>{$custom_field2}</div> 
    {/if} 

希望有人也需要這個。謝謝!