Jump to content

импорт CSV только если есть значение. (import.php)


Recommended Posts

Помогите сделать функцию.

При импорте 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);
                }
            }
        }
    }
}             

 

Link to post
Share on other sites

методом проб, получился вот такой код:

если при импорте значение свойств в файле 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 by LUN
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...