Kors Опубликовано 6 апреля, 2015 Жалоба Поделиться Опубликовано 6 апреля, 2015 На демо сайте провожу следующие действия: 1. Делаю экспорт. 2. В полученном файле у одного товара удаляю название категории (название - пустой текст). 3. Делаю импорт измененного файла - импорт не проходит, появляется ошибка. Вывод: импорт не работает, если у товара не указана категория (пустой текст). Конечно, ситуация, когда товар остается бесхозным, не принадлежащим категории, несколько неестественна. Однако такое вполне может возникать при удалении категорий. Ну и в любом случае импорт должен бы работать получше... Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 6 апреля, 2015 Жалоба Поделиться Опубликовано 6 апреля, 2015 2. Пустого текста не может быть, он либо есть либо его нет, скорее всего просто пустота вместо текста. Конечно и не будет работать ведь товар должен принадлежать к какой то категории, возможно в импорте есть какое то условие для этого. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 6 апреля, 2015 Автор Жалоба Поделиться Опубликовано 6 апреля, 2015 (изменено) Конечно и не будет работать ведь товар должен принадлежать к какой то категории, возможно в импорте есть какое то условие для этого.Товар ничего такого не должен.возможно в импорте есть какое то условие для этого.Если знаете, пишите конкретно, что где есть. Я не нашел, и по-моему, нет таких условий. Как раз наоборот - если б условия были, импорт бы не вылетал с ошибкой. А товар легко может остаться без категории, если категорию удалить. И в этой ситуации экспорт даст пустой текст для категории. И если тут же делать импорт, даже не меняя файла, импорт не пройдет до конца, а остановится на проблемном товаре с ошибкой. И это явно дефект разработчика. Уж что-то, а импорт не менявшегося файла экспорта точно должен идти без проблем... Изменено 6 апреля, 2015 пользователем Kors Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 6 апреля, 2015 Жалоба Поделиться Опубликовано 6 апреля, 2015 Товар ничего такого не должен.Звучит как то глупо.А товар легко может остаться без категории, если категорию удалить.Вот именно если ее удалить, а не забыть указать при импорте или просто не указать, это разные вещи. Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 6 апреля, 2015 Жалоба Поделиться Опубликовано 6 апреля, 2015 (изменено) // Если задана категория $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 Изменено 6 апреля, 2015 пользователем Andrey Terkin Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 6 апреля, 2015 Автор Жалоба Поделиться Опубликовано 6 апреля, 2015 Noxter, в 06 Apr 2015 - 19:00, сказал(а): Звучит как то глупо.Да, выглядит неправдоподобно глупо, что опытный спец не знает, что товар вполне может оказаться без категории.И не в экзотическом случае, а при простых естественных действиях админа - создал категорию, создал товар в ней, удалил категорию.Noxter, в 06 Apr 2015 - 19:00, сказал(а): Вот именно если ее удалить, а не забыть указать при импорте или просто не указать, это разные вещи.Спасибо за оцень ценное замечание. Но основная идея не в том, чтобы обсуждать указанную разницу, а показать, что, несмотря на разницу, в этих двух ситуациях импорт одинаково не работает. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 6 апреля, 2015 Автор Жалоба Поделиться Опубликовано 6 апреля, 2015 // Если задана категория $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, потому что первый параметр непустой - читайте документацию по функции.Вы бы выяснили ТОЧНО, где ошибка, потом попробовали ее исправить, протестировали, проверили, а потом писали бы тут квалифицированно и со знанием дела. Зачем же гадать-то на кофейной гуще... Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 7 апреля, 2015 Жалоба Поделиться Опубликовано 7 апреля, 2015 Да, выглядит неправдоподобно глупо, что опытный спец не знает, что товар вполне может оказаться без категории.Опытный специалист как раз это знает, он воспринял фразу Корса:Товар ничего такого не должен.как глупую и смешную . Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 7 апреля, 2015 Автор Жалоба Поделиться Опубликовано 7 апреля, 2015 (изменено) Я рад за опытного спеца, ибо смех полезен для здоровья. Жаль только, что опытный спец ничего не говорит существенного по теме, а акцентируется на пустяки... Изменено 7 апреля, 2015 пользователем Kors Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 7 апреля, 2015 Жалоба Поделиться Опубликовано 7 апреля, 2015 Это все фантазии на пустом месте. Большая часть сказанного - просто неверно.Например, explode в данной ситуации никак не вернет false, потому что первый параметр непустой - читайте документацию по функции.Вы бы выяснили ТОЧНО, где ошибка, потом попробовали ее исправить, протестировали, проверили, а потом писали бы тут квалифицированно и со знанием дела. Зачем же гадать-то на кофейной гуще...А вы пробовали сделать то что я написал? Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 7 апреля, 2015 Автор Жалоба Поделиться Опубликовано 7 апреля, 2015 Начать с того, что Вы не написали ТОЛКОМ, что предлагаете сделать. В Вашем посте в основном общие маловразумительные фразы типа "Скорее всего", "переменная существует", "тип переменной string". Из предложений вижу только "нужно поставить проверку !empty", что тоже весьма неопределенно. Готов проверить Ваш метод, если изложите его ТОЧНО и АККУРАТНО, в стиле "в файле таком-то в позиции такой-то надо добавить/изменить то-то". Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 7 апреля, 2015 Жалоба Поделиться Опубликовано 7 апреля, 2015 (изменено) Ну вот видите , увидеть кучу ошибок и написать гневный пост вы смогли, а предложенное мной решение не увидели...Поэтому отвечу вам также.Перечитайте вот это предложениеИдет проверка на существование категории, а нужно поставить проверку !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); } Изменено 7 апреля, 2015 пользователем Andrey Terkin Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 7 апреля, 2015 Автор Жалоба Поделиться Опубликовано 7 апреля, 2015 Да, так работает. Теперь более понятно, но можно было написать и поточнее. Но работает не по тем причинам, как Вы объяснили, а совсем по другим. А то, что у Вас написано было сначала, почти все неверно: 1. "Идет проверка на существование категории" Если имеете в виду if(!empty($item['category'])), то это никакая не проверка на существование категории. 2. "explode возвращает false" - полностью неверно. В реальности выполняется explode($this->category_delimiter, '') и возвращает массив array(''). 3. Ошибка возникает совсем в другом месте. Если захотите дискутировать дальше, то просьба не отвечать малозначащими общими фразами типа "опробуйте опять прочитать и посмотреть на код", а точно - что, где, почему. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 7 апреля, 2015 Жалоба Поделиться Опубликовано 7 апреля, 2015 Готов проверить Ваш метод, если изложите его ТОЧНО и АККУРАТНО, в стиле "в файле таком-то в позиции такой-то надо добавить/изменить то-то".Корс ты ведешь себя как нуб, постарайся из поста http://forum.simplacms.ru/topic/9513-еще-одна-ошибка-импорта/?p=71443 разобраться как нужно сделать. Опытный специалист уже бы давно разобрался как сделать. Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 7 апреля, 2015 Жалоба Поделиться Опубликовано 7 апреля, 2015 (изменено) Kors, я не пойму, вы это сделать что ли не можете?Как то для фрилансера написавшего столько модулей - слабовато в этом не разобраться... Изменено 7 апреля, 2015 пользователем yr4ik Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 7 апреля, 2015 Жалоба Поделиться Опубликовано 7 апреля, 2015 Если имеете в виду if(!empty($item['category'])), то это никакая не проверка на существование категории.Так а что же это если не проверка категории? Здесь проверяется на существование поле с категорией в импортируемом файле. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 7 апреля, 2015 Автор Жалоба Поделиться Опубликовано 7 апреля, 2015 (изменено) Kors, я не пойму, вы это сделать что ли не можете? Как то для фрилансера написавшего столько модулей - слабовато в этом не разобраться...Могу. А вопрос Ваш несколько в стороне от обсуждаемого ...Так а что же это если не проверка категории? Здесь проверяется на существование поле с категорией в импортируемом файле.Сначала Вы писали: 1. Идет проверка на существование категории (пост #5) Теперь пишете: 2. проверяется на существование поле с категорией в импортируемом файле. Это вещи РАЗНЫЕ! 1. Если имеете в виду if(!empty($item['category'])), то это никакая не проверка на существование категории, это проверка на то, пустое или непустое значение имеет величина $item['category']. По моему, это очевидно. Если подробнее, то $item['category'] - это величина, извлекаемая из файла импорта. Если это значение равно "Одежда" или "ttttttt", то в обоих случаях проверка даст true, в то время как категория "Одежда" может существовать, а категории "ttttttt" может не быть. 2. уже ближе к истине, но, строго говоря, тоже неверно... Изменено 7 апреля, 2015 пользователем Kors Цитата Ссылка на сообщение Поделиться на другие сайты
Andrey Terkin Опубликовано 7 апреля, 2015 Жалоба Поделиться Опубликовано 7 апреля, 2015 (изменено) Я в шоке с вас Kors... $item['category'] это не некая абстрактная величина, извлекаемая из файла импорта, а поле в файле импорта которое соответствует категории. Категории при импорте бывают не только в БД а в импортируемом файле тоже. if(!empty($item['category'])) а это как раз то, на что я предложил поменять проверку на существование if(isset($item['category'])) которая была в файле изначально, и которую вы никак не могли увидеть в приведенном мной коде. Если вы не можете понять вполне корректное обьяснение с приведенным куском кода то это ваши проблемы.Теперь, вместо того что бы просто сказать спасибо и забыть эту тему вы начинаете раздувать дискуссии придираясь к вырванным из контекста фразам. Все таки я правильно писал вам в посте 12, если не понятно что то прочитайте еще раз и посмотрите на код. Дальнейшее продолжение этой темы считаю бессмысленным.Удачи в тестировании... Изменено 7 апреля, 2015 пользователем Andrey Terkin Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 7 апреля, 2015 Автор Жалоба Поделиться Опубликовано 7 апреля, 2015 Я в шоке с вас Kors...Аналогично. Вы опять написали несколько в основном общих фраз. А там, где пытаетесь высказать какие-то утверждения, вылезают грубые ошибки. Например, "поле в файле импорта которое соответствует категории" - неверно, нет такого соответствия, как ни странно. Есть поле, которое соответствует СПИСКУ категорий товара. "Категории при импорте бывают не только в БД а в импортируемом файле тоже" - категории в файле импорта не бывают, в файле лишь поля CSV. В полях могут быть НАЗВАНИЯ категорий, но никак не сами категории. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 9 апреля, 2015 Автор Жалоба Поделиться Опубликовано 9 апреля, 2015 Обнаружилось следующее: Если в действиях, описанных в посте #1, сделать 2. В полученном файле у одного товара в колонке категории написать текст ',' - один символ запятой. то выходит при импорте та же самая ошибка. Если применить изменение, которые предложил Andrey Terkin в посте #5, то ошибка остается. Это еще одно указание на то, что диагностика ошибки и способ исправления, которые предложил Andrey Terkin, неверные, так как они опирались на посыл о том, что причина ошибки - в пустом тексте... Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 9 апреля, 2015 Жалоба Поделиться Опубликовано 9 апреля, 2015 Могу.А вопрос Ваш несколько в стороне от обсуждаемого ... Как вы сами всем на форуме говорите: можете - так выложите! Зачем лишние разговоры разводить? Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 9 апреля, 2015 Автор Жалоба Поделиться Опубликовано 9 апреля, 2015 Лишние разговоры заводите Вы сами. Вы задали вопрос - не по теме и довольно глупый. Несмотря на это, я на него дал ответ. Теперь Вы вместо благодарности за точный ответ начинаете выдвигать претензии на ровном месте. Если Вам требуется, чтоб я что-то для Вас выложил - лучше обратиться в личку. Цель темы, если Вы до сих пор не поняли - обратить внимание на ошибку в надежде, что разработчик исправит в очередной версии, примерно как в теме 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/ Думаю, что плодить на форуме сотни костыльных решений - не лучший стиль. Полагаю, что разработчик (если захочет) может дать решение на порядок лучше и у него это займет усилий на порядок меньше... Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 9 апреля, 2015 Жалоба Поделиться Опубликовано 9 апреля, 2015 Я ничего не развожу! А вы уже 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); } Надеюсь данные строки продавать не будете... Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 9 апреля, 2015 Автор Жалоба Поделиться Опубликовано 9 апреля, 2015 (изменено) Спасибо!Это намного лучше, чем то, что предлагал Andrey Terkin в посте #5. Изменено 9 апреля, 2015 пользователем Kors Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 9 апреля, 2015 Жалоба Поделиться Опубликовано 9 апреля, 2015 Спасибо! Это намного лучше, чем то, что предлагал Andrey Terkin в посте #5.Так то что в посте 5 предлагал сделать Andrey Terkin сделал в посте 23 пользователь под ником yr4ik. Корс ты что вникнуть никак не можешь? P.S. Корс кому твой дешевый спектакль еще нужен кроме как самому себе? Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.