Marat_Kh: Ищем все %ххх% в шаблоне, перебираем, если есть на ххх условие ($a), разбираем его по &. Перебираем итог, выдергиваем (preg_match_all('#(.+)(==|>|<)(.+)#u', $mm[2][$key], $mmm);) ключ параметра ($mmm[1][0]), логику $mmm[2][0] (>,< или ==), значение ($mmm[3][0]) и отдаем вместе с массивом параметров товара ($data) _cmpr($k, $logic, $v, $data) для сравнения... если итоговый $re тру , то заменяем в тексте ($t) %xxx% на $b['xxx']. Все ;)
Ага, вот только не понятно почему это проще/правильней, чем assert()? 🍿
Мне же не втупую кусок рабочего кода скопировать хочется, а понять логику почему здоровенная конструкция с вложенными циклами - лучше, чем дефолтная функция, которая даёт нужный результат...
А то, что стиль, который я запостил и который вы продемонстрировали на скриншоте в окружении рекламы с пиписьками, мягко говоря, различаются, вас не смущает? :)
SERM-service: Долго пытался понять чего вы хотите, возможно так и не понял, но если понял то я бы сделал так:
if($price<10) $titleprice="недорогие";
elseif($price>10) $titleprice="премиальные";
else $titleprice="";
Вы подстроились под буквальное, упрощённое условие из примера. Конечно, если просто взять условие с $price из примера, то предложенный вами способ - прост и очевиден.
т.е. каждая в своей ячейке?
тогда я вообще не понимаю проблемы...(((
Окей, давайте я попробую переформулировать ещё раз...
Есть товар - "Труселя, артикул 123456", его набор характеристик:
$price =12;
$coutry = 'Китай';
$size = '7xl';
$color = 'красный';
$material = 'шёлк';
$quantity = 12;
Переменная, которую определил контентщик:
%premium% = "Шикарные труселя из нежнейшего шёлка, сотканного лучшими восточными мастерами, тысячелетиями хранящими и передающими свои секреты.".
Рады представить вам новую коллецию! %premium% Трусы разработаны лучшими немецкими инженерами, обладают эффектом памяти и учитывают индивидуальные особенности владельца. %limited% Страна производства - <?=$country?>
-------------------------------
Если условие для %premium% = true, в описании трусов появляется заданная строка.
%limited% с имеющимся набором характеристик - false, поэтому в примере не подставляется.
-------------------------------
Получаем на выходе:
Рады представить вам новую коллецию! Шикарные труселя из нежнейшего шёлка, сотканного лучшими восточными мастерами, тысячелетиями хранящими и передающими свои секреты. Трусы разработаны лучшими немецкими инженерами, обладают эффектом памяти и учитывают индивидуальные особенности владельца. Страна производства - Китай.
-------------------------------
не понимаю проблемы...(((
проблема не в характеристиках, а в том, как хранить условия для подстановок. В примере это:
не считая ужасного синтаксиса, что именно вас тут смущает?
Лучший совет в теме :)
Ищем все %ххх% в шаблоне, перебираем, если есть на ххх условие ($a), разбираем его по &.
Перебираем итог, выдергиваем (preg_match_all('#(.+)(==|>|<)(.+)#u', $mm[2][$key], $mmm);) ключ параметра ($mmm[1][0]), логику $mmm[2][0] (>,< или ==), значение ($mmm[3][0]) и отдаем вместе с массивом параметров товара ($data) _cmpr($k, $logic, $v, $data) для сравнения...
если итоговый $re тру , то заменяем в тексте ($t) %xxx% на $b['xxx']. Все ;)
Ага, вот только не понятно почему это проще/правильней, чем assert()? 🍿
Мне же не втупую кусок рабочего кода скопировать хочется, а понять логику почему здоровенная конструкция с вложенными циклами - лучше, чем дефолтная функция, которая даёт нужный результат...
toxic steel, не сработало
А то, что стиль, который я запостил и который вы продемонстрировали на скриншоте в окружении рекламы с пиписьками, мягко говоря, различаются, вас не смущает? :)
в вашем описании я не увидел и не понимаю тоже что вы через IF проверяете и выводите?
Ну тогда я сдаюсь...
Не выбирается товар из БД. Он есть уже у нас "на руках", мы с ним работаем, с конкретно его характеристиками, с его описанием.
Мудрёно :) Ща буду курить :)
Мне только AND надо, OR не будет.
И можно отбросив первую часть, т.к. весь набор %переменных% известен заранее, нужно просто определиться с заменой - "строка" или "пусто".
какой?
10 символов.
Конечно же всё в БД.
Долго пытался понять чего вы хотите, возможно так и не понял, но если понял то я бы сделал так:
if($price<10) $titleprice="недорогие";
elseif($price>10) $titleprice="премиальные";
else $titleprice="";
Вы подстроились под буквальное, упрощённое условие из примера. Конечно, если просто взять условие с $price из примера, то предложенный вами способ - прост и очевиден.
тогда я вообще не понимаю проблемы...(((
Окей, давайте я попробую переформулировать ещё раз...
Есть товар - "Труселя, артикул 123456", его набор характеристик:
$price =12;
$coutry = 'Китай';
$size = '7xl';
$color = 'красный';
$material = 'шёлк';
$quantity = 12;
Переменная, которую определил контентщик:
%premium% = "Шикарные труселя из нежнейшего шёлка, сотканного лучшими восточными мастерами, тысячелетиями хранящими и передающими свои секреты.".
%limited% = "Премиальная коллекция, лимитированная серия."
Условия переменной:
%premium% - ($coutry == 'Китай' && $price > 10 && $material == 'шёлк')
%limited% - ($price > 10 && $quantity < 10)
-------------------------------
Формула:
Рады представить вам новую коллецию! %premium% Трусы разработаны лучшими немецкими инженерами, обладают эффектом памяти и учитывают индивидуальные особенности владельца. %limited% Страна производства - <?=$country?>
-------------------------------
Если условие для %premium% = true, в описании трусов появляется заданная строка.
%limited% с имеющимся набором характеристик - false, поэтому в примере не подставляется.
-------------------------------
Получаем на выходе:
Рады представить вам новую коллецию! Шикарные труселя из нежнейшего шёлка, сотканного лучшими восточными мастерами, тысячелетиями хранящими и передающими свои секреты. Трусы разработаны лучшими немецкими инженерами, обладают эффектом памяти и учитывают индивидуальные особенности владельца. Страна производства - Китай.
-------------------------------
проблема не в характеристиках, а в том, как хранить условия для подстановок. В примере это:
А если в условии переменных не 2-3, а десяток? Это офигенно громоздкий цикл с if-else получается.
Выше предложили рабочее решение с eval, но eval тут реально не оправданно избыточен.
Но ведь можно же использовать assert($x), где $x - это прям строка условия?
Вы про какую фильтрацию? Где и что фильтруется?