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

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

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

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

<div align="center">
    <p>
        <b>Данный пример демонстрирует использование скрипта для сортировки результатов поиска по сайту по заглавию материала в алфовитном порядке</b>
    </p>
</div>
<hr>
<?$PHPCODE$("http://phpexample.ucoz.net/php/example005/sortsearchbyalph.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;
            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;
        ksort($myalph);
        $html="<table>";
        foreach ($myalph as $key => $value) foreach ($value as $idx) $html.="<tr><td>".$mydata[$idx][0].$mydata[$idx][1].$mydata[$idx][2]."</td></tr><tr><td>&nbsp;</td></tr>";
        $html.="</table><hr>";
        $html=str_replace("\n"," ",$html);
        $html=str_replace("'","&#39;",$html);
        echo "$('#sortsearch').html('$html')";
        return;
    }
?>

<div id='sortsearch'></div>
<form action="/php/example005/sortsearchbyalph.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
комментарии:
GtaDrom Спам [Материал] 10.03.2012 07:05
GtaDrom * по дате добавления!
GtaDrom Спам [Материал] 10.03.2012 07:05
GtaDrom А можно этот скрипт переделать чтобы он выводил материал по lgnt добавления, а то у стандартного поиска выводиться сначала самый старый материал?
XxMARSxX Спам [Материал] 15.05.2011 17:45
XxMARSxX
Quote
Данный пример демонстрирует использование скрипта для сортировки результатов поиска по сайту по заглавию материала в алфовитном порядке

ошибочка smile
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]