LUN Posted February 23 Report Share Posted February 23 Помогите сделать функцию. При импорте csv файла товара, нужно сделать проверку существующих характеристики. Основные условия, если ячейка из csv файла пуста, то значение характеристики на сайте не изменяется. Если ячейка не пустая и у товара есть заполненная характеристики на сайте, то это значение удаляется, и заполняется новыми значениями... подскажите как правильно должно быть, а то чет не работает удаление... От программирования к сожалению далек, состряпал вот такой код, который работает на 40% из задуманного. $this->db->query('SELECT f.id FROM __features f WHERE f.name=? AND f.id in(SELECT feature_id FROM __categories_features AS cf WHERE cf.category_id =?) LIMIT 1', $feature_name, $category_id); if (!$feature_id = $this->db->result('id')) { $feature_id = $this->features->add_feature(array('name' => $feature_name)); } $this->db->query('SELECT value FROM s_options WHERE product_id = ? AND feature_id = ? LIMIT 1', $product_id, $feature_id); if (!$value = $this->db->result('')) { $this->features->add_feature_category($feature_id, $category_id); $opts = explode($this->option_delimiter, $feature_value); if (!empty($opts)) { if (is_array($opts)) { $this->features->delete_option($product_id, $feature_id); foreach ($opts as $opt) { $opt = trim($opt); if ($opt) { $this->features->update_option($product_id, $feature_id, $opt); } } } } } Quote Link to post Share on other sites
LUN Posted February 24 Author Report Share Posted February 24 (edited) методом проб, получился вот такой код: если при импорте значение свойств в файле csv пустое, значение на сайте не изменяется если есть значение в csv, перезаписывает это значение на сайте. Вдруг кому пригодится Насколько правильно он написан, не могу сказать, но свою функцию выполняет // Поиск или создание функции $this->db->query('SELECT f.id FROM __features f WHERE f.name=? AND f.id in(SELECT feature_id FROM __categories_features AS cf WHERE cf.category_id =?) LIMIT 1', $feature_name, $category_id); if (!$feature_id = $this->db->result('id')) { // Разбиение значения функции на массив $opts = explode($this->option_delimiter, $feature_value); // Проверяем, содержит ли $opts корректные значения if (!empty($opts)) { $has_valid_opts = false; foreach ($opts as $opt) { if (trim($opt) !== '') { $has_valid_opts = true; break; } } } // Если есть хотя бы одно корректное значение if ($has_valid_opts) { $feature_id = $this->features->add_feature(array('name' => $feature_name)); // Добавление функции в категорию $this->features->add_feature_category($feature_id, $category_id); // Добавление новых значений foreach ($opts as $opt) { $opt = trim($opt); if ($opt) { $this->features->update_option($product_id, $feature_id, $opt); } } } } else { // Выполнение запроса $this->db->query('SELECT value FROM __options WHERE product_id = ? AND feature_id LIMIT 1', $product_id); // Получение результата $value = $this->db->result('value'); if (!empty($value)) { // Разбиение значения функции на массив $opts = explode($this->option_delimiter, $feature_value); // Проверяем, содержит ли $opts корректные значения if (!empty($opts)) { $has_valid_opts = false; foreach ($opts as $opt) { if (trim($opt) !== '') { $has_valid_opts = true; break; } } } // Если есть хотя бы одно корректное значение if ($has_valid_opts) { // Удаление старых значений $this->db->query('DELETE FROM __options WHERE product_id = ? AND feature_id = ?', $product_id, $feature_id); // Добавление новых значений foreach ($opts as $opt) { $opt = trim($opt); if ($opt) { $this->features->update_option($product_id, $feature_id, $opt); } } } } if (empty($value)) { // Разбиение значения функции на массив $opts = explode($this->option_delimiter, $feature_value); if (!empty($opts)) { // Добавление новых значений foreach ($opts as $opt) { $opt = trim($opt); if ($opt) { $this->features->update_option($product_id, $feature_id, $opt); } } } } } Edited February 24 by LUN Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.