Как я могу получить более 10 результатов поиска на одной странице в Drupal 7?

17

По умолчанию страница поиска показывает только 10 результатов. Как я могу изменить его, чтобы отображать неограниченное количество результатов?

mivoligo
источник
1
Для тех, кто интересуется предысторией о том, почему это в настоящее время невозможно сделать, легко увидеть: drupal.org/node/33809
coderintherye
Мне нужно было сделать то же самое в Drupal 8, и я не могу изменить предел нумерации результатов поиска. Вы можете помочь в этом.?
Навин Кумар

Ответы:

15

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

beeradb
источник
Спасибо за рекомендацию. Это выглядит как самый простой способ, но в Drupal 7 я не вижу ни одного вида поиска.
Mivoligo
Вы можете точно настроить представления так, чтобы они отображали результаты поиска, такие как core search.module
Daniel Wehner,
11

Ограничение в 10 элементов обычно жестко закодировано в hook_search_execute()реализациях (например node_search_execute()): теоретически вы можете реализовать hook_search_execute()и изменить ->limit(10)запрос на что-то другое 10.

Но, как упоминалось в beeradb , возможно, проще использовать Views для переопределения основных результатов поиска.

Сообщество
источник
5

В настоящее время Drupal не позволяет изменять количество результатов поиска на странице. Как рекомендует @beeradb, вы можете использовать модуль Views (видео-учебник для D7 по адресу http://lin-clark.com/blog/intro-drupal-7-intro-views-pt-1 ).

Для этого есть запрос на добавление Drupal 8 http://drupal.org/node/702940 .

Chaulky
источник
4

В Drupal 7 я мог изменять основные элементы результатов поиска на странице, используя hook_query_alter в пользовательском модуле. Следующий фрагмент кода можно использовать, если вы знакомы с использованием хуков в коде:

<?php
/**
 * Implements hook_query_alter
 */
function MY_MODULE_query_alter(&$query) {

  // This is a search result query and we want to change the
  // number of search results per page to 16.
  if ($query instanceof PagerDefault
    && ($tables = $query->getTables())
    && isset($tables['i']['table'])
    && $tables['i']['table'] === 'search_index') {
    $query->limit(16);
  }
}
aklump
источник
0

Я не нашел «вид поиска» в модуле представлений. Я использую представления 7.x-3.7.

Чтобы получить более 10 результатов поиска на одной странице в Drupal 7, я использовал модуль search_config . Я использовал его последнюю версию «7.x-1.1-beta2».

После включения модуля вы можете настроить ограничение пейджера в разделе «Настройка» -> «Поиск» и «Метаданные» -> «Настройки поиска» (admin / config / search / settings) в разделе «ДОПОЛНИТЕЛЬНАЯ КОНФИГУРАЦИЯ ПОИСКА УЗЛА». Там вы увидите раздел «Результаты» и можете указать лимит пейджера для отображения более 10 результатов поиска на одной странице.

amitgoyal
источник
Это не похоже на работу с Apache Solr.
Джек Райан
0

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

$view = new view();
$view->name = 'search_test';
$view->description = '';
$view->tag = 'default';
$view->base_table = 'node';
$view->human_name = 'search test';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */

/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = 'search test';
$handler->display->display_options['use_more_always'] = FALSE;
$handler->display->display_options['access']['type'] = 'perm';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['exposed_form']['type'] = 'input_required';
$handler->display->display_options['exposed_form']['options']['text_input_required'] = 'Enter some search keywords.';
$handler->display->display_options['exposed_form']['options']['text_input_required_format'] = 'filtered_html';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['pager']['options']['items_per_page'] = '20';
$handler->display->display_options['style_plugin'] = 'default';
$handler->display->display_options['row_plugin'] = 'fields';
/* No results behavior: Global: Text area */
$handler->display->display_options['empty']['area']['id'] = 'area';
$handler->display->display_options['empty']['area']['table'] = 'views';
$handler->display->display_options['empty']['area']['field'] = 'area';
$handler->display->display_options['empty']['area']['empty'] = TRUE;
$handler->display->display_options['empty']['area']['content'] = 'No results found.';
$handler->display->display_options['empty']['area']['format'] = 'filtered_html';
/* Field: Content: Title */
$handler->display->display_options['fields']['title']['id'] = 'title';
$handler->display->display_options['fields']['title']['table'] = 'node';
$handler->display->display_options['fields']['title']['field'] = 'title';
$handler->display->display_options['fields']['title']['label'] = '';
$handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE;
$handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE;
/* Filter criterion: Content: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = 1;
$handler->display->display_options['filters']['status']['group'] = 1;
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
/* Filter criterion: Search: Search Terms */
$handler->display->display_options['filters']['keys']['id'] = 'keys';
$handler->display->display_options['filters']['keys']['table'] = 'search_index';
$handler->display->display_options['filters']['keys']['field'] = 'keys';
$handler->display->display_options['filters']['keys']['operator'] = 'required';
$handler->display->display_options['filters']['keys']['exposed'] = TRUE;
$handler->display->display_options['filters']['keys']['expose']['operator_id'] = 'keys_op';
$handler->display->display_options['filters']['keys']['expose']['label'] = 'Search Terms';
$handler->display->display_options['filters']['keys']['expose']['operator'] = 'keys_op';
$handler->display->display_options['filters']['keys']['expose']['identifier'] = 'keys';

/* Display: Page */
$handler = $view->new_display('page', 'Page', 'page');
$handler->display->display_options['path'] = 'search';
Альфред Армстронг
источник
-2

Вы также можете использовать модуль ограничения поиска или использовать следующий код в template.php

if(arg(0) == "search" && arg(1) == "site") {

$variables['quantity'] = 5; 

}
Naresh
источник