在Prestashop 1.5中限制某个国家/地区的类别

时间:2013-02-07 17:14:50

标签: prestashop

我需要在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甚至没有加载

如何做到这一点?

干杯

1 个答案:

答案 0 :(得分:1)

我在renderForm()函数结束之前使用以下代码解决了这个问题。 Piècederé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:我正在阅读的表基本上是'category'和'country'之间的关联表