Теперь все скрипты доступны в обновленном формате в нашем магазине USCRIPT.PRO

Перейти в магазин

Добавил: jon
Фильтрация результатов поиска
     В этом примере демонстрируется как с помощью php-скрипта отфильтровать результаты поиска по сайту по букве алфавита. Скрипт ожидает ввода поисковой фразы, после нажатия кнопки "Поиск" выполняет POST запрос на скрипт поиска по сайту (в данном примере поиск проходит по сайту forum.ucoz.ru), затем структурирует полученный результат (ответ), фильтрует его и выводит на страницу. Исходный код данного примера приведен ниже.

В шаблоне страницы:

<div align="center">
    <p>
        <b>Данный пример демонстрирует использование скрипта для фильтрации результатов поиска по сайту по букве алфавита</b>
    </p>
</div>
<hr>
<?$PHPCODE$("http://phpexample.ucoz.net/php/example005/filtersearchbyalph.php")?>


PHP скрипт примера:
<?
if ((count($_POST)>0) && $_POST['q'])
{
    $___notjson=1;
    $ch = curl_init();
    curl_setopt_array($ch, array(CURLOPT_URL => "http://forum.ucoz.ru/search/?q=".$_POST['q'],
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_CONNECTTIMEOUT => 5,
        CURLOPT_TIMEOUT => 5,
        CURLOPT_USERAGENT => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)")
    );
    $data = curl_exec($ch);
    curl_close($ch);
    preg_match("/<table\s+[^>]*?\s*class=[\'\"]?\s*eBlock\s*[\'\"]?/si",$data,$matches,PREG_OFFSET_CAPTURE);
    $data=substr($data,$matches[0][1]);
    $matches="none";
    preg_match_all("/<div\s+[^>]*?\s*class=[\'\"]?\s*eTitle\s*[\'\"]?.*?\s*<\/div>/i",$data,$matches);
    $mydata=array();
    $myalph=array();
    foreach ($matches[0] as $key => $value)
    {
        $mydata[$key]=array();
        $mydata[$key][0]=$value;
        preg_match("/>\s*(\p{L})[^<]+</iu",$value,$matches0);
        if (!isset($matches0[1])) next;
        $matches0[1]=mb_strtoupper($matches0[1],'UTF-8');
        if (!isset($myalph[$matches0[1]])) $myalph[$matches0[1]]=array();
        array_push($myalph[$matches0[1]],$key);
    }
    preg_match_all("/<div\s+[^>]*?\s*class=[\'\"]?\s*eMessage\s*[\'\"]?.*?\s*<\/div>/i",$data,$matches);
    foreach ($matches[0] as $key => $value) $mydata[$key][1]=$value;
    preg_match_all("/<div\s+[^>]*?\s*class=[\'\"]?\s*eDetails\s*[\'\"]?.*?\s*<\/div>/si",$data,$matches);
    foreach ($matches[0] as $key => $value) $mydata[$key][2]=$value;
    $html="<div>
<form name=\"sortform\" action=\"/php/example005/filtersearchbyalph.php\" method=\"post\" onsubmit=\"_uPostForm(this,{dataType:'script'});return false;\" onerror=\"alert('Error');\">
<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">
<tr><td>";
    foreach ($myalph as $key => $value) $html.="&nbsp;<input type=\"submit\" value=\"".$key."\" onclick=\"document.sortform.letter.value='".$key."'\">";
    $html.="</td></tr></table>
<input type=\"hidden\" name=\"q\" value=\"".$_POST['q']."\">
<input type=\"hidden\" name=\"letter\" value=\"\">
</form></div><table>";
    if (!$_POST['letter']) foreach ($mydata as $value) $html.="<tr><td>".$value[0].$value[1].$value[2]."</td></tr><tr><td>&nbsp;</td></tr>";
    else foreach ($myalph[$_POST['letter']] as $value) $html.="<tr><td>".$mydata[$value][0].$mydata[$value][1].$mydata[$value][2]."</td></tr><tr><td>&nbsp;</td></tr>";
    $html.="</table><br><hr><br>";
    $html=str_replace("\n"," ",$html);
    $html=str_replace("'","&#39;",$html);
    echo "$('#sortsearch').html('$html')";
    return;
}
?>

<div id='sortsearch'></div>
<form action="/php/example005/filtersearchbyalph.php" method="post" onsubmit="_uPostForm(this,{dataType:'script'});return false;" onerror="alert('Error');">
<p>Поисковый запрос: </p><input type="text" name="q" />
<p><input type="submit" value="Поиск"></p>
</form>

Примечание
php-скрипт обрабатывает столько материалов, сколько возвращает поисковый скрипт сайта. Если вы хотите, чтобы скрипт работал с большим количеством результатов, чем те, которые возвращаются по умолчанию, измените соответствующую настройку в панеле управления сайтом.

Добавлен 07.03.2011
комментарии:
RaiDer7066 Спам [Материал] 07.10.2012 12:20
RaiDer7066 у меня вопрос, чем различается фильтрация и сортировка в данном случае?
lutsklife Спам [Материал] 21.09.2011 12:47
lutsklife jon, Скажите пожалуйста каким образом можно сгруппировать по категориям или отфильтровать материалы которые добавили пользователи сайта, поскольку они жалуютса что очень неудобно их находить через поиск, чтобы редактировать. Материалов у некоторых пользователей более 1000. Благодарю за ответ
Алексей Спам [Материал] 20.04.2011 15:45
jon Подскажите пожалуйста, как мне сделать на сайте www.all-hit.ru навигацию по алфавиту и году. Не могу никак вникнуть куда ставить скрипт? И ещё один не маловажный момен, это то, что поиск по сайту у меня не ucoz, а свой. Помогите пожалуйста.
Михаил Спам [Материал] 03.04.2011 23:17
Как я понял пример PHP скрипт подходит к стандартным шаблонам юкозовских сайтов. У кого нестандартный шаблон скрипт надо менять. В пхп я не силен, jon не подскажите ли что мене надо поменять чтобы скрипт заработал. Буду очень благодарен.
jon   [Разработчик] Спам [Материал] 04.04.2011 02:01
jon ну я же не ясновидящий smile Вы даже не дали ссылку на шаблон, чтобы я мог хоть что-то посмотреть
barsikmb Спам [Материал] 03.04.2011 20:55
barsikmb Доброгшо времени суток.
Сделал все как насписано. Но при выполнении скрипта выводится однаи та же информации. сайт http://unasvse.com/
jon   [Разработчик] Спам [Материал] 03.04.2011 22:09
jon Если вы внимательно посмотрите, то увидите, что скрипт ищет вначале таблицу с классом eBlock, а в ней уже поля eTitle, eMessage и eDetails, парсит эти данные а потом строит фильтры.
У вас свои имена классов и скрипт банально ничего не находит, поэтому и не работает так, как вы ожидаете.
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]