1

Prestashop1.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')
             ),

これで、値「submitAddcategory」がpostProcess関数で送信されているかどうかを確認し、そこで挿入クエリを実行することで、これらの値を保存できます。同様に、ブロックされた国のIDをデータベースからロードすることもできますが、国のリストでそれぞれの選択ボックスにチェックマークを付けるにはどうすればよいですか?

私の最初の「迅速で汚い」アイデアは、document.ready()内でjQueryセレクターを使用することでしたが、コードは他のすべての前に挿入され、jQueryがまだロードされていないため、機能しません。

これはどのように行うことができますか?

乾杯

4

1 に答える 1

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:私が読んでいるテーブルは、基本的に「カテゴリ」と「国」の間の連想テーブルです。

于 2013-02-11T18:30:47.047 に答える