mishanya Опубликовано 29 августа, 2015 Жалоба Поделиться Опубликовано 29 августа, 2015 Так, может, надо выяснить и поправить? Или хотя бы автору про это намекнуть.Зачем изобретать новые методы-велосипеды с новыми ошибками? даже забыл об этой ф-и. которая кстати тоже не предусмотренна при обновлении товара. Цитата Ссылка на сообщение Поделиться на другие сайты
Des Опубликовано 29 августа, 2015 Автор Жалоба Поделиться Опубликовано 29 августа, 2015 Ну подумайте сами. Допустим у Вас есть 20 товаров с именем Сумка.Вы посчитали к-во 20. Добавили единицу.А потом всем 20 товарам сделали URL sumka21.Шило на мыло?А зачем всем 20ти товарам, разве не для каждого отдельного товара идет проверка? У следующего будет URL sumka22 Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 29 августа, 2015 Жалоба Поделиться Опубликовано 29 августа, 2015 вероятность такого не большая, я бы сказал минимальная, но может быть да. в этом случае можно делать повторную проверку как в add_product. Конечно, небольшая. Тем не менее это ошибка. И на форуме у некоторых спецов выработался нехороший стиль вместо исправления ошибки начинать рассуждения о том, редкая она или частая. Вроде как собаке кость кинули - тебе, потребитель, и так сойдет. Радуйся, мол, что бесплатно...И во-вторых, есть стандартный готовый код, где все уже сделано правильно... А вот вероятность замечания п.1 - очень даже большая. Однако Вы на него почему-то не реагируете... Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 29 августа, 2015 Жалоба Поделиться Опубликовано 29 августа, 2015 А зачем всем 20ти товарам, разве не для каждого отдельного товара идет проверка? У следующего будет URL sumka22Смотря как программировать. Если так, как Вы написали, будет у всех sumka21. Если у Вас идея другая, то и описывать ее надо ТОЧНО, а не кое-как... Цитата Ссылка на сообщение Поделиться на другие сайты
Des Опубликовано 29 августа, 2015 Автор Жалоба Поделиться Опубликовано 29 августа, 2015 (изменено) Смотря как программировать. Если так, как Вы написали, будет у всех sumka21. Если у Вас идея другая, то и описывать ее надо ТОЧНО, а не кое-как...Может вы встречали нормальное решение? Изменено 29 августа, 2015 пользователем Des Цитата Ссылка на сообщение Поделиться на другие сайты
Des Опубликовано 29 августа, 2015 Автор Жалоба Поделиться Опубликовано 29 августа, 2015 Смотря как программировать. Если так, как Вы написали, будет у всех sumka21. Если у Вас идея другая, то и описывать ее надо ТОЧНО, а не кое-как...Я проверил, работает так как нужно, если есть товар sumka, добавляет товар sumka1, а если еще несколько товаров залить, будет sumka2, sumka3, sumka4 Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 29 августа, 2015 Жалоба Поделиться Опубликовано 29 августа, 2015 Я проверил, работает так как нужно, если есть товар sumka, добавляет товар sumka1, а если еще несколько товаров залить, будет sumka2, sumka3, sumka4так и должно быть, но проблема будет когда удалите один или два товара из магазина и будет уже количество 2, в этом случае будет колизия и юрл может повториться Цитата Ссылка на сообщение Поделиться на другие сайты
Des Опубликовано 30 августа, 2015 Автор Жалоба Поделиться Опубликовано 30 августа, 2015 так и должно быть, но проблема будет когда удалите один или два товара из магазина и будет уже количество 2, в этом случае будет колизия и юрл может повторитьсяТочно, этот момент я не учёл Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 30 августа, 2015 Жалоба Поделиться Опубликовано 30 августа, 2015 Точно, этот момент я не учёл а почему не работает стандартный механизм добавления товара, там уже есть такая штука как проверка ссылок. Цитата Ссылка на сообщение Поделиться на другие сайты
Des Опубликовано 30 августа, 2015 Автор Жалоба Поделиться Опубликовано 30 августа, 2015 А как вам такой вариант: Оставляем if(!empty($item['url'])) $product['url'] = trim($item['url']); elseif(!empty($item['name'])) $product['url'] = $this->translit($item['name']); // выберем все товары из базы и проверим есть ли уже такой юрл $this->db->query('SELECT count(*) as count FROM __products WHERE name=?', $product['name']); $url_exists = $this->db->result('count'); А во второй части делаем проверку if(empty($product_id)) { $product_id = $this->products->add_product($product); if($url_exists==1) $this->products->update_product($product_id, array('url'=>$product['url'].'-1')); elseif($url_exists>1) //тогда выбираем url всех товаров с таким названием и находим большее число после "-" в данных url, делаем +1 и записываем текущему товару. } Цитата Ссылка на сообщение Поделиться на другие сайты
Des Опубликовано 30 августа, 2015 Автор Жалоба Поделиться Опубликовано 30 августа, 2015 а почему не работает стандартный механизм добавления товара, там уже есть такая штука как проверка ссылок.Возможно из-за версии Simpla 2.2.4, может в более свежих есть. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 30 августа, 2015 Жалоба Поделиться Опубликовано 30 августа, 2015 Возможно из-за версии Simpla 2.2.4, может в более свежих есть. в api/Products.php функция add_products там должен быть такой код: // Если есть товар с таким URL, добавляем к нему число while($this->get_product((string)$product['url'])) { if(preg_match('/(.+)_([0-9]+)$/', $product['url'], $parts)) $product['url'] = $parts[1].'_'.($parts[2]+1); else $product['url'] = $product['url'].'_2'; } Цитата Ссылка на сообщение Поделиться на другие сайты
Des Опубликовано 30 августа, 2015 Автор Жалоба Поделиться Опубликовано 30 августа, 2015 в api/Products.php функция add_products там должен быть такой код: // Если есть товар с таким URL, добавляем к нему число while($this->get_product((string)$product['url'])) { if(preg_match('/(.+)_([0-9]+)$/', $product['url'], $parts)) $product['url'] = $parts[1].'_'.($parts[2]+1); else $product['url'] = $product['url'].'_2'; } Странно, но такая штука есть, но не работает Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 30 августа, 2015 Жалоба Поделиться Опубликовано 30 августа, 2015 Странно, но такая штука есть, но не работает может у вас не выбирает товар по юрл. скиньте ваш Products.php или дайте доступ, посмотрю. Цитата Ссылка на сообщение Поделиться на другие сайты
Des Опубликовано 30 августа, 2015 Автор Жалоба Поделиться Опубликовано 30 августа, 2015 С файлом импорта различия только в данном куске кода // Иначе - добавляем elseif(empty($variant_id)) { if(empty($product_id)) $product_id = $this->products->add_product($product); $this->db->query('SELECT max(v.position) as pos FROM __variants v WHERE v.product_id=? LIMIT 1', $product_id); $pos = $this->db->result('pos'); $variant['position'] = $pos+1; $variant['product_id'] = $product_id; $variant_id = $this->variants->add_variant($variant); $imported_item->status = 'added'; } А именно, нет следующей части $this->db->query('SELECT max(v.position) as pos FROM __variants v WHERE v.product_id=? LIMIT 1', $product_id); $pos = $this->db->result('pos'); $variant['position'] = $pos+1; Цитата Ссылка на сообщение Поделиться на другие сайты
Des Опубликовано 30 августа, 2015 Автор Жалоба Поделиться Опубликовано 30 августа, 2015 может у вас не выбирает товар по юрл. скиньте ваш Products.php или дайте доступ, посмотрю.http://www.ex.ua/816728829993 Цитата Ссылка на сообщение Поделиться на другие сайты
Des Опубликовано 30 августа, 2015 Автор Жалоба Поделиться Опубликовано 30 августа, 2015 А зачем следующие части в файле импорта новой версии и почему раньше их не использовали? // Подготовим товар для добавления в базу $product = array(); // Подготовим вариант товара $variant = array(); Цитата Ссылка на сообщение Поделиться на другие сайты
Des Опубликовано 30 августа, 2015 Автор Жалоба Поделиться Опубликовано 30 августа, 2015 if(!empty($variant_id) && !empty($product_id)) { } а также в старой версии нет данной проверки Также запрос в данном куске // Если задан артикул варианта, найдем этот вариант и соответствующий товар if(!empty($variant['sku'])) { $this->db->query('SELECT id as variant_id, product_id FROM __variants, __products WHERE sku=? AND __variants.product_id = __products.id LIMIT 1', $variant['sku']); $result = $this->db->result(); отличается от старого варианта // Если задан артикул варианта, найдем этот вариант и соответствующий товар if(!empty($variant['sku'])) { $this->db->query('SELECT id as variant_id, product_id FROM __variants WHERE sku=? LIMIT 1', $variant['sku']); $result = $this->db->result(); И данная часть // Свойство добавляем только если для товара указана категория и непустое значение свойства if($category_id && $feature_value!=='') отличается от старого варианта // Свойство добавляем только если для товара указана категория if($category_id) Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 30 августа, 2015 Жалоба Поделиться Опубликовано 30 августа, 2015 А зачем следующие части в файле импорта новой версии и почему раньше их не использовали? Точный ответ может дать лишь автор. Но вряд ли Вы от него дождетесь такого удовольствия...Остальные могут предположить, что это надо для улучшения работы импорта. На форуме довольно много сообщений об ошибках импорта. Многие известны давно, но автором не исправляются... Цитата Ссылка на сообщение Поделиться на другие сайты
koteyka Опубликовано 30 августа, 2015 Жалоба Поделиться Опубликовано 30 августа, 2015 (изменено) // выберем все товары из базы и проверим есть ли уже такой юрл$this->db->query('SELECT count(*) as count FROM __products WHERE name=?', $product['name']);$url_exists = $this->db->result('count');А зачем так? Т.е. зачем проверять товар по имени? Можно же просто выбрать урл и сравнить его. И еще, наверное, будет рациональнее выбрать все урлы за один запрос в массив, а потом сравнивать из него, не делая запрос каждый раз.П.С. Хотя, в массиве окажутся урлы только имеющихся товаров... Не вариант это, если одинаковые названия будут в файле импорта, просчитался. Изменено 30 августа, 2015 пользователем koteyka Цитата Ссылка на сообщение Поделиться на другие сайты
Des Опубликовано 24 марта, 2016 Автор Жалоба Поделиться Опубликовано 24 марта, 2016 А зачем так? Т.е. зачем проверять товар по имени? Можно же просто выбрать урл и сравнить его. И еще, наверное, будет рациональнее выбрать все урлы за один запрос в массив, а потом сравнивать из него, не делая запрос каждый раз.П.С. Хотя, в массиве окажутся урлы только имеющихся товаров... Не вариант это, если одинаковые названия будут в файле импорта, просчитался.Просто я понимаю, как переделать в то что я написал с варианта, который мне показали, а для более нормального решения, моих знаний не хватило( Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.