Prestashop 从产品列表的附加字段中检索信息

Prestashop 从产品列表的附加字段中检索信息,prestashop,prestashop-1.6,Prestashop,Prestashop 1.6,我正在使用此免费示例向产品添加新的视频url字段。一切正常,我可以在product.tpl中看到新数据,但我无法将数据获取到产品列表。tpl对我来说非常重要的是,我想为每个产品添加播放按钮。我发现为此,我必须使用hookActionProductListOverride函数,但运气不好。有人能帮我吗 public function hookDisplayAdminProductsExtra($params) { $id_product = Tools::getValue('id_prod

我正在使用此免费示例向产品添加新的视频url字段。一切正常,我可以在
product.tpl
中看到新数据,但我无法将数据获取到
产品列表。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;
}

解决这个问题并不容易,也可以不那么难看,但在我的情况下,工作起来很有魅力

在与Belvg的模块共事了很多小时后,我使用了这个模块,几乎与相同的问题相同,但具有语言支持和更大的灵活性:

需要添加多个自定义字段,因此按照原始问题的要求更详细:

//添加更多字段
$sql='ALTERTABLE'_数据库前缀product_lang添加“自定义字段1”,“自定义字段2”“文本不为空”;
...
//为getCustomField()添加参数并乘行
$this->context->smarty->assign(数组)(
'custom_field1'=>this->getCustomField('custom_field1',(int)Tools::getValue('id_product'),
'custom_field2'=>this->getCustomField('custom_field2',(int)Tools::getValue('id_product')),
...
//展开actionProductUpdatea钩子
如果(!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'.'和id_product='.$id_产品='.$id_产品))
...
//这是丢失的部分!
//升级getCustomField()函数以接受多个自定义字段并注册全局变量
公共函数getCustomField($getKey,$id\u产品)
{
$result=Db::getInstance()->执行('SELECT'.$getKey',id_lang FROM'.\u Db_PREFIX.'product_lang,其中id_product='。(int)$id_product);
如果(!$result)
返回数组();
foreach($result作为$field){
$val=$field[$getKey];
$fields[$field['id_lang']]=$val;
如果(!空($val)){
!Configuration::updateValue($getKey,$val);
}
}
返回$fields;
}
在每个.tpl中调用
$custom_field1
$custom_field2
,如下所示:

{if$custom_field1}
{如果设置为($custom_field1)&&$custom_field1}
{$custom_field1}
{/if}
{如果$custom_field2}
{如果设置为($custom_field2)&&&$custom_field2}
{$custom_field2}
{/if}
希望有人也需要这个。谢谢