esistema1 Опубликовано 14 марта, 2019 Жалоба Поделиться Опубликовано 14 марта, 2019 Всем здравствуйте! Делаю выгрузку товаров через xml для одного маркетплейса на базе стандартного Yandex.php. В запрос к базе добавил "GROUP BY p.id" тем самым теперь выводится только один вариант каждого товара. Теперь мне в этом варианте надо в одной строке перечислить все варианты товара, вот так <param name="Размер" unit="RU">42, 44, 46</param> Пробую делать по аналогии с выводом фотографий товара. Добавил перед sql запросом //Варианты $variants = array(); foreach($simpla->variants->get_variants() as $v1) if(count($variants[$v1->product_id]) < 10) $variants[$v1->product_id][] = $v1->name; В запрос добавил строку LEFT JOIN __variants v1 ON p.id = v1.product_id AND v1.position=(SELECT MIN(position) FROM __variants WHERE product_id=p.id LIMIT 1) И пытаюсь сделать вывод следующим кодом if(isset($variants[$p->product_id])) foreach($variants[$p->product_id] as $v1) print "<variants>$v1</variants> "; Но ничего вообще не выводится. Подскажите пожайлуста как можно сделать вывод всех вариантов товара в одну строку? Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 14 марта, 2019 Жалоба Поделиться Опубликовано 14 марта, 2019 http://php.net/manual/ru/function.implode.php Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 14 марта, 2019 Жалоба Поделиться Опубликовано 14 марта, 2019 В Вашем способе масса ошибок.Начать с того, что $simpla->variants->get_variants() не даст в принципе никаких данных, а выдаст пустой массив.По-хорошему надо бы решать эту задачу не меняя совсем исходного запроса (разве что сделать в нем order by p.id), а учет вариантов проводить в цикле PHP. Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 14 марта, 2019 Автор Жалоба Поделиться Опубликовано 14 марта, 2019 Т.е. убираю все что выше написал и пробую сделать рабочим этот код? if(isset($variants[$p->product_id])) foreach($variants[$p->product_id] as $v1) print "<variants>$v1</variants> "; Вопрос - как его сделать рабочим? Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 18 марта, 2019 Автор Жалоба Поделиться Опубликовано 18 марта, 2019 (изменено) Подскажите пожалуйста почему строка print_r ($simpla->products->get_images()); выводит все картинки товара в файле Yandex.xml, а строка print_r ($simpla->variants->get_variants()); не выводит ничего (пустой массив). Изменено 18 марта, 2019 пользователем esistema1 Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 Потому что не переданы параметры (аргументы). Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 18 марта, 2019 Автор Жалоба Поделиться Опубликовано 18 марта, 2019 (изменено) Потому что не переданы параметры (аргументы). А как они в первом случае переданы (где вывод картинок)?Или как их передать чтобы сработала строка print_r ($simpla->variants->get_variants()); Изменено 18 марта, 2019 пользователем esistema1 Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 А как они в первом случае переданы (где вывод картинок)?В первом случае если не переданы ID товаров, то выбираются все картинки всех товаров (грубая ошибка разработчика), во втором если не переданы параметры, то возвращает массив (тут он это учёл). Вы делаете всё не правильно. Обратитесь лучше к фрилансеру, не мучьте себя и остальных. Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 18 марта, 2019 Автор Жалоба Поделиться Опубликовано 18 марта, 2019 В первом случае если не переданы ID товаров, то выбираются все картинки всех товаров (грубая ошибка разработчика), во втором если не переданы параметры, то возвращает массив (тут он это учёл).Вы делаете всё не правильно. Обратитесь лучше к фрилансеру, не мучьте себя и остальных. Хочу сам научиться.. Или с чьей нибудь помощью... Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 Хочу сам научиться.. Или с чьей нибудь помощью...Тогда учите матчасть, без неё никак. Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 Или как их передать чтобы сработала строкаprint_r ($simpla->variants->get_variants()); Вы можете попробовать в api/Variants.php удалить (закомментировать) строки if(!$product_id_filter && !$variant_id_filter)return array(); Вообще это нерационально и идейно неправильно. Но для целей обучения сгодится... Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 18 марта, 2019 Автор Жалоба Поделиться Опубликовано 18 марта, 2019 (изменено) Вы можете попробовать в api/Variants.php удалить (закомментировать) строки if(!$product_id_filter && !$variant_id_filter)return array(); Вообще это нерационально и идейно неправильно. Но для целей обучения сгодится... А на что еще должно повлиять удаление этих строк? UPDэтот вариант явно не подойдет - он изменит формирование остальных xml файлов..Надо как то обойтись только правками внутри файла Yandex.phpЭто возможно? Изменено 18 марта, 2019 пользователем esistema1 Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 Возможно.Если будете спрашивать как именно, то для написания такого кода надо поработать.Вам в теме Noxter уже дал хороший совет - обратитесь к специалисту. Или учитесь сами не кое-как методом тыка, а серьезно. Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 18 марта, 2019 Автор Жалоба Поделиться Опубликовано 18 марта, 2019 Возможно.Если будете спрашивать как именно, то для написания такого кода надо поработать.Вам в теме Noxter уже дал хороший совет - обратитесь к специалисту. Или учитесь сами не кое-как методом тыка, а серьезно. Как всегда премного благодарен Вам, вроде решил проблему. Смотрите что у меня получилось: в api/variants.php я добавил еще одну функцию get_variants2 из нее сразу убрал if(!$product_id_filter && !$variant_id_filter) return array(); Варианты стали выводиться как надо. Скажите пожалуйста какие минусы у данного решения? Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 Если Вы это сделали в своей отдельной функции, то особых минусов и не будет.Разве что запрос весьма объемный. Но если товаров не сильно много, то и не страшно... Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 18 марта, 2019 Автор Жалоба Поделиться Опубликовано 18 марта, 2019 Товаров много (5000) но запрос к этому xml файлу будет 1-2 раза в неделю. Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.