Перейти к содержанию
Официальный форум поддержки Simpla

Еще одна ошибка импорта


Рекомендуемые сообщения

Я тоже сначала по невнимательности решил, что методы из #5 и #23 - одинаковые.  Однако потом посмотрел получше и увидел существенную разницу...

Ссылка на сообщение
Поделиться на другие сайты

Я тоже сначала по невнимательности решил, что методы из #5 и #23 - одинаковые.  Однако потом посмотрел получше и увидел существенную разницу...

Если ты Корс считаешь что кусок кода из пятого поста это решения то ты глуп, мне смешно с тебя.

Тот кусок кода из пятого сообщения стандартный симпловский, а вот содержимое сообщения как раз является решением которое расписал yr4ik в 23 посте добавив одно условие.

Неужели так туго доходит, это же элементарные вещи?

Изменено пользователем Noxter
Ссылка на сообщение
Поделиться на другие сайты

Если ты Корс считаешь что кусок кода из пятого поста это решения то ты глуп, мне смешно с тебя.

Я тоже поделюсь с Вами аналогичной фразой:

Если Вы, 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), что они разные...

Ссылка на сообщение
Поделиться на другие сайты

Продолжим банкет.

 

Провожу следующие действия:
1. В админке создаю категорию под названием "авто, мото, вело".  В категории создаю новый товар.
2. Делаю экспорт.
3. Делаю импорт полученного файла.

4. В результате импорта:

4.1 создаются три новых категории "авто", "мото", "вело".

4.2 новый товар добавлен в эти ТРИ новых категории.

 

Эксперименты проводились

1) на стандартной Simpla,

2) на стандартной Simpla с доработкой #5,

3) на стандартной Simpla с доработкой #23. 

Во всех трех случаях один и тот же описанный выше результат.

Ссылка на сообщение
Поделиться на другие сайты

а что не так? Вы же и прописали 3 категории...

Нет, дело в том что если в CSV название категории указанно с запятой, то импорт считает что это разделитель и делит название категории на доп. категории.

Посмотрите файл simpla/ajax/import.php строка 33 и строка 171, стоит заменить запятую на другой символ и импорт сработает верно.

Ссылка на сообщение
Поделиться на другие сайты

А понял. То я думал что речь идет о подкатегориях...

 

Тогда так можно:



$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. "авто\, мото\, вело" так должно работать (не проверял)

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

Не работает.

preg_split дает для описанного выше примера массив из трех элементов.

Мне вообще не понятна идея такого метода - после выполнения preg_split в переменной $c вроде бы в принципе не должно быть символа "," ($this->category_delimiter), и тогда нет никакого смысла в дальнейшем операторе str_replace - результатом автоматически будет исходная строка.

Ссылка на сообщение
Поделиться на другие сайты

Дошло. Работает в данном случае, если убрать "?<!" - видимо, опечатка Ваша.

 

Но в целом метод #32 - не годится, это выходит по принципу: одно строим, другое ломаем.

 

Пример:

1. В админке создаю ТРИ корневые категории под названиями "дом", "сад", "огород". Создаю новый товар и помещаю его в каждую из этих категорий.

2. Делаю экспорт.

3. Делаю импорт полученного файла.

4. В результате импорта:

4.1 создается новая категория "дом,сад,огород".

4.2 новый товар добавлен в эту новую категорию.

Ссылка на сообщение
Поделиться на другие сайты

Я вижу два варианта:

Менять разделитель категорий.

Попробовать записывать Название каждой категории в двойных кавычках (по идее должно помочь).

Ссылка на сообщение
Поделиться на другие сайты

Kors, ?<! - убирать нельзя. Иначе теряется весь смысл! 
(?<!\\\) это негативный просмотр назад. Разобьет строку по category_delimiter только если нет перед ним экрана...
 
То есть строка "кат1,кат2" будет разбита на кат1 и кат2
Но строка "кат1\,кат2" будет искать в БД категорию с именем "кат1,кат2"
 
Что бы сразу загружать экспорт-файл нужно поправить simpla/ajax/export.php
 

$categories[] = implode('/', $path);
на:
$categories[] = str_replace(',', '\,', implode('/', $path)); 

 

..............................

Поправил еще пост #32 что бы обрезал пробелы

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

По-моему, это костыль очень неудобный.


Файл экспорта предназначен для удобства редактирования пользователем.
А при Вашем способе №36 в ячейке категории пользователь увидит, например, такое

дом\,окна, сад\,весенний 

НЕ думаю, что простой админ разберет быстро, что это означает. А уж если он начнет такое активно редактировать, то ошибки и головная боль ему обеспечены...

 

То, что Вы предлагаете, подходит для обмена между скриптами или программами, но никак не для человека...

Ссылка на сообщение
Поделиться на другие сайты

Я вижу два варианта:

Менять разделитель категорий.

Попробовать записывать Название каждой категории в двойных кавычках (по идее должно помочь).

1. Менять разделитель категорий.

Смотря как. А то и с новым разделителем будут те же проблемы, если он войдет в название категории.

2. Попробовать записывать Название каждой категории в двойных кавычках (по идее должно помочь).

Сомневаюсь, что поможет. Потому что кавычки тоже могут входить в название категории.

 

Впрочем, если предложите что-то конкретное, с удовольствием протестирую.

Ссылка на сообщение
Поделиться на другие сайты

НЕ думаю, что простой админ разберет быстро, что это означает. А уж если он начнет такое активно редактировать, то ошибки и головная боль ему обеспечены...

 

То, что Вы предлагаете, подходит для обмена между скриптами или программами, но никак не для человека...

 

А то что точно такое же используется для построения вложенности категорий вас не смущает?

Ссылка на сообщение
Поделиться на другие сайты

Я не припомню, чтобы где встречал экспорт для редактирования человеком, с разделителем \,

 

Смущает меня многое, поэтому я и создал тему, чтоб поставить вопросы и узнать мнение других.

А суть Вашего ответа не понял - считаете, что нормально, что при экспорте тексты колонок будут иметь вид "дом\,окна, сад\,весенний" и что админу сайта редактировать это будет легко и понятно?

Ссылка на сообщение
Поделиться на другие сайты

"\," как разделитель не используется! Используется только ",". 

Но вот если название категории содержит запятые то они - экранируются.

 

Точно так же сейчас делается и для подкатегорий. Если имя содержит / то перед ним ставится \ для экрана.

 

Что касается простоты - я думаю в названиях не сильно часто используются ","

Ну а если используются - экранируем и все ок.

Так же можно заменить "," на какой нибудь символ пореже. К примеру "|"

Ссылка на сообщение
Поделиться на другие сайты

Видимо, надо действительно принять, что знак запятой в названии категорий встречается редко, и при импорте-экспорте используем его экранирование.

Тогда останется сделать также аналогично экранирование знака "/", который при редактировании категории в админке также легко можно вставлять в название.

И вроде бы будет работать аккуратно и логично...

Ссылка на сообщение
Поделиться на другие сайты

Тогда останется сделать также аналогично экранирование знака "/", который при редактировании категории в админке также легко можно вставлять в название.

Вы не внимательно читаете посты. Я уже 3 раз пишу про экран /. Это есть в дефолте движка. Не было только для , Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

Тогда посмотрим на то, как это работает в дефолте движка.

 

На демо сайте провожу следующие действия:

1. В админке создаю категорию 1-го уровня под названием "авто/мото" . В категории создаю новый товар.

2. Делаю экспорт.

3. Делаю импорт полученного файла.

4. В результате импорта:

4.1 создаются новые категория 1-го уровня "авто", и ее подкатегория 2-го уровня "мото".

4.2 новый товар добавлен в новую подкатегории.

 

Когда я начинал тему, я думал, что нашел одну маленькую ошибочку. Оказалось, с Вашей помощью раскопали их кучу.

 

Если будете писать очередное решение, просьба писать полностью и точно, где и что менять. Копаться в разрозненных кусках кода по длинной теме становится тяжело...

Ссылка на сообщение
Поделиться на другие сайты

Да там что то не сильно понятное...

 

Лучше сделать так 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);

 

Ссылка на сообщение
Поделиться на другие сайты

Да, похоже, так пойдет.

А теперь для полноты картины не будете так добры выложить точный полный подробный список изменений?

Надеюсь, это Вас сильно не затруднит, ведь Вы в начале обсуждения заявляли: "Хотя решение - 2х строчное!"

Ссылка на сообщение
Поделиться на другие сайты
  • 2 года спустя...

Здравствуйте. Очень хотелось узнать о результирующем решении и посмотреть код всех необходимых доработок. Спасибо.

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...