Если не жалко, поделитесь с людьми))))
Да не дождемся уже.
Я сделал так:
в файле ваш_домен\components\com_jshopping\controllers\search.php
после этих строк
$dispatcher->trigger('onBeforeFixLimitstartDisplayProductList', array(&$limitstart, &$total, 'search'));
if ($limitstart>=$total) $limitstart = 0;
$query = "SELECT $adv_result FROM `#__jshopping_products` AS prod
LEFT JOIN `#__jshopping_products_to_categories` AS pr_cat ON pr_cat.product_id = prod.product_id
LEFT JOIN `#__jshopping_categories` AS cat ON pr_cat.category_id = cat.category_id
$adv_from
WHERE prod.product_publish = '1' AND cat.category_publish='1'
$adv_query
GROUP BY prod.product_id ".$order_query;
$db->setQuery($query, $limitstart, $limit);
$rows = $db->loadObjectList();
$rows = listProductUpdateData($rows);
addLinkToProducts($rows, 0, 1);
вставляем
$category_search_fields = array('cat.ml:name', 'cat.ml:short_description', 'cat.ml:description');
$where_search = "";
$adv_query = "";
if ($search_type=="exact"){
$word = addcslashes($db->escape($search), "_%");
$tmp = array();
foreach($category_search_fields as $field){
$tmp[] = "LOWER(".getDBFieldNameFromConfig($field).") LIKE '%".$word."%'";
}
$where_search = implode(' OR ', $tmp);
}else{
$words = explode(" ", $search);
$search_word = array();
foreach($words as $word){
$word = addcslashes($db->escape($word), "_%");
$tmp = array();
foreach($category_search_fields as $field){
$tmp[] = "LOWER(".getDBFieldNameFromConfig($field).") LIKE '%".$word."%'";
}
$where_search_block = implode(' OR ', $tmp);
$search_word[] = "(".$where_search_block.")";
}
if ($search_type=="any"){
$where_search = implode(" OR ", $search_word);
}else{
$where_search = implode(" AND ", $search_word);
}
}
if ($where_search) $adv_query .= " AND ($where_search)";
$query = "
SELECT pr_cat.category_id, prod.`name_en-GB` AS name, prod.`short_description_en-GB` AS short_description, prod.`alias_en-GB` AS alias, prod.category_image
FROM `nzaxo_jshopping_categories` AS prod
LEFT JOIN `nzaxo_jshopping_products_to_categories` AS pr_cat ON pr_cat.category_id = prod.category_id
LEFT JOIN `nzaxo_jshopping_categories` AS cat ON pr_cat.category_id = cat.category_id
WHERE cat.category_publish = '1'
AND prod.access
IN ( 1, 1 )
AND cat.access
IN ( 1, 1 )
$adv_query
GROUP BY prod.category_id
";
$db->setQuery($query, $limitstart, $limit);
$total2 = $db->loadResult();
$catrows = $db->loadObjectList();
$catrows = listProductUpdateData($catrows);
в этом же файле находим строки
if (!$total) {
$view_name = "search";
$view_config = array("template_path"=>JPATH_COMPONENT."/templates/".$jshopConfig->template."/".$view_name);
$view = $this->getView($view_name, getDocumentType(), '', $view_config);
$view->setLayout("noresult");
$view->assign('search', $search);
$view->display();
return 0;
}
заменяем условие на
if ((!$total)and(!$total2)) {
$view_name = "search";
$view_config = array("template_path"=>JPATH_COMPONENT."/templates/".$jshopConfig->template."/".$view_name);
$view = $this->getView($view_name, getDocumentType(), '', $view_config);
$view->setLayout("noresult");
$view->assign('search', $search);
$view->display();
return 0;
}
и вставляем после предыдущего блока.
Так же нужно вставить сточку
$view->assign('catrows', $catrows);
после строки
$view->assign('rows', $rows);
В этом файле все.
Теперь идем в файл шаблона вывода com_jshopping\search\products.php
Если у вас переопределение, то ищите его в папке шаблона.
В этом файле после строки
<h1><?php print _JSHOP_SEARCH_RESULT?> <?php if ($this->search) print '"'.$this->search.'"';?></h1>
вставляем
<?php
if (count($this->catrows)){
?>
<div class="jshop_list_category">
<table class = "jshop list_category">
<?php foreach($this->catrows as $k=>$category){?>
<?php if ($k%4==0) print "<tr>"; ?>
<td class="jshop_categ" width="<?php print (100/4)?>%">
<table class = "category">
<tr>
<td class="image">
<a href = "http://<?php print $_SERVER['SERVER_NAME'];?>/shop/<?php print $category->alias;?>.html"><img class="jshop_img" src="http://<?php print $_SERVER['SERVER_NAME'];?>/components/com_jshopping/files/img_categories/<?php if ($category->category_image) print $category->category_image; else print $this->noimage;?>" alt="<?php print htmlspecialchars($category->name)?>" title="<?php print htmlspecialchars($category->name)?>" /></a>
</td>
<td>
<a class = "product_link" href = "http://<?php print $_SERVER['SERVER_NAME'];?>/shop/<?php print $category->alias;?>.html" title="<?php print $category->name?>"><?php print($category->name)?></a>
<p class = "category_short_description"><?php// print $category->short_description?></p>
</td>
</tr>
</table>
</td>
<?php if ($k%4==3) print '</tr>'; ?>
<?php } ?>
<?php if ($k%4!=3) print '</tr>'; ?>
</table>
</div>
<?php
}
//вывод категорий
?>
Если не работает, вставьте вместо $_SERVER['SERVER_NAME'], ваш домен.
Цифры в условиях отвечают за количество категорий в ряду.
Поиск идет по названию, короткому описанию категории и по полному описанию категорию.
Делалось на Joomla 3.
Это всё костыли и хаки. По хорошему нужно это сделать плагин, так как есть много триггеров на события поиска, но я не умею.
