OpenCart を使用するプロジェクトに取り組み始めました。新しいオプションを追加しようとすると、奇妙な問題が発生します。
バックエンドで 2 つのテキスト オプションを作成し、それらを製品に割り当てます。そして、それは機能します。問題は、オプションがフロントエンドに正しくロードされていないことです。それらは正常に表示されますが、存在するはずのすべての変数 (具体的には product_option_id) を出力すると、それらは NULL になります。以前は問題に気づきませんでしたが、コードを変更するには product_option_id が必要です。
ページのオプションを print_f 経由で出力すると、次のようになります。
[0] => Array
(
[product_option_id] =>
[calc_group_id] => 0
[description] => ####
[option_id] => 469
[name] => ####
[type] => text
[option_value] =>
[required] => 0
)
[1] => Array
(
[product_option_id] =>
[calc_group_id] => 0
[description] => ####
[option_id] => 468
[name] => ####
[type] => text
[option_value] =>
[required] => 0
)
問題を OpenCart の製品モデル (catalog/model/catalog/product.php) に絞り込みました。
そしてこの行:
$product_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.sort_order");
この SQL ステートメントを試してみたところ、product_option_id も正確に返されます。phpmyadmin でテストした場合、SQL ステートメントは正しい値を返しますが、上記のコード行はそうではありません ($product_option_query->$rows と product_option_id などのいくつかの値を出力しました)。
オプションを間違った方法で作成したとは思えません。それともその可能性はありますか?興味深いことに、他のいくつかのオプション (select type オプション) や、作成したオプション (select type に設定されている場合) でさえ、product_option_id を含むすべての値を返します。