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


Фотография
- - - - -

Исполнение кода PHP в элементе цены


В этой теме нет ответов

#1 Станислав

Станислав

Отправлено 05 November 2016 - 23:42

Рецепт очень простой, тем не менее, может пригодиться для решения специфических задач.

Возникла необходимость переключать описание в элементы цены JBZoo Price Plain (элемент ядра _description) для разных вариаций товара и языков. Проблема состояла в том, что сайт мультиязычный - 5 языков (английский, латышский, польский, русский, украинский), но имеется всего 2 элемента цены (2 склада - для ЕС и Украины с раздельным учетом остатков на складе). Первый элемент цены привязан к английскому, латышскому и польскому, второй - к русскому и украинскому. Ввиду того, что внутренние элементы цены не поддерживают мультиязычности, появилась идея определять язык стандартными средствами Joomla и выводить описание динамически. Для исполнения кода в элементе ядра _description требуется простейшая доработка:

 

В файле media/zoo/applications/jbuniversal/cart-elements/price/description/tmpl/description.php  заменяем:

echo JText::_($this->getValue());

на

$command = $this->getValue();
eval ($command);

В результате этой замены исполняется 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() считается небезопасной, хотя в приведенном выше коде никаких внешних параметров не используется и безопасность сайта не страдает. Фанаты безопасности могут добавить экранирование изменив строку:

eval ($command);

на

eval (addslashes($command));

2) при заполнении сайта контент-менеджером возникают неудобства, связанные с заполнением. Хотя копипаста "по образу и подобию" или шаблону может разрешить и это неудобство.

 

Достоинства:

Мы получаем практически неограниченные возможности динамической генерации контента по условию в элементе цены.


  • 3

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 





Click to return to top of page in style!