Прочитайте значение пользовательских опций продукта в пользовательском скрипте Opencart 2.икс

Прочитайте значение пользовательских опций продукта в пользовательском скрипте Opencart 2.икс

22.04.2019 03:46:18 Просмотров 29 Источник

Можно ли прочитать переменное значение пользовательского параметра, используя пару key value?

Я пытаюсь прочитать значение параметра для продукта в пользовательской функции.Я могу читать значение, ссылаясь на него с индексом массива, как показано ниже

$option = array_filter($this->request->post['option']); $product_serial_no = $option['93'] ;

Я получаю magic array index $option[93], считывая значение переменной в режиме отладки Neatbean.

enter image description here

Но индекс опции меняется для разных продуктов, поэтому я хочу прочитать значение переменной 'Serial Number', используя что-то вроде ассоциативного массива. Возможно ли это?

Параметры на странице продукта выглядят следующим образом.

enter image description here

У вопроса есть решение - Посмотреть?

Ответы - Прочитайте значение пользовательских опций продукта в пользовательском скрипте Opencart 2.икс / Read value of product's custom options in custom script of Opencart 2.x

Является ответом!
Dmitriy Zhuk

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

надеюсь, это поможет.

https://stackoverflow.com/questions/55794670/read-value-of-products-custom-options-in-custom-script-of-opencart-2-x/55795460#comment98260591_55795460
Я попробую это завтра и дам вам обратную связь.
https://stackoverflow.com/questions/55794670/read-value-of-products-custom-options-in-custom-script-of-opencart-2-x/55795460#comment98278621_55795460
Да, с вашим кодом у меня получилось. Теперь я получаю серийный номер следующим образом: - если (array_search('порядковый номер',$option_query->строка) ){ (инт)$serialnumber_id = $product_option_id; } // print_r($option_query->строка); ` я буду отмечать свой ответ как правильный.
https://stackoverflow.com/questions/55794670/read-value-of-products-custom-options-in-custom-script-of-opencart-2-x/55795460#comment98279794_55795460
Я даже упростить его следующим образом $product_options = $this->model_catalog_product->getProductOptions($ctrl->reque‌​st->post['product_id‌​']); foreach ($product_options as $eachoption) { if (array_search('Serial Number',$eachoption)) { (int)$serialnumber_id = $eachoption['product_option_id']; } }
https://stackoverflow.com/questions/55794670/read-value-of-products-custom-options-in-custom-script-of-opencart-2-x/55795460#comment98282703_55795460
круто, это стандартный способ получения опций, так что вы можете изменить его в соответствии с вашими потребностями. наслаждайтесь!
Помочь в развитии проекта:
Закрыть X