1

我需要在 Prestashop 1.5 中将一个类别限制为一组国家/地区。此限制将阻止运输属于此类的产品;因此,用户仍然可以看到产品,但无法购买。

理想情况下,我想开发一个模块,在类别的编辑页面中插入国家列表(复选框样式,如模块 -> 支付页面 (AdminPayment)),但我无法这样做。

为什么我不能简单地将以下代码粘贴到 renderForm() 函数中?如果我这样做,只有描述是可见的......

array(
    'items' =>Country::getCountries(Context::getContext()->language->id),
    'title' => $this->l('Country restrictions'),
    'desc' => $this->l('Please mark the checkbox(es) for the country or countries for which you want to block the shipping.'),
    'name_id' => 'country',
    'identifier' => 'id_country',
    'icon' => 'world',
    ),

编辑: 我设法让国家名单工作:

array(
    'type' => 'checkbox',
    'label' => $this->l('Restricted Countries').':',
    'class' => 'sel_country',
    'name' => 'restricted_countries',
    'values' => array(
        'query' => Country::getCountries(Context::getContext()->language->id),
        'id' => 'id_country',
            'name' => 'name'
    ),
    'desc' => $this->l('Mark all the countries you want to block the selling to. The restrictions will always be applied to every subcategory as well')
             ),

现在,我可以通过检查是否在 postProcess 函数中提交了值“submitAddcategory”并在那里运行插入查询来保存这些值。同样,我也可以从数据库中加载被封锁国家的 ID,但是如何在国家列表中勾选相应的选择框?

我最初的“快速而肮脏”的想法是在 document.ready() 中使用 jQuery 选择器,但是代码会在其他所有内容之前插入,因此它不会工作,因为 jQuery 甚至还没有加载。

如何才能做到这一点?

干杯

4

1 回答 1

1

我在 renderForm() 函数结束之前使用以下代码解决了这个问题。Pièce de résistance 是 $this->fields_value,遗憾的是我不知道它的存在。

public function getRestrictedCountries($obj)
    {
        // Loading blacklisted countries
        $country = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
            SELECT DISTINCT id_country
            FROM `'._DB_PREFIX_.'category_country_restriction`
            WHERE id_category = ' . (int)Tools::getValue('id_category') . ';');

        $blacklisted_countries = array();

        if (is_array($country))
            foreach ($country as $cnt)
                $blacklisted_countries[] = $cnt['id_country'];

        // Global country list
        $c_todos = Country::getCountries(Context::getContext()->language->id);

        // Crossmatching everything
        foreach ($c_todos as $c)
            $this->fields_value['restricted_countries_'.$c['id_country']] = Tools::getValue('restricted_countries_'.$c['id_country'], (in_array($c['id_country'], $blacklisted_countries)));
    }

PS:我正在阅读的表格基本上是“类别”和“国家”之间的关联表

于 2013-02-11T18:30:47.047 回答