Jump to content

<oldprice> Вывод скидки в Яндекс.Маркет


Go to solution Solved by trainracing,

Recommended Posts

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

и любой покупатель если увидит значек скидки, подумает "О! скидка! надо зайти!"

 

Да вы и сами представьте, 15 обьявлений с простой ценой и из них одно со скидкой. Куда вы зайдете? вот!

Dyldhm1XCxE.jpg

 

 

Приступим:

в файле /yandex.php после v.price, добавим:

 v.compare_price,

далее ищем:

$price = round($simpla->money->convert($p->price, $main_currency->id, false),2);

и ниже добавляем:

if ($p->compare_price > 1) {
$compare_price = round($simpla->money->convert($p->compare_price, $main_currency->id, false),2);
} else {
$compare_price = '';
}

Дальше ищем:

<price>$price</price>

и ниже вставляем:

<oldprice>$compare_price</oldprice>

Примеры:

товар - http://clim-shop.ru/products/ochistitel-vozduha-mitsubishi-ma-e83h-r1

фид -    http://clim-shop.ru/yandex.xml

Link to post
Share on other sites

Будет выводить такое:

<oldprice></oldprice>

Надо бы предусмотреть, чтоб этого не было...

Link to post
Share on other sites

Будет выводить такое:

<oldprice></oldprice>

Надо бы предусмотреть, чтоб этого не было...

Будет выводить такое : <oldprice/>

 

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

 

Яндексу главное чтоб между <oldprice> не было значения "0"

Edited by trainracing
Link to post
Share on other sites


print "<price>".$price."</price>";

if( is_float($compare_price) )
print "<oldprice>".$compare_price."</oldprice>";

print "
<currencyId>".$currency_code."</currencyId>
<categoryId>".$p->category_id."</categoryId>
";

 

Edited by mishanya
Link to post
Share on other sites

 

print "<price>".$price."</price>";

if( is_float($compare_price) )
   print "<oldprice>".$compare_price."</oldprice>";

print "
<currencyId>".$currency_code."</currencyId>
<categoryId>".$p->category_id."</categoryId>
";

 Ваш код неработоспособен.

Link to post
Share on other sites

Есть еще недостаток в #1.

Если $p->compare_price имеет значение <1,  то старая цена не будет выводиться.

А товары стоимостью менее 1$  все же бывают...

Link to post
Share on other sites

Есть еще недостаток в #1.

Если $p->compare_price имеет значение <1,  то старая цена не будет выводиться.

А товары стоимостью менее 1$  все же бывают...

А у меня рубли + ввод цен в разных валютах = на выходе цены в рублях, и вряд ли у кого то будет меньше 1 рубля что то стоить, у большинства в дефолте рублевая валюта. А код не работает. мб из за модуля мультивалют, выгрузки, статуса под заказ

Link to post
Share on other sites

А у меня рубли + ввод цен в разных валютах = на выходе цены в рублях, и вряд ли у кого то будет меньше 1 рубля что то стоить, у большинства в дефолте рублевая валюта.

Вот и надо писать с самого начала ТОЛКОМ: ребята, мол, хоть я и пишу в разделе ГОТОВЫЕ РЕШЕНИЯ, но решение не готовое, а просто такое, которое работает на МОЕМ сайте. А что будет на других, неизвестно. Например, если у Вас цены меньше 1 единицы основной валюты, то будет работает неверно. А исправить этот пустячок мне недосуг, сами уж постарайтесь...

 

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

 

 Крутенько!  Писать готовые решения я мастер, а на своем сайте в пустяковом вопросе разобраться не могу...

Link to post
Share on other sites

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

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

Link to post
Share on other sites
  • Solution

Итоговая версия с учетом всех замечаний. 

- При значении меньше 1 ед старые цены выводятся

- При отсутствии старой цены выводится только <price>

 

в файле /yandex.php после v.price, добавим:

v.compare_price, 

 

далее ищем:

$price = round($simpla->money->convert($p->price, $main_currency->id, false),2);

и ниже добавляем:

if ($p->compare_price > 0) {
$compare_price = round($simpla->money->convert($p->compare_price, $main_currency->id, false),2);
} else {
$compare_price = '';
}

Дальше ищем:

print 
"<price>".$price."</price>
 <currencyId>".$currency_code."</currencyId>
 <categoryId>".$p->category_id."</categoryId>
";

и меняем на:

print 
"<price>".$price."</price>";

if( is_float($compare_price) )
   print "<oldprice>".$compare_price."</oldprice>";

print "
<currencyId>".$currency_code."</currencyId>
<categoryId>".$p->category_id."</categoryId>
";

готово.

c5K7LV6InhI.jpgs6vKcMgkToE.jpg

Edited by trainracing
Link to post
Share on other sites
  • 4 weeks later...

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

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

И тем не менее с его подачи недочет был найден.... ;) А вообще согласен — любое новое и годное решение должно попадать, ну или тогда тег писать "полуфабрикат"... чтобы люди были готовы к тому, чтобы "потанцевать" или случайно положить сайт.

Link to post
Share on other sites

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

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

Да уж дружище.все дурачки все двинутые один ты "гений"!
Link to post
Share on other sites
  • 2 weeks later...

Народ, кому не жалко, скиньте готовый yandex.php

https://yadi.sk/d/7YiRicWYhbsGU

 

Но есть нюансы! Валюту я убрал... то есть вверху где вывод валют — я в ручную рубли задал, и в <currencyId>RUR</currencyId>

вместо RUR надо из стандартного yandex.php вставить... перемнную

------------------

 

если не планируешь в др валюте — то тебе все подойдет

 

ой и 121 строка не нужна тебе ;)  с размером

 

 

Edited by Maksclub
Link to post
Share on other sites
  • 2 weeks later...

Сделал, работает. Огромное спасибо!

 

По одному из товаров Яндекс выдал ошибку - скидка не может быть менее 5% и более 95% - реально получалась 4% - в этом случае товар был опубликован по старой цене, без скидки. В общем этот момент нужно учитывать, так как в админке это делается заполнением старой цены а не назначением скидки в процентах.

Link to post
Share on other sites
  • 2 weeks later...

 

Нужно исправить ошибку

Эту строку

$compare_price = round($simpla->money->convert($p->compare_price, $main_currency->id, false),2);

Написать так

$compare_price = round($main->money->convert($p->compare_price, $main_currency->id, false),2);

 

Зачем? Чтоб хорошее решение стало нерабочим?

Link to post
Share on other sites

 

Зачем? Чтоб хорошее решение стало нерабочим?

 

Да действительно, поспешил с выводами, просто только что правил этот файл на сайте, а там вместо $simpla -> $main

Немного подзапутался

Link to post
Share on other sites
  • 5 months later...

Сделал немного по своему, суть таже:

1. находим в запросе:

SELECT v.price,

меняем на: 

SELECT v.price,v.compare_price,

2. Находим:

$price = round($simpla->money->convert($p->price, $main_currency->id, false),2);

Ниже вставляем:

$compare_price = '';
$compare_tag = '';

if ($p->compare_price > 0) { $compare_price = round($simpla->money->convert($p->compare_price, $main_currency->id, false),2); $compare_tag = "\n<oldprice>".$compare_price."</oldprice>"; }

3. Находим:

print "
<price>$price</price>
<currencyId>".$currency_code."</currencyId>
<categoryId>".$p->category_id."</categoryId>
";

Заменяем на:

print "
<price>$price</price>".$compare_tag."
<currencyId>".$currency_code."</currencyId>
<categoryId>".$p->category_id."</categoryId>
";

Вроде бы все : )

Edited by cernos
Link to post
Share on other sites

Сделал немного по своему, суть таже:

1. находим в запросе:

 

SELECT v.price,

меняем на:

SELECT v.price,v.compare_price,

2. Находим:

$price = round($simpla->money->convert($p->price, $main_currency->id, false),2);

Ниже вставляем:

if ($p->compare_price > 0)
{
$compare_price = round($simpla->money->convert($p->compare_price, $main_currency->id, false),2);
$compare_tag = "\n<old_price>".$compare_price."</old_price>";
}

3. Находим:

print "
<price>$price</price>
<currencyId>".$currency_code."</currencyId>
<categoryId>".$p->category_id."</categoryId>
";

Заменяем на:

print "
<price>$price</price>".$compare_tag."
<currencyId>".$currency_code."</currencyId>
<categoryId>".$p->category_id."</categoryId>
";

Вроде бы все : )

 

1. непонятно, зачем подправлять хорошее рабочее решение,

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

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

4. имеющуюся ошибка, если суть упростить, как раз годится для ЕГЭ по информатике в серию "Программист, видимо, в спешке написал программу с ошибкой"...

5. применяя такое решение, владелец магазина сильно рискует тем, что

5.1 Яндекс Маркет можно иногда файл принять, иногда зафиксировать ошибку. Если делается автоматически, то админ о второй ситуации может и не узнать...

5.2 Магазин в Яндекс Маркет после срабатывания такого решения может выглядеть неадекватно с точки зрения новых и старых цен...

 

Сделал немного по своему, суть таже

Суть совсем не та же...

Link to post
Share on other sites

1. непонятно, зачем подправлять хорошее рабочее решение,

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

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

4. имеющуюся ошибка, если суть упростить, как раз годится для ЕГЭ по информатике в серию "Программист, видимо, в спешке написал программу с ошибкой"...

5. применяя такое решение, владелец магазина сильно рискует тем, что

5.1 Яндекс Маркет можно иногда файл принять, иногда зафиксировать ошибку. Если делается автоматически, то админ о второй ситуации может и не узнать...

5.2 Магазин в Яндекс Маркет после срабатывания такого решения может выглядеть неадекватно с точки зрения новых и старых цен...

 

Суть совсем не та же...

Kors, ты словно БАБКА у подъезда. Ты напиши ошибку, которая допущена...

----

Да, была опечатка с "oldprice" так тяжело было сразу написать?

 

У топик стартера есть лишние условия IF и ELSE, которые по сути не нужны. Сделал по своему выложил свой вариант, не нравится? используй вариант топикстартера.

Edited by cernos
Link to post
Share on other sites
×
×
  • Create New...