Время:
Новых сообщений: Нет
Вы на форуме дней
Ваша группа: Гость
Ваш IP: 3.15.148.203
Logical-Portal — молодежный портал со своей изюминкой, каждый сможет найти что-то интересное и полезное для себя, например наш форум общения с которым вам обязательно нужно ознакомиться.
  • Страница 1 из 1
  • 1
Фильтрация результатов поиска
Сообщение оставлено 24.06.2012 в 09:57:37 | Сообщение #1
В этом примере демонстрируется как с помощью php-скрипта отфильтровать результаты поиска по сайту по букве алфавита. Скрипт ожидает ввода поисковой фразы, после нажатия кнопки "Поиск" выполняет POST запрос на скрипт поиска по сайту (в данном примере поиск проходит по сайту forum.ucoz.ru), затем структурирует полученный результат (ответ), фильтрует его и выводит на страницу. Исходный код данного примера приведен ниже.

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


PHP скрипт примера:
Code
<?
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.=" <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> </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> </td></tr>";
     $html.="</table><br><hr><br>";
     $html=str_replace("\n"," ",$html);
     $html=str_replace("'","'",$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-скрипт обрабатывает столько материалов, сколько возвращает поисковый скрипт сайта. Если вы хотите, чтобы скрипт работал с большим количеством результатов, чем те, которые возвращаются по умолчанию, измените соответствующую настройку в панеле управления сайтом.

Скачать!
 
 
   
Сообщение оставлено 28.10.2012 в 08:09:52 | Сообщение #2
По идеи, это уже юкозом предусмотренно.
 
По всем вопросам писать в скайп «указан в профиле»
Я не даю унбан по просьбе личку или скайп, для этого есть ‘спец.тема’
Для того чтобы сделать предложение по форуму, можно обратиться ко мне (я передам выше) или в ‘спец.тему’
 
   
Сообщение оставлено 28.10.2012 в 20:41:29 | Сообщение #3
2pucman, больше заморочек
 
 
   
  • Страница 1 из 1
  • 1
Поиск:
 
Графика от: Megas, GraFOS | Дизайн сверстал E.A.
Хостинг от uCoz
Яндекс.Метрика