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

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

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

 

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

 

 

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

 

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

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

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

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

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

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

 

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

 

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

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

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

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

 

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

 

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

 

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

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

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

 

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

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

print_r ($simpla->variants->get_variants());     
Изменено пользователем esistema1
Ссылка на сообщение
Поделиться на другие сайты

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

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

Вы делаете всё не правильно. Обратитесь лучше к фрилансеру, не мучьте себя и остальных.

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

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

Вы делаете всё не правильно. Обратитесь лучше к фрилансеру, не мучьте себя и остальных.

 

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

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

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

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

 

 

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

 

if(!$product_id_filter && !$variant_id_filter)

return array();

 

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

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

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

 

if(!$product_id_filter && !$variant_id_filter)

return array();

 

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

 

 

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

 

UPD

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

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

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

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

Возможно.

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

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

Возможно.

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

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

 

 

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

 

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

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

 

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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