Вывод в зависимости от содержимого плейсхолдера
Добрый день!
Подскажите, пожалуйста, как выводить информацию в зависимости от содержимого плейсхолдера?
В данный момент информация выводится таким образом:
Опция [[+availability]] имеет 2 значения «Есть в наличии» и «Под заказ». Подскажите, какая должна быть конструкция, чтобы при выборе значения «Есть в наличии» выводился div с классом class=«available», а при выборе значения «Под заказ» class=«not_available»?
Решение:
Подскажите, пожалуйста, как выводить информацию в зависимости от содержимого плейсхолдера?
В данный момент информация выводится таким образом:
[[!+availability:gt=`0`:then=`<div class="available">[[+availability]]</div>`:else=``]]
Если в miniShop2 характеристика [[+availability]] не заполнена, то ничего не выводится, если выбрано какое-либо значение, то выводится <div class="available">[[+availability]]</div>
Опция [[+availability]] имеет 2 значения «Есть в наличии» и «Под заказ». Подскажите, какая должна быть конструкция, чтобы при выборе значения «Есть в наличии» выводился div с классом class=«available», а при выборе значения «Под заказ» class=«not_available»?
Решение:
[[!+availability:gt=`0`:then=`[[!+availability:is=`Под заказ`:then=`<div class="not_available">[[+availability]]</div>`:else=`<div class="available">[[+availability]]</div>`]]`:else=``]]
Комментарии: 7
Вы не пробовали узнать, откуда берется значение плэйсхолдера?
Уж с конструкцию привели ради смены css класса, одного (!?)
Уж с конструкцию привели ради смены css класса, одного (!?)
К примеру как я вижу, есть разные чанки для оформления одного блока страницы.
Причем отличия в них могут быть гораздо более сложными чем [[+plsname]]cssstyle, где в зависимости от значения возвращается пустая строка или not_, (продолжил логику вашего примера).
То есть лучше хранить два дива в разных чанках, и уже в сниппете реализовывать логику, какой показывать.
Приеду домой поковыряю магазин, не верю, что нет более простого и гибкого пути решения вашего вопроса.
Причем отличия в них могут быть гораздо более сложными чем [[+plsname]]cssstyle, где в зависимости от значения возвращается пустая строка или not_, (продолжил логику вашего примера).
То есть лучше хранить два дива в разных чанках, и уже в сниппете реализовывать логику, какой показывать.
Приеду домой поковыряю магазин, не верю, что нет более простого и гибкого пути решения вашего вопроса.
Более простого я не придумал (
[[+availability:availability]]
Сниппет availability<?php
$availability = $input; (ваш плейсхолдер)
$output = '';
switch($availability){
case 0: $output = 'равен 0'; break;
case 1: $output = 'равен 1'; break;
case 'Под заказ': $output = 'только под заказ';
default: $output = 'ни равен ничему'; break;
}
return $output;
Если принципиально обойтись встроенными фильрами, то можно попробовать типа такого:
Лучше написать фильтр и скормить ему значение. Например, так: [[+availability:process]], и сделать сниппет process, в котором уже нормально все обработать:
[[!+availability:is=`Есть в наличии`:then=`<div class="available">[[+availability]]</div>`:else=`[[!+availability:is=`Под заказ`:then=`<div class="not_available">[[+availability]]</div>`]]`]]
Монструозно, конечно. Но в стандарных фильтрах нет «else if», поэтому так.Лучше написать фильтр и скормить ему значение. Например, так: [[+availability:process]], и сделать сниппет process, в котором уже нормально все обработать:
if (! empty($input)) {
if ($input == 'Есть в наличии') {
$class = 'available';
} else {
$class = 'not_available';
}
return "<div class='$class'>$input</div>";
}
Ну по сути в моем варианте я и использую подобную конструкцию, только там есть еще условие, что ничего не выбрано.
Делать это встроенными фильтрами или сниппетом — не принципиально, вопрос в том, что будет быстрее работать?
Делать это встроенными фильтрами или сниппетом — не принципиально, вопрос в том, что будет быстрее работать?
Сниппетом быстрее.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.