Прочитайте значение пользовательских опций продукта в пользовательском скрипте Opencart 2.икс
Можно ли прочитать переменное значение пользовательского параметра, используя пару key value?
Я пытаюсь прочитать значение параметра для продукта в пользовательской функции.Я могу читать значение, ссылаясь на него с индексом массива, как показано ниже
$option = array_filter($this->request->post['option']);
$product_serial_no = $option['93'] ;
Я получаю magic array index $option[93]
, считывая значение переменной в режиме отладки Neatbean.
Но индекс опции меняется для разных продуктов, поэтому я хочу прочитать значение переменной 'Serial Number', используя что-то вроде ассоциативного массива. Возможно ли это?
Параметры на странице продукта выглядят следующим образом.
Ответы - Прочитайте значение пользовательских опций продукта в пользовательском скрипте Opencart 2.икс / Read value of product's custom options in custom script of Opencart 2.x

22.04.2019 04:49:39
когда вы просматриваете страницу продукта и говорите, что вы выбрали некоторые из вариантов и нажмите кнопку "Добавить в корзину", сообщение будет нести этот массив
$_POST ['option'] = array (93 = > '22222') (как вы представили в своем примере)
93 - это $product_option_id
, и он позволяет вам получить всю необходимую информацию с помощью этого запроса:
$product_id = $this->request->post['product_id'];
foreach ($this->request->post['option']) as $product_option_id => $value) {
$option_query = $this->db->query("SELECT
po.product_option_id,
po.option_id,
od.name,
o.type
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_option_id = '" . (int)$product_option_id . "'
AND po.product_id = '" . (int)$product_id . "'
AND od.language_id = '" . (int)$this->config->get('config_language_id') . "'");
print_r($option_query->row);
}
Этой информации должно быть достаточно для проведения любых манипуляций с опциями.
если опция имеет тип select
или radio
, вы можете запросить также возможные варианты, такие как этот
//... put this inside the foreach loop, listed above right after print_r($option_query->row);
if ($option_query->row['type'] == 'select' || $option_query->row['type'] == 'radio') {
$option_value_query = $this->db->query("SELECT
pov.option_value_id,
ovd.name,
pov.quantity,
pov.subtract,
pov.price,
pov.price_prefix,
pov.points,
pov.points_prefix,
pov.weight,
pov.weight_prefix
FROM " . DB_PREFIX . "product_option_value pov
LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id)
LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id)
WHERE pov.product_option_value_id = '" . (int)$value . "'
AND pov.product_option_id = '" . (int)$product_option_id . "'
AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
print_r($option_value_query->row);
}
И в случае, если у вас есть флажок (как в примере выше)
//...also place this in the loop foreach in the code above.
if ($option_query->row['type'] == 'checkbox' && is_array($value)){
foreach ($value as $product_option_value_id) {
$option_value_query = $this->db->query("SELECT
pov.option_value_id,
pov.quantity,
pov.subtract,
pov.price,
pov.price_prefix,
pov.points,
pov.points_prefix,
pov.weight,
pov.weight_prefix,
ovd.name
FROM " . DB_PREFIX . "product_option_value pov
LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (pov.option_value_id = ovd.option_value_id)
WHERE pov.product_option_value_id = '" . (int)$product_option_value_id . "'
AND pov.product_option_id = '" . (int)$product_option_id . "'
AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
print_r($option_value_query->row);
}
}
Вы можете просмотреть этот точный код в system/library/cart/cart.php
надеюсь, это поможет.



$product_options = $this->model_catalog_product->getProductOptions($ctrl->request->post['product_id']); foreach ($product_options as $eachoption) { if (array_search('Serial Number',$eachoption)) { (int)$serialnumber_id = $eachoption['product_option_id']; } }
