Перейти к содержимому


Фото
- - - - -

XML варианты товара в одну строку


  • Чтобы отвечать, сперва войдите на форум
15 ответов в теме

#1 esistema1

esistema1
  • Пользователь
  • 201 сообщений

Опубликовано 14.03.2019 - 10:30

Всем здравствуйте!

 

Делаю выгрузку товаров через 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>
";

 

 

Но ничего вообще не выводится.

 

Подскажите пожайлуста как можно сделать вывод всех вариантов товара в одну строку?



#2 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 079 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 14.03.2019 - 11:30

http://php.net/manua...ion.implode.php

#3 phukortsin

phukortsin
  • Фрилансер
  • 795 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 14.03.2019 - 11:52

В Вашем способе масса ошибок.
Начать с того, что $simpla->variants->get_variants() не даст в принципе никаких данных, а выдаст пустой массив.

По-хорошему надо бы решать эту задачу не меняя совсем исходного запроса (разве что сделать в нем order by p.id), а учет вариантов проводить в цикле PHP.



#4 esistema1

esistema1
  • Пользователь
  • 201 сообщений

Опубликовано 14.03.2019 - 14:31

Т.е. убираю все что выше написал и пробую сделать рабочим этот код?

 

if(isset($variants[$p->product_id]))
foreach($variants[$p->product_id] as $v1)
print "<variants>$v1</variants>
";

 

Вопрос - как его сделать рабочим?



#5 esistema1

esistema1
  • Пользователь
  • 201 сообщений

Опубликовано 18.03.2019 - 16:19

Подскажите пожалуйста почему строка

print_r ($simpla->products->get_images());  

 

выводит все картинки товара в файле Yandex.xml, а строка

 

print_r ($simpla->variants->get_variants());     

 

не выводит ничего (пустой массив).


Изменено: esistema1, 18.03.2019 - 16:19


#6 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 079 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 18.03.2019 - 16:40

Потому что не переданы параметры (аргументы).

#7 esistema1

esistema1
  • Пользователь
  • 201 сообщений

Опубликовано 18.03.2019 - 16:44

Потому что не переданы параметры (аргументы).

 

А как они в первом случае переданы (где вывод картинок)?

Или как их передать чтобы сработала строка

print_r ($simpla->variants->get_variants());     

Изменено: esistema1, 18.03.2019 - 16:47


#8 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 079 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 18.03.2019 - 16:48

А как они в первом случае переданы (где вывод картинок)?

В первом случае если не переданы ID товаров, то выбираются все картинки всех товаров (грубая ошибка разработчика), во втором если не переданы параметры, то возвращает массив (тут он это учёл).
Вы делаете всё не правильно. Обратитесь лучше к фрилансеру, не мучьте себя и остальных.

#9 esistema1

esistema1
  • Пользователь
  • 201 сообщений

Опубликовано 18.03.2019 - 16:53

В первом случае если не переданы ID товаров, то выбираются все картинки всех товаров (грубая ошибка разработчика), во втором если не переданы параметры, то возвращает массив (тут он это учёл).
Вы делаете всё не правильно. Обратитесь лучше к фрилансеру, не мучьте себя и остальных.

 

Хочу сам научиться.. Или с чьей нибудь помощью...



#10 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 079 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 18.03.2019 - 16:59

Хочу сам научиться.. Или с чьей нибудь помощью...

Тогда учите матчасть, без неё никак.

#11 phukortsin

phukortsin
  • Фрилансер
  • 795 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 18.03.2019 - 17:01

Или как их передать чтобы сработала строка

print_r ($simpla->variants->get_variants());     


Вы можете попробовать в api/Variants.php удалить (закомментировать) строки

if(!$product_id_filter && !$variant_id_filter)
return array();

Вообще это нерационально и идейно неправильно. Но для целей обучения сгодится...

#12 esistema1

esistema1
  • Пользователь
  • 201 сообщений

Опубликовано 18.03.2019 - 17:03

Вы можете попробовать в api/Variants.php удалить (закомментировать) строки

if(!$product_id_filter && !$variant_id_filter)
return array();

Вообще это нерационально и идейно неправильно. Но для целей обучения сгодится...

 

 

А на что еще должно повлиять удаление этих строк?

 

UPD

этот вариант явно не подойдет - он изменит формирование остальных xml файлов..

Надо как то обойтись только правками внутри файла Yandex.php

Это возможно?


Изменено: esistema1, 18.03.2019 - 17:21


#13 phukortsin

phukortsin
  • Фрилансер
  • 795 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 18.03.2019 - 17:28

Возможно.

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



#14 esistema1

esistema1
  • Пользователь
  • 201 сообщений

Опубликовано 18.03.2019 - 17:43

Возможно.

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

 

 

Как всегда премного благодарен Вам, вроде решил проблему.

 

Смотрите что у меня получилось: в api/variants.php я добавил еще одну функцию get_variants2 из нее сразу убрал 

if(!$product_id_filter && !$variant_id_filter)
	return array();

 

 

Варианты стали выводиться как надо. Скажите пожалуйста какие минусы у данного решения?



#15 phukortsin

phukortsin
  • Фрилансер
  • 795 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 18.03.2019 - 17:51

Если Вы это сделали в своей отдельной функции, то особых минусов и не будет.

Разве что запрос весьма объемный. Но если товаров не сильно много, то и не страшно...



#16 esistema1

esistema1
  • Пользователь
  • 201 сообщений

Опубликовано 18.03.2019 - 18:00

Товаров много (5000) но запрос к этому xml файлу будет 1-2 раза в неделю.






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых