Концепция поиска по сайту Портатора:
Это важно понять.
Ввиду громадного количества страниц Портатора, размещения на страницах артиклей всевозможных комментариев, а также сочинений Гуглового Референта, контекстно варьирующихся во времени, организовать поиск информации силами РНР не представляется возможным в принципе. Даже если строить индекс артиклей и извращаться всяко-разно.
Помочь может Гугловый поиск, но в плане SEO он абсолютно бесполезен- всё, что выполнено на JavaScript, для поисковых машин фантомно и не осязаемо.
Нам же необходимо обеспечить статичную выдачу поиска по сайту, чтобы каждая страница результатов поиска имела собственный УРЛ, могла проиндексироваться в любой поисковой системе, а вся совокупность таких страниц с результатами поиска выполняла роль лабиринта для ботов. Это когда страницы артиклей по ключевым словам для этих артиклей ссылаются на результаты поиска с таким кейвордом по данному сайту, а ссылочки с выдачи ведут на релевантные кейвордам страницы. Тематическая перелинковка артиклей, так сказать.
Англоязычный Портатор:
Проще всего брать информацию с Yahoo! через специально для этого предназначенный сервис (построение серпа с помощью RSS ленты, есть у Яхи такая затейливость), и посредством этой крайне полезной затейливости организовать поиск по своему сайту.
Что для этого нужно знать:
В сеттингах ВебДваНольнутого портатора имеется такая секция:
### Поиск по сайту: # Минимальное число сниппетов в выдаче поисковика: $_s['search']['min']=10; # YahooAppId (http://developer.yahoo.net/): $_s['yahoo']['appid']="YahooDemo"; # Используемая поисковая система: $_s['search']['engine']="yahoo";
Естественно, Ваш сайт обязан быть в серпе Яхи.
Русскоязычный Портатор:
К сожалению, тулза от Яхи с русским языком не работает вообще, поэтому легко и просто организовать поиск по русскоязычному сайту не получится. Придётся заниматься парсингом серпа Гугла.
Чтобы не мудрить с синтаксисом запросов, организуйте себе личный Гугловый поисковик по своему сайту, и займитесь его парсингом (это проще). Сейчас я расскажу, как это делается:
- Посетите эту страницу и нажмите там ссылку создания своей поисковой системы.
Прямого линка дать не могу, так как сайт Гугла аяксовый, и паршиво приспособлен для давания линков. - Система захочет Вас авторизовать- ежели аккаунт в Гугле у Вас уже имеется, авторизуйтесь. В противном случае аккаунт надо будет создать.
- В аккаунте жмите ссылку создания поисковой системы, в настройках "своего" поисковика указывайте домен Портатора в качестве сайта, по которому и будет проистекать поиск. На завершающем этапе поставьте чекбокс в том месте, где спросят, уведомить ли Вас по емайлу о созданном личном поисковике.
- Сам поисковик Вам не интересен (можете его протестировать, естественно)- сразу идёте в мыл, и смотрите на адрес своего поисковика. Он будет, к примеру, такой:
http://www.google.com/coop/cse?cx=005829799557474787885:jpuqhtoxtxc
Вам от этого УРЛа нужно строго то, что стоит после cx=
Заносите этот идентификатор в сеттинги:
### Поиск по сайту: # Минимальное число сниппетов в выдаче поисковика: $_s['search']['min']=10; # GoogleAppId (http://lasto.com/portator/207.htm): $_s['google']['appid']="005829799557474787885:jpuqhtoxtxc"; # Используемая поисковая система: $_s['search']['engine']="google";
Всё, этого достаточно для сотворения полноценного статичного и индексируемого поиска по сайту Портатора, без всяких там переадресаций серфера к сторонним сервисам. Он никуда не уйдёт с Вашего сайта, и весь поиск будет оформлен в базовом дизайне Портатора, без единого лишнего элемента.
Понятия не имею, почему Гугл не может предоставить готовый сервис, не на Джава Скрипте, корректно устанавливающийся в дизайн любого произвольного сайта.
Гугл поменял дизайн?
Чуть ниже трёх переменных (из листинга выше) там есть ещё парочка:
$_s['google']['debager']=false; $_s['google']['pattern']= '<h2 class=\"?r\"?><a.+href=\"(.+)\".*>(.+)<\/a><\/h2>.*<div class=\"?std\"?>(.+)<br><span class=\"?a\"?>(.+) - <\/span>';
В чём их сила?
Переменная дебагера, штатна равная лжи, может быть обращена в истину true; - тогда при попытке поиска по сайту прямо на экран будет выдан HTML код, отдаваемый сайту Гуглом, выше кода указана текущая регулярка, а ниже кода - массив, в который распарсена выдача Гугла.
Но, если текущая регулярка более не подходит к HTML коду выдачи Гугла (например, дизайн серпа изменён, там теперь совсем другие теги), Вы всегда можете текущую регулярку поменять. Для чего и служит страшное заклинание (вторая переменная).
Откуда Вы эту переменную берёте, не суть важно. Либо тут (автор довольно быстро реагирует на редизайн Гугла, и вносит сюда изменения), либо сочиняете регулярку сами (если знаете синтаксис регулярных выражений и зачем они вообще нужны). В любом случае Вы способны подстроить свой ресурс под текущий дизайн с помощью переменной $_s['google']['pattern'] файла settings.php
Если вдруг не получается:
Памятуя, что в айпишнике Вашего сайта хостер легко может поселить ещё пару сотен других сайтов, которые тоже парсят Гугла (а тот обслуживает ограниченное число запросов в сутки с одного домена либо айпишника), или вообще предоставить всем этим сайтам скомпрометированный айпишник, при парсинге "собственного гуглового поисковика" Портатором Вы можете получить ошибку на экране про "failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden"
Смысл её простой: сервис Гугла не желает иметь с Вами дело.
Это не ошибки в настройках Портатора.
Это именно блокировка запроса (и любого трафика) с IP или домена сайта в сторону Гугла.
В этом случае на данном хостере у Вас не получится пойти методом парсинга.
Используйте тогда код на JavaScript.
Создайте в папке ./data/cms/ файл searcher.php c содержимым, как указано здесь, но вместо фразы "Ваш HTML код." напишите HTML код, выданный Гуглом, имеющий примерно такой вид (код может варьироваться):
<div id="cse" style="width:100%;">Loading</div> <script src="http://www.google.com/jsapi" type="text/javascript"></script> <script type="text/javascript"> google.load('search','1',{language:'ru'}); google.setOnLoadCallback(function() { var customSearchControl=new google.search.CustomSearchControl( '005829799557474787885:jpuqhtoxtxc' ); customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); customSearchControl.draw('cse'); }, true); </script> <link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" />
Не забудьте в ./data/settings.php переопределить кнопочку поиска. В настройках
# Это горизонтальное (верхнее) меню: $_s['serf_nav']= $_s['admin_nav']= array( array("","Мордочка сайта","Home"), array("search.html","Поиск по сайту","Поиск"), # <== array('cms_connect.html rel="nofollow" ','Связь','Connect'), array("cms_stat.html","Статистика сайта","Stat Log"), array("cms_rss.html","RSS потоки"," RSS"), array("cms_admin.html rel='nofollow' ","Admin","Admin"), );
надо сделать так:
# Это горизонтальное (верхнее) меню: $_s['serf_nav']= $_s['admin_nav']= array( array("","Мордочка сайта","Home"), array("cms_searcher.html","Поиск по сайту","Поиск"), # <== array('cms_connect.html rel="nofollow" ','Связь','Connect'), array("cms_stat.html","Статистика сайта","Stat Log"), array("cms_rss.html","RSS потоки"," RSS"), array("cms_admin.html rel='nofollow' ","Admin","Admin"), );