Форум русской поддержки Joomla!® CMS
07.12.2016, 12:46:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Подборка полезных доработок Ксенмарта

 (Прочитано 99 раз)
0 Пользователей и 1 Гость смотрят эту тему.
jumlancerCom
Осваиваюсь на форуме
***

Репутация: +2/-1
Offline Offline

Сообщений: 52


« : 04.11.2016, 19:27:32 »

Предлагаю публиковать здесь подборку полезных доработок стандартных функций Ксенмарта (4.1.1). Начну первым.

РАСШИРЕНИЕ ПОИСКА ПО КАТАЛОГУ И СОРТИРОВКИ ТОВАРОВ

Стандартный поиск по каталогу ищет лишь по названиям товаров и их описаниям. А среди ссылок для сортировки есть лишь price и popularity. Ниже публикую решение обоих проблем. Во-первых, появляется возможность искать по каталогу не только по названиям товаров и описаниям, а также по производителям, свойствам и мета-тегу keywords (помню что поисковики не учитывают, но можно использовать в качестве тегов, люди ведь могут искать по каталогу один и тот же товар по разным поисковым запросам). Во-вторых, появляется возможность вывести ссылки для сортировки не только по цене и популярности, но и по другим полям например по производителю и какому то одному свойству. Не утверждаю что предложенный мною "костыль" это самое простое и самое лучшее решение, поэтому другие варианты приветствуются!

Итак убиваем двух зайцев правкой одной функции getListQuery(). Открываем файл components/com_ksenmart/models/catalog.php, находим строку 460
Код:
$where   = $this->getFilterDefaultParams();
и заменяем на
Код:
$searchtext = $this->_title;
if(empty($searchtext)) {
$where = $this->getFilterDefaultParams();
} else {
$where = "(p.title LIKE '%$searchtext%' OR p.content LIKE '%$searchtext%' OR p.metakeywords LIKE '%$searchtext%' OR m.title LIKE '%$searchtext%' OR b.text LIKE '%$searchtext%')";
}
Теперь меняем запрос к базе, который начинался со строки 468
Код:
$query
->select('p.id')
...
на
Код:
$jinput = JFactory::getApplication()->input;
$letter = 'p.';
$order_type = $jinput->get('order_type'); // $order_type з "шапки" здесь не работает
$orderFieldSuffix = '';
$orderField = $this->getState('list.ordering');
if(!empty($order_type)) {
if($order_type != 'price' && $order_type != 'ordering' && $order_type != 'title') { // ordering нужен для работы фильтра
$letter = '';
$andForProperty = '';
if($order_type != 'manufacturer_title') { // если свойство
$andForProperty = ' AND property_id='.$order_type;
$orderField = 'text';
if($order_type != 1) { // здесь указываем ID свойства, по которому нужно сортировать как по числу
$orderFieldSuffix = '+0';
}
}
}
}
$query
->select('p.id, m.title as manufacturer_title')
->from('#__ksenmart_products AS p')
//->leftjoin("#__ksenmart_files AS f ON p.id=f.owner_id AND f.owner_type=".$this->_db->Quote('product'))
->leftjoin("#__ksenmart_manufacturers AS m ON m.id=p.manufacturer")
->leftjoin("#__ksenmart_product_properties_values AS b ON b.product_id=p.id".$andForProperty)
->where($where)
->order($letter.$orderField.$orderFieldSuffix.' '.$this->getState('list.direction'))
->group('p.id')
;

Тепер чтобы вывести на сайте ссылки для сортировки копируем файл components/com_ksenmart/views/catalog/tmpl/category.php и вставляем в папку templates/[ваш активный шаблон Joomla]/html/com_ksenmart/catalog/ (создаем данную папку если ее пока нету). Открываем копию т.е. templates/[ваш активный шаблон Joomla]/html/com_ksenmart/catalog/category.php и вместо строки 12
Код:
<?php echo $this->loadTemplate('sortlinks', 'default'); ?>
пишем
Код:
<?php
$curURL = JURI::current();
$lastChar = substr($curURL, -1);
if($lastChar == '/') {
$curURL = substr($curURL, 0, -1);
}
if(strpos($curURL,'order_type=')!== false) {
$urlParts = explode('order_type=', $curURL);
$curURL = $urlParts[0];
$curURL = substr($curURL, 0, -1);
}
?>
Сортировать по:
<div>
<span>названию товару</span>
<ul>
<li><a rel="nofollow" href="<?php echo $curURL; ?>/order_type=title/order_dir=asc">А->Я</a></li>
<li>/</li>
<li><a rel="nofollow" href="<?php echo $curURL; ?>/order_type=title/order_dir=desc">Я->А</a></li>
</ul>
</div>
<div>
<span>производителю</span>
<ul>
<li><a rel="nofollow" href="<?php echo $curURL; ?>/order_type=manufacturer_title/order_dir=asc">А->Я</a></li>
<li>/</li>
<li><a rel="nofollow" href="<?php echo $curURL; ?>/order_type=manufacturer_title/order_dir=desc">Я->А</a></li>
</ul>
</div>
<div>
<span>цене</span>
<ul>
<li><a rel="nofollow" href="<?php echo $curURL; ?>/order_type=price/order_dir=asc">А->Я</a></li>
<li>/</li>
<li><a rel="nofollow" href="<?php echo $curURL; ?>/order_type=price/order_dir=desc">Я->А</a></li>
</ul>
</div>
<div>
<span>[свойству с ID 1]</span>
<ul>
<li><a rel="nofollow" href="<?php echo $curURL; ?>/order_type=1/order_dir=asc">от меньших</a></li>
<li>/</li>
<li><a rel="nofollow" href="<?php echo $curURL; ?>/order_type=1/order_dir=desc">от больших</a></li>
</ul>
</div>
Дивам присваиваем float:left чтобы они стояли в одну строку и делаем другие настройки стилей по своему вкусу

Имейте в виду что мы поправили модель Ксенмарта, поэтому в случае обновления компонента все правки будут утрачены и придётся делать все заново

КОМУ НУЖНЫ ДОРАБОТКИ ПО КСЕНМАРТУ ПРОСЬБА ПИСАТЬ В ЛИЧКУ!
Записан
jumlancerCom
Осваиваюсь на форуме
***

Репутация: +2/-1
Offline Offline

Сообщений: 52


« Ответ #1 : 04.11.2016, 19:29:59 »

ТРАНСЛИТЕРАЦИЯ АЛИАСОВ

Поменять правила транслитерации алиасов категорий, товаров, производителей и свойств можно в файле plugins/system/ksencore/core/helpers/common/functions.php
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet