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

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


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

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

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

2. В полученном файле у одного товара удаляю название категории (название - пустой текст).

3. Делаю импорт измененного файла - импорт не проходит, появляется ошибка.

 

Вывод: импорт не работает, если у товара не указана категория (пустой текст).

 

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

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

2. Пустого текста не может быть, он либо есть либо его нет, скорее всего просто пустота вместо текста.

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

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

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

Товар ничего такого не должен.

возможно в импорте есть какое то условие для этого.

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

 

А товар легко может остаться без категории, если категорию удалить.

И в этой ситуации экспорт даст пустой текст для категории.

И если тут же делать импорт, даже не меняя файла, импорт не пройдет до конца, а остановится на проблемном товаре с ошибкой.

 

И это явно дефект разработчика. Уж что-то, а импорт не менявшегося файла экспорта точно должен идти без проблем...

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

Товар ничего такого не должен.

Звучит как то глупо.

А товар легко может остаться без категории, если категорию удалить.

Вот именно если ее удалить, а не забыть указать при импорте или просто не указать, это разные вещи.
Ссылка на сообщение
Поделиться на другие сайты
// Если задана категория
		$category_id = null;
		$categories_ids = array();
		if(isset($item['category']))
		{
			foreach(explode($this->category_delimiter, $item['category']) as $c)
				$categories_ids[] = $this->import_category($c);
			$category_id = reset($categories_ids);
		}

Скорее всего проблема именно в этом куске кода из simpla/ajax/import.php

Идет проверка на существование категории, а нужно поставить проверку !empty , что бы избежать подобной ситуации.

Так как в вашем случае получается, что переменная существует, но пустая, тип переменной string, и соответственно explode возвращает false, что делает не возможным выполнение оператора foreach, а возникновение ошибки прекращает выполнение метода ImportAjax::import_item

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

Noxter, в 06 Apr 2015 - 19:00, сказал(а):

Звучит как то глупо.

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

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

Noxter, в 06 Apr 2015 - 19:00, сказал(а):

Вот именно если ее удалить, а не забыть указать при импорте или просто не указать, это разные вещи.

Спасибо за оцень ценное замечание. Но основная идея не в том, чтобы обсуждать указанную разницу, а показать, что, несмотря на разницу, в этих двух ситуациях импорт одинаково не работает.
Ссылка на сообщение
Поделиться на другие сайты

 

// Если задана категория
		$category_id = null;
		$categories_ids = array();
		if(isset($item['category']))
		{
			foreach(explode($this->category_delimiter, $item['category']) as $c)
				$categories_ids[] = $this->import_category($c);
			$category_id = reset($categories_ids);
		}
Скорее всего проблема именно в этом куске кода из simpla/ajax/import.php

Идет проверка на существование категории, а нужно поставить проверку !empty , что бы избежать подобной ситуации.

Так как в вашем случае получается, что переменная существует, но пустая, тип переменной string, и соответственно explode возвращает false, что делает не возможным выполнение оператора foreach, а возникновение ошибки прекращает выполнение метода ImportAjax::import_item

 

Это все фантазии на пустом месте. Большая часть сказанного - просто неверно.

Например, explode в данной ситуации никак не  вернет false, потому что первый параметр непустой - читайте документацию по функции.

Вы бы выяснили ТОЧНО, где ошибка, потом попробовали ее исправить, протестировали, проверили, а потом писали бы тут квалифицированно и со знанием дела. Зачем же гадать-то на кофейной гуще...

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

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

Опытный специалист как раз это знает, он воспринял фразу Корса:

Товар ничего такого не должен.

как глупую и смешную :D.
Ссылка на сообщение
Поделиться на другие сайты

Я рад за опытного спеца, ибо смех полезен для здоровья.

Жаль только, что опытный спец ничего не говорит существенного по теме, а акцентируется на пустяки...

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

Это все фантазии на пустом месте. Большая часть сказанного - просто неверно.

Например, explode в данной ситуации никак не  вернет false, потому что первый параметр непустой - читайте документацию по функции.

Вы бы выяснили ТОЧНО, где ошибка, потом попробовали ее исправить, протестировали, проверили, а потом писали бы тут квалифицированно и со знанием дела. Зачем же гадать-то на кофейной гуще...

А вы пробовали сделать то что я написал?

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

Начать с того, что Вы не написали ТОЛКОМ, что предлагаете сделать.

В Вашем посте в основном общие маловразумительные фразы типа "Скорее всего", "переменная существует", "тип переменной string".

 

Из предложений вижу только "нужно поставить проверку !empty", что тоже весьма неопределенно.

Готов проверить Ваш метод, если изложите его ТОЧНО и АККУРАТНО, в стиле "в файле таком-то в позиции такой-то надо добавить/изменить то-то".

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

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

Поэтому отвечу вам также.

Перечитайте вот это предложение

Идет проверка на существование категории, а нужно поставить проверку !empty , что бы избежать подобной ситуации.

и посмотрите на код, если не поймете попробуйте опять прочитать и посмотреть на код, если не прийдет понимание то повторяйте эти операции сначала читайте цитату а потом смотрите на код.

В каком файле он находится я тоже написал.

И сегодня смог проверить, изложенная вами проблема решается - товар импортируется без категории.

 

А если точно и аккуратно то заменяем строки 166-174 файл simpla/ajax/import.php

// Если задана категория
		$category_id = null;
		$categories_ids = array();
		if(!empty($item['category']))
		{
			foreach(explode($this->category_delimiter, $item['category']) as $c)
				$categories_ids[] = $this->import_category($c);
			$category_id = reset($categories_ids);
		}
Изменено пользователем Andrey Terkin
Ссылка на сообщение
Поделиться на другие сайты

Да, так работает. Теперь более понятно, но можно было написать и поточнее.

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

 

А то, что у Вас написано было сначала, почти все неверно:

 

1. "Идет проверка на существование категории"

Если имеете в виду if(!empty($item['category'])), то это никакая не проверка на существование категории.

 

2. "explode возвращает false" - полностью неверно.

В реальности выполняется explode($this->category_delimiter, '') и возвращает массив array('').

 

3. Ошибка возникает совсем в другом месте.

 

Если захотите дискутировать дальше, то просьба не отвечать малозначащими общими фразами типа "опробуйте опять прочитать и посмотреть на код", а точно - что, где, почему.

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

Готов проверить Ваш метод, если изложите его ТОЧНО и АККУРАТНО, в стиле "в файле таком-то в позиции такой-то надо добавить/изменить то-то".

Корс ты ведешь себя как нуб, постарайся из поста http://forum.simplacms.ru/topic/9513-еще-одна-ошибка-импорта/?p=71443 разобраться как нужно сделать.

Опытный специалист уже бы давно разобрался как сделать.

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

Kors, я не пойму, вы это сделать что ли не можете?

Как то для фрилансера написавшего столько модулей - слабовато в этом не разобраться...

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

 

Если имеете в виду if(!empty($item['category'])), то это никакая не проверка на существование категории.

Так а что же это если не проверка категории? Здесь проверяется на существование поле с категорией в импортируемом файле.

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

Kors, я не пойму, вы это сделать что ли не можете?

Как то для фрилансера написавшего столько модулей - слабовато в этом не разобраться...

Могу.

А вопрос Ваш несколько в стороне от обсуждаемого ...

Так а что же это если не проверка категории? Здесь проверяется на существование поле с категорией в импортируемом файле.

Сначала Вы писали:

1. Идет проверка на существование категории (пост #5)

Теперь пишете:

2. проверяется на существование поле с категорией в импортируемом файле.

 

Это вещи РАЗНЫЕ!

 

1. Если имеете в виду if(!empty($item['category'])), то это никакая не проверка на существование категории, это проверка на то, пустое или непустое значение имеет величина $item['category'].

По моему, это очевидно. Если подробнее, то $item['category'] - это величина, извлекаемая из файла импорта.

Если это значение равно "Одежда" или "ttttttt", то в обоих случаях проверка даст true, в то время как категория "Одежда" может существовать, а категории "ttttttt" может не быть.

2. уже ближе к истине, но, строго говоря, тоже неверно...

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

Я в шоке с вас Kors...

 

$item['category'] это не некая абстрактная величина, извлекаемая из файла импорта, а поле в файле импорта которое соответствует категории. Категории при импорте бывают не только в БД а в импортируемом файле тоже.

 

if(!empty($item['category'])) а это как раз то, на что я предложил поменять проверку на существование if(isset($item['category'])) которая была в файле изначально, и которую вы никак не могли увидеть в приведенном мной коде.

 

Если вы не можете понять вполне корректное обьяснение с приведенным куском кода то это ваши проблемы.

Теперь, вместо того что бы просто сказать спасибо и забыть эту тему вы начинаете раздувать дискуссии придираясь к вырванным из контекста фразам.

 

Все таки я правильно писал вам в посте 12, если не понятно что то прочитайте еще раз и посмотрите на код.

 

Дальнейшее продолжение этой темы считаю бессмысленным.

Удачи в тестировании...

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

Я в шоке с вас Kors...

Аналогично.

 

Вы опять написали несколько в основном общих фраз. А там, где пытаетесь высказать какие-то утверждения, вылезают грубые ошибки.

Например,

"поле в файле импорта которое соответствует категории" - неверно, нет такого соответствия, как ни странно. Есть поле, которое соответствует СПИСКУ категорий товара.

"Категории при импорте бывают не только в БД а в импортируемом файле тоже" - категории в файле импорта не бывают, в файле лишь поля CSV. В полях могут быть НАЗВАНИЯ категорий, но никак не сами категории.

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

Обнаружилось следующее: Если в действиях, описанных в посте #1, сделать

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

то выходит при импорте та же самая ошибка.

 

Если применить изменение, которые предложил Andrey Terkin в посте #5, то ошибка остается.

 

Это еще одно указание на то, что диагностика ошибки и способ исправления, которые предложил Andrey Terkin, неверные, так как они опирались на посыл о том, что причина ошибки - в пустом тексте...

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

Могу.

А вопрос Ваш несколько в стороне от обсуждаемого ...

 

Как вы сами всем на форуме говорите: можете - так выложите! Зачем лишние разговоры разводить? 

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

Лишние разговоры заводите Вы сами.

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

 

Если Вам требуется, чтоб я что-то для Вас выложил - лучше обратиться в личку.

 

Цель темы, если Вы до сих пор не поняли - обратить внимание на ошибку в надежде, что разработчик исправит в очередной версии, примерно как в теме

http://forum.simplacms.ru/topic/9011-%D0%BA%D0%B0%D0%BA-simpla-%D0%BD%D0%B5-%D0%B7%D0%B0%D1%89%D0%B8%D1%89%D0%B0%D0%B5%D1%82-%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%BE%D0%B9-%D1%82%D0%BE%D0%B2%D0%B0%D1%80/

Думаю, что плодить на форуме сотни костыльных решений - не лучший стиль.

Полагаю, что разработчик (если захочет) может дать решение на порядок лучше и у него это займет усилий на порядок меньше...

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

Я ничего не развожу!  А вы уже 2 страницу темы спорите с Andrey Terkin и Noxter как и что делать...

Хотя решение - 2х строчное! Выложили бы давно и все бы Вам спасибо сказали. И разработчик - думаю тоже.  

 

вот:

$category_id = null;
$categories_ids = array();
if(!empty($item['category']))
{
	foreach(explode($this->category_delimiter, $item['category']) as $c)
		if($cid = $this->import_category($c)) $categories_ids[] = $cid;
		
	$category_id = reset($categories_ids);
}

Надеюсь данные строки продавать не будете...

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

Спасибо!

Это намного лучше, чем то, что предлагал  Andrey Terkin в посте #5.

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

Спасибо!

Это намного лучше, чем то, что предлагал  Andrey Terkin в посте #5.

Так то что в посте 5 предлагал сделать Andrey Terkin сделал в посте 23 пользователь под ником yr4ik.

Корс ты что вникнуть никак не можешь?

P.S. Корс кому твой дешевый спектакль еще нужен кроме как самому себе?

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

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

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

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

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

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

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

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

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

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