Для популярного компонента интернет-магазина JoomShopping существует аддон Second Description For Product. Этот аддон добавляет поле для второго описания в карточке товара. Однако, технически текст второго описания заносится в ту же ячейку таблицы базы данных, что и первое описание. Между ними вставляется текстовый разделитель {second_description}
, по которому плагин "разрезает" одно общее описание продукта на два.
Аддон состоит из двух плагинов: один для админки, второй для фронтенда.
Проблема заключалась в том, что если включен плагин second_description_for_product
группы jshoppingproducts
, то в описании продукта переставали работать контент-плагины Joomla, несмотря даже на включенную настройку "использовать плагины в описании продукта". Либо второе описание, либо контент-плагины. Проблема не уникальна, с ней сталкивались многие, например.
Решение проблемы
Код плагина plugins/jshoppingproducts/second_description_for_product/second_description_for_product.php
<?php
defined('_JEXEC') or die('Restricted access');
class plgJshoppingProductsSecond_description_for_product extends JPlugin
{
var $separator = "{second_description}";
function __construct(&$subject, $config){
parent::__construct($subject, $config);
}
function onBeforeDisplayProduct(&$product, &$view, &$product_images, &$product_videos, &$product_demofiles) {
$lang = JSFactory::getLang();
$description = $lang->get('description');
$second_description = 'second_'.$description;
$tmp = JHtml::_("content.prepare", $product->description);
$tmp = explode($this->separator, $tmp);
if (isset($tmp[1])) {
$product->description = $tmp[0];
$product->second_description = $tmp[1];
if (!isset($view->_tmp_product_html_after_buttons)) $view->_tmp_product_html_after_buttons = '';
$view->_tmp_product_html_after_buttons .= '<div class="second_description">'.$product->second_description.'</div>';
}
}
}
Нужно перед разделением одного общего описания на два добавить обработку контентными плагинами. Обратите внимание на строку:
$tmp = JHtml::_("content.prepare", $product->description);
Её нужно добавить в код плагина так, как указано выше в примере кода. В таком случае разделяться на первое и второе описание будет уже обработанный плагинами контент.