Концепция поиска по сайту Портатора:

Это важно понять.

Ввиду громадного количества страниц Портатора, размещения на страницах артиклей всевозможных комментариев, а также сочинений Гуглового Референта, контекстно варьирующихся во времени, организовать поиск информации силами РНР не представляется возможным в принципе. Даже если строить индекс артиклей и извращаться всяко-разно.

Помочь может Гугловый поиск, но в плане SEO он абсолютно бесполезен- всё, что выполнено на JavaScript, для поисковых машин фантомно и не осязаемо.

Нам же необходимо обеспечить статичную выдачу поиска по сайту, чтобы каждая страница результатов поиска имела собственный УРЛ, могла проиндексироваться в любой поисковой системе, а вся совокупность таких страниц с результатами поиска выполняла роль лабиринта для ботов. Это когда страницы артиклей по ключевым словам для этих артиклей ссылаются на результаты поиска с таким кейвордом по данному сайту, а ссылочки с выдачи ведут на релевантные кейвордам страницы. Тематическая перелинковка артиклей, так сказать.

Англоязычный Портатор:

Проще всего брать информацию с Yahoo! через специально для этого предназначенный сервис (построение серпа с помощью RSS ленты, есть у Яхи такая затейливость), и посредством этой крайне полезной затейливости организовать поиск по своему сайту.

Что для этого нужно знать:

В сеттингах ВебДваНольнутого портатора имеется такая секция:

### Поиск по сайту:

# Минимальное число сниппетов в выдаче поисковика:
   $_s['search']['min']=10;
 
# YahooAppId (http://developer.yahoo.net/):
   $_s['yahoo']['appid']="YahooDemo";
 
# Используемая поисковая система:
   $_s['search']['engine']="yahoo";

Естественно, Ваш сайт обязан быть в серпе Яхи.

Русскоязычный Портатор:

К сожалению, тулза от Яхи с русским языком не работает вообще, поэтому легко и просто организовать поиск по русскоязычному сайту не получится. Придётся заниматься парсингом серпа Гугла.

Чтобы не мудрить с синтаксисом запросов, организуйте себе личный Гугловый поисковик по своему сайту, и займитесь его парсингом (это проще). Сейчас я расскажу, как это делается:

  1. Посетите эту страницу и нажмите там ссылку создания своей поисковой системы.
    Прямого линка дать не могу, так как сайт Гугла аяксовый, и паршиво приспособлен для давания линков.

  2. Система захочет Вас авторизовать- ежели аккаунт в Гугле у Вас уже имеется, авторизуйтесь. В противном случае аккаунт надо будет создать.

  3. В аккаунте жмите ссылку создания поисковой системы, в настройках "своего" поисковика указывайте домен Портатора в качестве сайта, по которому и будет проистекать поиск. На завершающем этапе поставьте чекбокс в том месте, где спросят, уведомить ли Вас по емайлу о созданном личном поисковике.

  4. Сам поисковик Вам не интересен (можете его протестировать, естественно)- сразу идёте в мыл, и смотрите на адрес своего поисковика. Он будет, к примеру, такой:

    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 потоки","&nbsp; 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 потоки","&nbsp; RSS"),
      array("cms_admin.html rel='nofollow' ","Admin","Admin"),
   );