Итак, я реализовал нормальный поиск для adsmanager!
Реализацию данного кода можете посмотреть на сайте: bnkportal.ru
А теперь ребятки и вам помогу![/b]
Начнём:
Разберемся на примере "расширенного поиска".
ВНИМАНИЕ! ЭТО ВСЁ РАБОТАЕТ, В ТОМ СЛУЧАЕ ЕСЛИ ЦЕНА У ВАС ОБОЗНАЧЕНА, КАК ad_price
если по-другому просто найдите в моём коде и переименнуйте.
Цель: добавить дополнительные поля "от" и "до" для цены, и затем их обработать.
Все файлы находяться в components/com_adsmanager/
ШАГ №1. Добавим поля ввода "от" и "до" в расширенный поиск.
Файл adsmanager.html.php
Находим код:
case 'textarea':
case 'number':
case 'price':
case 'emailaddress':
case 'url':
case 'text':
echo "<input name='".$fsearch->name."' id='".$fsearch->name."' maxlength='20' class='inputbox' type='text' size='20' />";
break;
Меняем его на:
case 'price': //ЦЕНА ОТ И ДО
?>
от <input class="inputbox" type="text" size="10" maxlength="20" class="inputbox" name="pr_ot" /> до <input class="inputbox" type="text" size="10" maxlength="20" name="pr_do" />
<?php
break;
break;
case 'textarea':
case 'number':
case 'emailaddress':
case 'url':
case 'text':
ПЕРВЫЙ ШАГ ЗАВЕРШЕН. Теперь в расширенном поиске выводятся поля цены от и до.
Едем дальше...
ШАГ №2. Корректируем запрос к базе данных.
Файл adsmanager.php
Находим код
case 'text':
$value = mosGetParam( $_GET, $fsearch->name, "" );
if ($value != "")
{
$search .= " AND a.$fsearch->name LIKE '%$value%'";
$url_param .= "&".$fsearch->name."=".$value;
}
break;
}
}
}
if ($text_search <> "") {
$search .= " AND (a.ad_headline LIKE '%$text_search%' OR a.ad_text LIKE '%$text_search%') AND a.published = 1";
}
else
$search .= " AND a.published = 1";
$url .= $url_param;
Меняем на:
case 'text':
$value = mosGetParam( $_GET, $fsearch->name, "" );
if ($value != "")
{
$search .= " AND a.$fsearch->name LIKE '%$value%'";
$url_param .= "&".$fsearch->name."=".$value;
}
break;
}
}
}
if ($text_search <> "") {
$search .= " AND (a.ad_headline LIKE '%$text_search%' OR a.ad_text LIKE '%$text_search%') AND a.published = 1";
}
else
//ПОИСК ПО ЦЕНЕ
{
$cenaot = intval( mosGetParam( $_GET, 'pr_ot', 0 ) );
$cenado = intval( mosGetParam( $_GET, 'pr_do', 0 ) );
if (($cenaot != "")&&($cenado != "")) {
$search .= " AND a.published = 1 and a.ad_price >= ".$cenaot." and a.ad_price <= ".$cenado;
} else {$search .= " AND a.published = 1";}
if (($cenaot != "")&&($cenado == "")) {
$search .= " AND a.published = 1 and a.ad_price >= ".$cenaot;
} else {$search .= " AND a.published = 1";}
if (($cenaot == "")&&($cenado != "")) {
$search .= " AND a.published = 1 and a.ad_price >= ".$cenado;
} else {$search .= " AND a.published = 1";}
}
$url .= $url_param;
Едем дальше...
ШАГ №3. ДЕЛАЕМ АДЕКВАТНУЮ ПАГИНАЦИЮ РЕЗУЛЬТАТОВ ПОИСКА
Файл adsmanager.php
Находим код:
function show_all($option,$expand,$text_search,$order,$limitstart)
{
global $mainframe,$database,$mosConfig_absolute_path,$mosConfig_live_site;
$itemid = intval( mosGetParam( $_GET, 'Itemid', 0 ));
Меняем на:
function show_all($option,$expand,$text_search,$order,$limitstart)
{
global $mainframe,$database,$mosConfig_absolute_path,$mosConfig_live_site;
$itemid = intval( mosGetParam( $_GET, 'Itemid', 0 ));
$cenot = intval( mosGetParam( $_GET, 'pr_ot', 0 )); // ДОПОЛНЕНИЕ СТРОКИ ПАРАМЕТРОВ ПОИСКА (ДЛЯ ЦЕНЫ)
$cendo = intval( mosGetParam( $_GET, 'pr_do', 0 ));
И последнее:
Находим код:
//List
if ($text_search != "")
$url_text_search = "&text_search=".$text_search;
$url ="index.php?option=$option&page=show_all".$url_text_search."&order=".$order;
adsList(ADSMANAGER_LIST_TEXT,"",$url,"show_all","1",$text_search,$expand,$order,0,$option,$limitstart);
Меняем на:
//List
if ($text_search != "")
$url_text_search = "&text_search=".$text_search;
$url ="index.php?option=$option&page=show_all".$url_text_search."&order=".$order."&pr_ot=".$cenot."&pr_do=".$cendo; //ПАГИНАЦИЯ ПОИСКА
adsList(ADSMANAGER_LIST_TEXT,"",$url,"show_all","1",$text_search,$expand,$order,0,$option,$limitstart);
Это изменения в самом компоненте. Если ходите сделать поиск от и до в стандартном модуле поиска, то поступайте так:
В файл mod_adsmanager_search.php (папка modules) добавте код:
<input class="inputbox" type="text" size="10" maxlength="20" name="pr_ot" /> до <input class="inputbox" type="text" size="10" maxlength="20" name="pr_do" />
ВОТ И ВСЁ! РАДУЕМСЯ НОВОМУ ПОИСКУ!
Если есть желание выразить благодарность:
WMZ - Z662473774580
WMR - R216086541664
Yandex.деньги - 41001185908573
bnkportal.ru - как сделать такую же таблицу всех объявлений, что бы не на заголовок нажимать для открытия всего объявления а просто на любое место в строчке как на сайте, и в столбике дата убрать от кого написано сообщение и кол-во просмотров? так же как столбик объявления убрать (левый, в нем прописан заголовок по стандарту и категория типо: (Подробнее... ( / Квартиры)