Kors Опубликовано 9 апреля, 2015 Автор Жалоба Поделиться Опубликовано 9 апреля, 2015 Я тоже сначала по невнимательности решил, что методы из #5 и #23 - одинаковые. Однако потом посмотрел получше и увидел существенную разницу... Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 9 апреля, 2015 Жалоба Поделиться Опубликовано 9 апреля, 2015 (изменено) Я тоже сначала по невнимательности решил, что методы из #5 и #23 - одинаковые. Однако потом посмотрел получше и увидел существенную разницу...Если ты Корс считаешь что кусок кода из пятого поста это решения то ты глуп, мне смешно с тебя. Тот кусок кода из пятого сообщения стандартный симпловский, а вот содержимое сообщения как раз является решением которое расписал yr4ik в 23 посте добавив одно условие. Неужели так туго доходит, это же элементарные вещи? Изменено 9 апреля, 2015 пользователем Noxter Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 9 апреля, 2015 Автор Жалоба Поделиться Опубликовано 9 апреля, 2015 Если ты Корс считаешь что кусок кода из пятого поста это решения то ты глуп, мне смешно с тебя.Я тоже поделюсь с Вами аналогичной фразой:Если Вы, Noxter, считаете, что крокодилы летают в космосе, то Вы глупы. Если захотите, сказать, что Вы такого про крокодилов не говорили, то соглашусь.Но и я нигде не говорил, что "кусок кода из пятого поста это решения".Не понимаю, зачем пишете такие пустые фантазии, не относящиеся к вопросу.... Тот кусок кода из пятого сообщения стандартный симпловский, а вот содержимое сообщения как раз является решением которое расписал yr4ik в 23 посте добавив одно условие.Неужели так туго доходит, это же элементарные вещи?Видимо, до Вас не дошла пока элементарная вещь о том, что1. Решение из #5 - это замена isset на !empty в стандартном коде2. Решение из #23 - это ДВА действия - одно из #5, другое - замена строки$categories_ids[] = $this->import_category($c);наif($cid = $this->import_category($c)) $categories_ids[] = $cid; Так что решения #5 и #23 - существенно разные. Кстати, автор решения #5 конкретизировал его в #12, проще сравнивать коды #12 и #23, там уж точно видно (для тех, кто не Noxter), что они разные... Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 10 апреля, 2015 Автор Жалоба Поделиться Опубликовано 10 апреля, 2015 Продолжим банкет. Провожу следующие действия:1. В админке создаю категорию под названием "авто, мото, вело". В категории создаю новый товар.2. Делаю экспорт.3. Делаю импорт полученного файла.4. В результате импорта:4.1 создаются три новых категории "авто", "мото", "вело".4.2 новый товар добавлен в эти ТРИ новых категории. Эксперименты проводились1) на стандартной Simpla,2) на стандартной Simpla с доработкой #5,3) на стандартной Simpla с доработкой #23. Во всех трех случаях один и тот же описанный выше результат. Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 10 апреля, 2015 Жалоба Поделиться Опубликовано 10 апреля, 2015 а что не так? Вы же и прописали 3 категории... Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 10 апреля, 2015 Жалоба Поделиться Опубликовано 10 апреля, 2015 а что не так? Вы же и прописали 3 категории...Нет, дело в том что если в CSV название категории указанно с запятой, то импорт считает что это разделитель и делит название категории на доп. категории. Посмотрите файл simpla/ajax/import.php строка 33 и строка 171, стоит заменить запятую на другой символ и импорт сработает верно. Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 10 апреля, 2015 Жалоба Поделиться Опубликовано 10 апреля, 2015 (изменено) А понял. То я думал что речь идет о подкатегориях... Тогда так можно: $category_id = null; $categories_ids = array(); if(!empty($item['category'])) { foreach(preg_split('#\s*(?<!\\\)\\'.$this->category_delimiter.'\s*#', $item['category'], 0, PREG_SPLIT_DELIM_CAPTURE) as $c) if($c && ($cid = $this->import_category(str_replace("\\$this->category_delimiter", $this->category_delimiter, $c)))) $categories_ids[] = $cid; $category_id = reset($categories_ids); } Добавил возможность экранирования символов в csv. "авто\, мото\, вело" так должно работать (не проверял) Изменено 10 апреля, 2015 пользователем yr4ik Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 10 апреля, 2015 Автор Жалоба Поделиться Опубликовано 10 апреля, 2015 Не работает. preg_split дает для описанного выше примера массив из трех элементов. Мне вообще не понятна идея такого метода - после выполнения preg_split в переменной $c вроде бы в принципе не должно быть символа "," ($this->category_delimiter), и тогда нет никакого смысла в дальнейшем операторе str_replace - результатом автоматически будет исходная строка. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 10 апреля, 2015 Автор Жалоба Поделиться Опубликовано 10 апреля, 2015 Дошло. Работает в данном случае, если убрать "?<!" - видимо, опечатка Ваша. Но в целом метод #32 - не годится, это выходит по принципу: одно строим, другое ломаем. Пример: 1. В админке создаю ТРИ корневые категории под названиями "дом", "сад", "огород". Создаю новый товар и помещаю его в каждую из этих категорий. 2. Делаю экспорт. 3. Делаю импорт полученного файла. 4. В результате импорта: 4.1 создается новая категория "дом,сад,огород". 4.2 новый товар добавлен в эту новую категорию. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 10 апреля, 2015 Жалоба Поделиться Опубликовано 10 апреля, 2015 Я вижу два варианта:Менять разделитель категорий.Попробовать записывать Название каждой категории в двойных кавычках (по идее должно помочь). Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 10 апреля, 2015 Жалоба Поделиться Опубликовано 10 апреля, 2015 (изменено) Kors, ?<! - убирать нельзя. Иначе теряется весь смысл! (?<!\\\) это негативный просмотр назад. Разобьет строку по category_delimiter только если нет перед ним экрана... То есть строка "кат1,кат2" будет разбита на кат1 и кат2Но строка "кат1\,кат2" будет искать в БД категорию с именем "кат1,кат2" Что бы сразу загружать экспорт-файл нужно поправить simpla/ajax/export.php $categories[] = implode('/', $path); на: $categories[] = str_replace(',', '\,', implode('/', $path)); ..............................Поправил еще пост #32 что бы обрезал пробелы Изменено 10 апреля, 2015 пользователем yr4ik Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 10 апреля, 2015 Автор Жалоба Поделиться Опубликовано 10 апреля, 2015 По-моему, это костыль очень неудобный.Файл экспорта предназначен для удобства редактирования пользователем.А при Вашем способе №36 в ячейке категории пользователь увидит, например, такое дом\,окна, сад\,весенний НЕ думаю, что простой админ разберет быстро, что это означает. А уж если он начнет такое активно редактировать, то ошибки и головная боль ему обеспечены... То, что Вы предлагаете, подходит для обмена между скриптами или программами, но никак не для человека... Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 10 апреля, 2015 Автор Жалоба Поделиться Опубликовано 10 апреля, 2015 Я вижу два варианта: Менять разделитель категорий. Попробовать записывать Название каждой категории в двойных кавычках (по идее должно помочь).1. Менять разделитель категорий. Смотря как. А то и с новым разделителем будут те же проблемы, если он войдет в название категории. 2. Попробовать записывать Название каждой категории в двойных кавычках (по идее должно помочь). Сомневаюсь, что поможет. Потому что кавычки тоже могут входить в название категории. Впрочем, если предложите что-то конкретное, с удовольствием протестирую. Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 10 апреля, 2015 Жалоба Поделиться Опубликовано 10 апреля, 2015 НЕ думаю, что простой админ разберет быстро, что это означает. А уж если он начнет такое активно редактировать, то ошибки и головная боль ему обеспечены... То, что Вы предлагаете, подходит для обмена между скриптами или программами, но никак не для человека... А то что точно такое же используется для построения вложенности категорий вас не смущает? Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 10 апреля, 2015 Автор Жалоба Поделиться Опубликовано 10 апреля, 2015 Я не припомню, чтобы где встречал экспорт для редактирования человеком, с разделителем \, Смущает меня многое, поэтому я и создал тему, чтоб поставить вопросы и узнать мнение других. А суть Вашего ответа не понял - считаете, что нормально, что при экспорте тексты колонок будут иметь вид "дом\,окна, сад\,весенний" и что админу сайта редактировать это будет легко и понятно? Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 10 апреля, 2015 Жалоба Поделиться Опубликовано 10 апреля, 2015 "\," как разделитель не используется! Используется только ",". Но вот если название категории содержит запятые то они - экранируются. Точно так же сейчас делается и для подкатегорий. Если имя содержит / то перед ним ставится \ для экрана. Что касается простоты - я думаю в названиях не сильно часто используются ","Ну а если используются - экранируем и все ок.Так же можно заменить "," на какой нибудь символ пореже. К примеру "|" Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 10 апреля, 2015 Автор Жалоба Поделиться Опубликовано 10 апреля, 2015 Видимо, надо действительно принять, что знак запятой в названии категорий встречается редко, и при импорте-экспорте используем его экранирование. Тогда останется сделать также аналогично экранирование знака "/", который при редактировании категории в админке также легко можно вставлять в название. И вроде бы будет работать аккуратно и логично... Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 10 апреля, 2015 Жалоба Поделиться Опубликовано 10 апреля, 2015 (изменено) Тогда останется сделать также аналогично экранирование знака "/", который при редактировании категории в админке также легко можно вставлять в название.Вы не внимательно читаете посты. Я уже 3 раз пишу про экран /. Это есть в дефолте движка. Не было только для , Изменено 10 апреля, 2015 пользователем yr4ik Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 10 апреля, 2015 Автор Жалоба Поделиться Опубликовано 10 апреля, 2015 Тогда посмотрим на то, как это работает в дефолте движка. На демо сайте провожу следующие действия: 1. В админке создаю категорию 1-го уровня под названием "авто/мото" . В категории создаю новый товар. 2. Делаю экспорт. 3. Делаю импорт полученного файла. 4. В результате импорта: 4.1 создаются новые категория 1-го уровня "авто", и ее подкатегория 2-го уровня "мото". 4.2 новый товар добавлен в новую подкатегории. Когда я начинал тему, я думал, что нашел одну маленькую ошибочку. Оказалось, с Вашей помощью раскопали их кучу. Если будете писать очередное решение, просьба писать полностью и точно, где и что менять. Копаться в разрозненных кусках кода по длинной теме становится тяжело... Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 10 апреля, 2015 Жалоба Поделиться Опубликовано 10 апреля, 2015 Да там что то не сильно понятное... Лучше сделать так simpla/ajax/import.php меняем: $regex = "/\\DELIMITER((?:[^\\\\\DELIMITER]|\\\\.)*)/"; $regex = str_replace('DELIMITER', $delimiter, $regex); $names = preg_split($regex, $category, 0, PREG_SPLIT_DELIM_CAPTURE); на: $names = preg_split('#\s*(?<!\\\)\\'.$delimiter.'\s*#', $category, 0, PREG_SPLIT_DELIM_CAPTURE); Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 11 апреля, 2015 Автор Жалоба Поделиться Опубликовано 11 апреля, 2015 Да, похоже, так пойдет. А теперь для полноты картины не будете так добры выложить точный полный подробный список изменений? Надеюсь, это Вас сильно не затруднит, ведь Вы в начале обсуждения заявляли: "Хотя решение - 2х строчное!" Цитата Ссылка на сообщение Поделиться на другие сайты
alexsus Опубликовано 16 апреля, 2017 Жалоба Поделиться Опубликовано 16 апреля, 2017 Здравствуйте. Очень хотелось узнать о результирующем решении и посмотреть код всех необходимых доработок. Спасибо. Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.