Как определить, является ли текущая страница страницей результатов поиска?


Как я могу определить из модуля или темы, является ли текущая страница страницей результатов поиска Apache solr?

 6
Author: kiamlaluno, 2011-03-02

5 answers

Если вы пытаетесь определить из модуля, то вы можете проверить, является ли страница страницей результатов поиска, используя аргументы пути с помощью функции arg().

if (arg(0) == 'search') {
  TRUE
}
else {
  FALSE
}
 6
Author: Camsoft, 2011-03-02 23:44:45

С точки зрения тематики вы могли бы просто использовать

<?php if ($search_results) : ?>
    <!-- Do this on search results pages -->
<?php endif; ?>

$search_results должно возвращать значение true только в том случае, если вы находитесь на странице результатов поиска.

Если вы изучаете стилизацию самих результатов, возможно, вам захочется изучить search-result.tpl.php

 2
Author: Paul Jones, 2011-03-02 21:54:37

Если вы хотите узнать, был ли произведен поиск solr, вы можете использовать функцию apachesolr_has_searched().

Это не будет указывать, находитесь ли вы на странице результатов поиска, так как после того, как вы начнете использовать представления solr, определение страницы результатов поиска будет нечетким, но оно может сообщить вам, был ли выполнен поиск solr.

Просто для справкиapachesolr_static_response_cache() даст вам ответ solrs, а apachesolr_current_query() даст вы предоставляете информацию по запросу.

 0
Author: Jeremy French, 2011-03-03 09:29:18

Чтобы проверить, является ли страница страницей поиска, вы должны убедиться, что первый элемент пути текущего URL-адреса равен search, а второй элемент пути - это имя модуля, реализующего hook_search(). (Я использовал временную переменную и добавил дополнительные скобки, чтобы сделать код более читабельным.)

$bool = ((arg(0) == 'search') &&
  ($module == arg(1)) && module_invoke($module, 'search', 'name')
);
if ($bool) {
  // The page is a search page returned from apachesolr.module.
}

В конкретном случае, учитывая, что вы хотите проверить, является ли страница результатом, возвращенным из apachesolr.module, код можно упростить следующим образом:

if ((arg(0) == 'search') && (arg(1) == 'apachesolr')) {
  // The page is a search page returned from apachesolr.module.
}

В причина, по которой общий код может быть упрощен, заключается в том, что вы знаете имя модуля, и этот модуль, безусловно, реализует hook_search().
Общий код проверяет значение, возвращаемое hook_search(), когда последний параметр равен "name", потому что существуют модули, которые реализуют hook_search() только частично. По крайней мере, это то, что я обнаружил, когда отлаживал код канала OpenSearch.

 0
Author: kiamlaluno, 2011-03-12 23:09:03

Если вы говорите о теме или модуле, вы можете проверить текущий URL/путь, если он начинается с "поиск".

 -1
Author: EricSchaefer, 2011-03-02 21:41:46