Пошук для Drupal

Зображення користувача romand.

Модуль пошуку, що включено до модулів ядра CMF Drupal має два неприємних недоліки:

  1. відрутність морфології для української та російської мов;
  2. ресурсомісткість (тормознутість;)

Існує ряд інших відкритих проектів по реалізації full-text пошуку для веб-сайтів, які можуть бути інтегровані у фреймворк Друпал:

але системи такого рівня недоцільно використовувати для малих та середніх сайтів — достатньо Google Custom Search Engine. Як плату за такий сервіс Google буде розміщувати рекламні оголошення у результатах пошуку по вашому сайту. Але таку "несправедливість" можна подолати — достатньо замість CSE використати

Google AdSense для пошуку

і ви також будете отримувати прибуток від переходів по цим оголошенням. Для цього потрібно:

1. створити акаунт на Google AdSense;

2. в адмінці Drupal створити блок, де буде розміщуватися форма пошуку (формат вводу встановити PHP code);

3. створити сторінку для виводу результатів пошуку (формат вводу встановити PHP code та відключити коментарі), URL цієї сторінки необхідно буде вказати під час створення AdSense для пошуку. Для прикладу нехай це буде
http://example.com/?q=node/27

4. отримати код для форми пошуку та вставити у створений блок

<form action="http://example.com/?q=node/27" id="cse-search-box">
  <div>
    <input type="hidden" name="cx" value="partner-pub-xxxxxxxxxxxxxxxx:8dgt829ml2h" />
    <input type="hidden" name="cof" value="FORID:11" />
    <input type="hidden" name="ie" value="UTF-8" />
    <input type="text" name="q" size="27" />
    <input type="submit" name="sa" value="Search" />
  </div>
</form>
<script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=cse-search-box&amp;lang=en"></script>

5. отримати код для сторінки, на яку будуть виводитися результати пошуку та вставити у створену сторінку http://example.com/?q=node/27

<div id="cse-search-results"></div>
<script type="text/javascript">
  var googleSearchIframeName = "cse-search-results";
  var googleSearchFormName = "cse-search-box";
  var googleSearchFrameWidth = 530;
  var googleSearchDomain = "www.google.com.ua";
  var googleSearchPath = "/cse";
</script>
<script type="text/javascript" src="http://www.google.com/afsonline/show_afs_search.js"></script>

В результаті у нас нічого не працює оскільки Google та Drupal використовують в url однакове "q".

6. Виправляємо ситуацію так:

Щоб позбутися "q" в адресах сайту активуємо чисті лінки (Clean URLs) в адмінці Друпал:
замість http://example.com/?q=node/27
отримуємо http://example.com/node/27
а за допомогою модуля ядра path, можна створити аліас http://example.com/cse

Правим код для форми пошуку — замінюємо name="q" на name="as_q". В кінцевому результаті маємо

<form action="http://example.com/cse" id="cse-search-box">
  <div>
    <input type="hidden" name="cx" value="partner-pub-xxxxxxxxxxxxxxxx:8dgt829ml2h" />
    <input type="hidden" name="cof" value="FORID:11" />
    <input type="hidden" name="ie" value="UTF-8" />
    <input type="text" name="as_q" size="27" />
    <input type="submit" name="sa" value="Search" />
  </div>
</form>
<script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=cse-search-box&amp;lang=en"></script>

Готово.

Єдиний побічний ефект, викликаний модифікацією коду форми — відсутність

але і це також можна подолати.

Відгуки

Зображення користувача podarok.

я пропатчив rustemmer і його використовую без проблем
шукає нормально!

Зображення користувача romand.

Привіт!
І українська морфологія також працює?

А на рахунок gravatar — не бачу перспектив у цього сервісу, такій функціональності місце у OpenID.

Зображення користувача podarok.

вбільшості випадків так: працює

Зображення користувача podarok.

і постав gravatar!!!

Зображення користувача dl.

Дякую, згодилося. Тільки нещодавно міркував як би це все зробити :) Єдине чого хотілося б - повернути на місце картинку з написом у формі...

Зображення користувача romand.

Треба замінити це:

<input type="text" name="as_q" size="27" />

на це:

<input type="text" name="as_q" size="27" style="background-image:url(google.gif); background-repeat: no-repeat; border: solid 1px #7E9DB9;" onclick="this.style.backgroundImage='url()';this.onclick=null;" />

і поправити шлях до зображення

повинно працювати :)

Зображення користувача dl.

Працює, дякую дуже

Додати відгук

Опубліковано не буде.
  • Адреси web-сторінок та e-mail адреси перетворюються на лінки автоматично.
  • Дозволені HTML теги: <a> <img> <h3> <h4> <em> <strong> <cite> <code> <blockquote> <ul> <ol> <li> <dl> <dt> <dd>
  • Стрічки та абзаци розбиваються автоматично.
  • Для вставки коду використовуйте <code>...</code> чи <?php ... ?> (підсвітка PHP).
  • Для вставки відео використовуйте [video:SOURCE]
12 + 4 =
Розв'яжіть математичне рівняння та введіть результат. Наприклад, для 1+3, введіть 4.
Syndicate content

Реклама