Рецепт очень простой, тем не менее, может пригодиться для решения специфических задач.
Возникла необходимость переключать описание в элементы цены JBZoo Price Plain (элемент ядра _description) для разных вариаций товара и языков. Проблема состояла в том, что сайт мультиязычный - 5 языков (английский, латышский, польский, русский, украинский), но имеется всего 2 элемента цены (2 склада - для ЕС и Украины с раздельным учетом остатков на складе). Первый элемент цены привязан к английскому, латышскому и польскому, второй - к русскому и украинскому. Ввиду того, что внутренние элементы цены не поддерживают мультиязычности, появилась идея определять язык стандартными средствами Joomla и выводить описание динамически. Для исполнения кода в элементе ядра _description требуется простейшая доработка:
В файле media/zoo/applications/jbuniversal/cart-elements/price/description/tmpl/description.php заменяем:
на
В результате этой замены исполняется PHP-код, помещенный в description, например для описанной выше ситуации:
- $lang = JFactory::getLanguage();
- $tag = $lang->getTag();
- // Английский
- if ($tag == 'en-GB')
- {
- echo 'Описание на английском';
- }
- // Латышский
- if ($tag == 'lv-LV')
- {
- echo 'Описание на латышском';
- }
- // Польский
- if ($tag == 'pl-PL')
- {
- echo 'Описание на польском';
- }
Основные недостатки рецепта:
1) функция eval() считается небезопасной, хотя в приведенном выше коде никаких внешних параметров не используется и безопасность сайта не страдает. Фанаты безопасности могут добавить экранирование изменив строку:
на
2) при заполнении сайта контент-менеджером возникают неудобства, связанные с заполнением. Хотя копипаста "по образу и подобию" или шаблону может разрешить и это неудобство.
Достоинства:
Мы получаем практически неограниченные возможности динамической генерации контента по условию в элементе цены.