2014-08-29 3 views
1

Я использую этот бесплатный образец module, чтобы добавить новое видео URL-адрес продукта. Все работает отлично, я вижу новые данные в 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; 
} 

Вызов $custom_field1 и $custom_field2 в каждом .TPL работает нормально, как это:

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

Надеюсь, кому-то это тоже понадобится. Спасибо!

 Смежные вопросы

  • Нет связанных вопросов^_^