Перекрываем стандартные настройки JoomShopping правильно

Файл default_config.php со стандартными настройками JoomShopping

Далеко не все настройки JoomShopping можно изменить в административной части сайта. Часть из них просто записана в файл по пути:

[домен]/components/com_jshopping/lib/default_config.php

Например, это список полей для сортировки товаров в категориях или имя файла изображения, которое используется по умолчанию, если основное изображение у категории, товара и т.д. не выбрано.

Конечно, можно просто изменить значение нужной переменной прямо в файле default_config.php и эти изменения сразу будут применены на сайте, но это явно не лучшее решение. Изменять системные файлы расширений или ядра CMS не лучшая практика. К тому же файл с настройками меняется и дополняется разработчиками JoomShopping довольно часто. В результате в одном из ближайших обновлений default_config.php будет перезаписан, а внесенные изменения будут утеряны. Как же изменить значения каких-либо стандартных настроек JoomShoppind без риска их потери?

Для начала обратимся к коду самого компонента JoomShopping и попробуем найти подключение конфигурационного файла default_config.php. Поиски приводят в файл:

[домен]/components/com_jshopping/lib/factory.php

у которого есть статический метод getConfig(), часть которого приведена ниже:

include(dirname(__FILE__)."/default_config.php");
if (file_exists(dirname(__FILE__)."/user_config.php")){
    include(dirname(__FILE__)."/user_config.php");
}

Как видно, после подключения default_config.php, функция getConfig() проверяет наличие файла user_config.php в той же директории, что и default_config.php. Если такой файл найден, то осуществляется его подключение. Файл user_config.php не входит в состав компонента JoomShopping именно для того, чтобы можно было создать его самостоятельно и не беспокоиться о том, что в каком-то обновлении этот файл будет перезаписан разработчиками JoomShopping.

В результате нужно создать файл:

[домен]/components/com_jshopping/lib/user_config.php

в котором можно смело изменить любые стандартные настройки JoomShopping.

Приведем несколько примеров перекрытия настроек JoomShopping, о которых упоминали выше. Часто возникает необходимость изменить настройку с именем noimage, поскольку это имя файла изображения, которое используется, если в административной части сайта для категории, товара и т.д. изображения не выбраны. Особенно если учесть, что эта настройка по умолчанию имеет значение noimage.gif, а этот формат не самый распространенный формат изображений для сайтов, поскольку уступает по качеству png и jpg.

Чтобы изменить значение этой настройки нужно добавить в файл user_config.php строку:

$config->noimage = 'noimage.png';

При этом нужно разместить файл изображения noimage.png в следующих папках:

[домен]/components/com_jshopping/files/img_categories

[домен]/components/com_jshopping/files/img_manufs

[домен]/components/com_jshopping/files/img_products

[домен]/components/com_jshopping/files/img_vendors

Это изображение будет показано при отсутствии основного для категорий, производителей, товаров и поставщиков соответственно. В результате можно даже сделать разные изображения noimage.png для категорий товаров и т.д. Например, с разными размерами, поскольку размеры изображений для категорий и списка товаров могут отличаться.

Еще один пример с изменение полей для сортировки товаров. Для отображения поля сортировки товаров на странице со списком товаров (например, страница категории, производителя, списка всех товаров JoomShopping и т.д.) нужно в настройках административной части JoomShopping установить флажок в разделе Товар напротив пункта Возможность сортировки товаров. При этом в верхней части шаблона появляется элемент управления полем и направлением сортировки. Набор этих полей определен именно в файле default_config.php.

Если точнее, то есть два списка полей сортировки и два списка значений этих полей. На странице какой-любо категории товаров используется массив названий полей sorting_products_name_select и массив их значений из sorting_products_field_select. Для всех остальных страниц со списками товаров используются названия из sorting_products_name_s_select и значения для сортировки из sorting_products_field_s_select.

Это значит, что при выводе в шаблоне элемента select для выбора пользователем сортировки товаров, его значения в конечном счете берутся из конфига default_config.php. В конфиге эта переменная имеет имя sorting_products_name_select для страницы категории и sorting_products_name_s_select для других страниц сайта со списком товаров и их сортировкой (например, для списка всех товаров или списка товаров конкретного производителя). Как видим в конфиге, значением этих переменных является массив. Например:

$config->sorting_products_name_select = array(
    1=>_JSHOP_SORT_ALPH,
    2=>_JSHOP_SORT_PRICE,
    3=>_JSHOP_SORT_DATE,
    5=>_JSHOP_SORT_RATING,
    6=>_JSHOP_SORT_POPULAR,
    4=>_JSHOP_SORT_MANUAL
);

Массив состоит из индексов и языковых констант, которые в шаблоне будут выведены в соответствии с текущим языком сайта.

В результате пользователь выбирает один из вариантов сортировки. В сессии запоминается специальная переменная order, в которой хранится индекс выбранного значения из массива. Например, если выбрать _JSHOP_SORT_DATE, то в order запишется число 3.

А в процессе выборки списка товаров для отображения в шаблоне JoomShopping использует значение переменной order для получения названия поля таблицы #__jshopping_products. Для примера со страницей категории:

$config->sorting_products_field_select = array(
    1=>'name',
    2=>'prod.product_price',
    3=>'prod.product_date_added',
    5=>'prod.average_rating',
    6=>'prod.hits',
    4=>'pr_cat.product_ordering'
);

А значит для значения 3 поле будет 'prod.product_date_added'. Именно это поле подставляется в запрос в качестве значения для сортировки товаров.

Это дает нам возможность изменить эти списки в файле user_config.php любым удобным образом. Можно убрать лишние поля, добавить новые или изменить их значения. При этом мы может без труда сортировать товары по любому из полей таблицы #__jshopping_products. Например, по количеству товара на складе (prod.product_quantity) или по количеству отзывов о товаре (prod.reviews_count).

Конечно же, можно использовать в качестве полей для сортировки и такие, которые не находятся в таблице #__jshopping_products. Однако для правильного решения такой задачи потребуется сделать отдельный плагин, что выходит за рамки темы данной статьи. Но для тех, кому очень захочется разобраться с этим вопросом, отметим с чего начать. Плагин желательно разместить в группе jshopping (папка plugins/jshopping) и добавить в него метод:

public function onBuildQueryOrderListProduct($order, $orderby, &$adv_from, &$order_query, $order_original)
{
	...
}

в котором можно изменить запрос $order_query и таблицы, из которых берутся поля $adv_from.

Метки: Joomla!, JoomShopping