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


Фото
* * * * * 3 голосов

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

скидка oldprice старая цена яндекс маркет

Best Answer trainracing , 28.05.2015 - 13:19

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

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

Перейти к посту


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

#21 Andrey Terkin

Andrey Terkin
  • Фрилансер
  • 77 сообщений
  • Программирование, Верстка

Опубликовано 22.07.2015 - 19:52


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

 

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

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



#22 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 10.01.2016 - 01:20

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

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, 10.01.2016 - 12:53


#23 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 10.01.2016 - 09:49

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

 

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


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



#24 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 10.01.2016 - 10:58

1. непонятно, зачем подправлять хорошее рабочее решение,
2. если уж поправлять, то не сажать новые ошибки,
3. подобные ошибки можно делать новичку, а не программисту со стажем,
4. имеющуюся ошибка, если суть упростить, как раз годится для ЕГЭ по информатике в серию "Программист, видимо, в спешке написал программу с ошибкой"...
5. применяя такое решение, владелец магазина сильно рискует тем, что
5.1 Яндекс Маркет можно иногда файл принять, иногда зафиксировать ошибку. Если делается автоматически, то админ о второй ситуации может и не узнать...
5.2 Магазин в Яндекс Маркет после срабатывания такого решения может выглядеть неадекватно с точки зрения новых и старых цен...

 


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

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

----

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

 

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


Изменено: cernos, 10.01.2016 - 11:06


#25 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 10.01.2016 - 11:31

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

 
Опечатку я не заметил. И соответственно, имел в в иду не ее, а существенно более важный и принципиальный момент.
 

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

 
Это какие конкретно "лишние условия"?

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



#26 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 10.01.2016 - 12:53

намек понял, исправил.



#27 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 10.01.2016 - 12:56

 
Опечатку я не заметил. И соответственно, имел в в иду не ее, а существенно более важный и принципиальный момент.
 

 
Это какие конкретно "лишние условия"?

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

Лишние условия, конкретно:

else {
$compare_price = '';
}

Можно объявить переменную до IF

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

В моем примере нет необходимости в этой проверке.

 

И плюс мое решение более компактно = )

Каким хотите, таким и пользуйтесь. Я предложил свой вариант ничем не отличающийся от варианта топикстартера, только без лишнего кода.



#28 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 10.01.2016 - 13:00

А вообще все это решение можно укатать в одну строчку со всему проверками, допустим:

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

Восприятие кода конечно БЯКА, но пашет быстрее (если сравнивать на уровне мс)

Ну и остается только вставить $compare_price, как я показал ранее.



#29 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 10.01.2016 - 13:44

Теперь ошибка действительно исправлена, поздравляю!

 

Только не очень понятно, чем Ваше обновленное решение (#22, Изменено: cernos, Сегодня, 12:53) отличается от решения ТС (кроме малосущественных отличий в синтаксисе)...

 

Лишние условия, конкретно:

else {
$compare_price = '';
}

 

В решении  ТС это условие совсем не лишнее, а принципиально важное и нужное. Если его убрать, возникнет та же ошибка, что и в Вашей начальной версии.
Смысл, значение и важность подобных моментов обычно разбирают в учебниках и курсах для начинающих программистов.
А уж программисты-профессионалы такое распознают сразу...



#30 Ogybil

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

Опубликовано 10.01.2016 - 15:22

А можно так:

 

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

 


 



#31 Ogybil

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

Опубликовано 10.01.2016 - 15:24

А еще лучше вынести

$compare_price = '';

 

в начало



#32 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 10.01.2016 - 17:29

А еще лучше вынести

$compare_price = '';

 

в начало

 

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



#33 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 11.01.2016 - 00:16

Что могу сказать, юзайте вариант топикстартера, он рабочий, так же как и мой = )


Изменено: cernos, 11.01.2016 - 00:16


#34 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 11.01.2016 - 09:39

Что могу сказать, юзайте вариант топикстартера, он рабочий, так же как и мой = )

 

Только не очень понятно, чем Ваше обновленное решение (#22, Изменено: cernos, Сегодня, 12:53) отличается от решения ТС (кроме малосущественных отличий в синтаксисе)...

Обычно, если хотят дать второй вариант решения, то хотя бы отдают себе отчет о том, чем новой вариант отличается от имеющегося, отличается ли вообще, и отличается ли в лучшую сторону. Иначе непонятно, в чем смысл...







Также с меткой «скидка, oldprice, старая цена, яндекс маркет»

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

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