Логические и Арифметические операторы в парсинге в интернет магазин

Все что описано в этой статье будет работать во всех полях Парсинга в ИМ и Парсинга в CSV
Поддержка этого функционала во всех полях появилась с версии SimplePars v4.2

В этих полях вы можете использовать логический оператор {|} который обозначает ИЛИ
Так же использовать Арифметические операторы.

Логический оператор {|} - ИЛИ

Пример записи
Первое значение{|}Второе
Если первое значение отсутствует или равно 0 , тогда оператор ИЛИ добавит второе значение.
Если первое значение не пустое и больше 0 тогда оператор ИЛИ выберет и запишет именно его.

Если оба значение будут отсутствовать, или будут равно 0 тогда значение будет 0 или взято с поля по умолчанию.
PS. Так и знал что вы это спросите :)

Если вы укажите в цена границу париснга с ценой товара то модуль ее спарсит, но бываю доноры где есть старая цена и новая.
И в некоторых товарах есть только старая цена, а в некоторых и старая и новая. В таких случаях довольно сложно настроить одну границу парсинга что бы она учитывала два варианта и вы можете использовать условие ИЛИ {|}

Записывается как
{gran_3277}{|}{gran_3276}
На наш человеческий это звучит так: Возьми цену из границы парсинга {gran_3277} если эта граница не пустая и не равна нулю.
Если она пустая или равна нулю возьми цену из границы парсинга {gran_3276}

Оператор {|} позволяет вам парсить товары где мигающая цена. То же самое касается акционной цены товара.

Арифметические операторы

Так же эти поля поддерживают арифметически операторы
{+} - Прибавить
{*} - Умножит
{-} - Отнять
{/} - Разделить

То есть если в поле цена записать 100{+}1 То цена товар будет 101

Внимание!!! Модуль не работает с приоритетами в действиях, а это значить что все математические действия будут выполнятся последовательно с лева на права. То есть как бы банально это не прозвучало но для модуля 2{+}2{*}2 равно 8 !!!
Учитывая этот фактор составляйте правила с нужной последовательностью.

Еще одно отступление. Как мы все знаем делить на 0 нельзя. Но поскольку вы можете записать вот такую строку. 100{/}0{+}10
Что с математической точки зрения недопустимо. И хуже того php в таком случаи генерирует ошибку, а это ошибка остановит парсинг.
Было принято решение что если с правой стороны от знака делить будет пустота или 0 модуль на это место ставить цифру 1.
Как мы знаем деление на единицу не изменяет значение. Это своего рода зашита от дурака.
В глазах модуля это формула даст ответ 100{/}0{+}10 = 110

Дальше еще одна особенность связанная с умножением и пустотой.
Поскольку теперь можно складывать границы парсинга то можно задать такую формулу.
{gran_1}{*}5{+}10
где {gran_1} может оказаться 0 или пустой
То в итоге мы имеем вот такую формулу.
0{*}5{+}10
И тут внимание!!! Не забываем что если ноль умножить на что либо ответ всегда будет ноль. То же самое если разделить ноль на все что угодно ответ тоже будет ноль.
То есть эта формула даст ответ 0{*}5{+}10 = 10

Возможность комбинировать логику и арифметику.

Ну и в лучших традициях модуля SimplePars который наверное уже давно не Simple вы можете использовать вместе логические и арифметические операторы.
То есть допускается запись такого типа.
666{+}34{*}100{-}70000{|}0{+}12{*}10{/}2{|}100{*}12

Как это это будет работать.

Модуль разобьет формулу на логические блоки и начнет вычислять по блочно слева на право.
В первом блоке после выполнения всех математических действий с лева на право, получит 0 значит он пойдет дальше вычислять следующий логический блок.
Вычислив второй логический блок получить значение 60 , а это не пустота и больше ноля, значить остальную часть формулы модуль выбросит и запишет 60.

Это все особенности логических и арифметических операторов на вкладке Парсинг в ИМ и Парсинг в CSV