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

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


Перейти к решению Решено trainracing,

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

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

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

 

Да вы и сами представьте, 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

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

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

<oldprice></oldprice>

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

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

 

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

 

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

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


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

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

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

 

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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

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

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

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

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

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

- При значении меньше 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

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

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

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

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

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

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

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

Да уж дружище.все дурачки все двинутые один ты "гений"!
Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

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

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

 

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

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

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

 

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

 

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

 

 

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

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

 

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

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

 

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

Эту строку

$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);

 

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

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

 

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

 

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 5 месяцев спустя...

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

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>
";

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

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

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

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 Магазин в Яндекс Маркет после срабатывания такого решения может выглядеть неадекватно с точки зрения новых и старых цен...

 

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

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

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

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

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

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

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

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

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

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

 

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

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

----

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

 

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

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

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

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

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

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

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

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

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

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

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