Подскажите, пожалуйста, как реализовать вывод результатов стандартного поиска в виде таблицы, например как это сделано во Views?
Какие модули использовать и какие файлы модифицировать?
Пробовал http://drupal.org/project/faceted_search, у него есть возможность выводить результаты через уже созданные Views. Ничего не вышло, т.к. наверное не правильно создавал аргументы вьюхи.
В сети нашёл только варианты модификаций search-result.tpl.php и search-results.tpl.php и они были без таблиц.
Неужели никому не нужны результаты в виде красивой таблички, а не куски текста?
Комментарии
Пока сделал так. Это конечно жёсткий хардкод, но выводит красивую табличку в стиле Views. Ищу более элегантное решение.
drupal/modules/search/search-results.tpl.php
<thead>
<tr>
<th>наименование</th><th>состояние</th><th>номер</th><th>цена</th><th>продавец</th><th>телефон</th><th>дата</th>
</tr>
</thead>
<tbody>
<?php print $search_results; ?>
<tbody>
</table>
drupal/sites/all/themes/my_theme/search-result.tpl.php
$node = $variables['result']['node'];
$part = $node->content['field_part']['field']['items'][0]['#children'];
$condition = $node->content['field_condition2']['field']['items'][0]['#children'];
$number = $node->content['field_number_orig']['field']['items'][0]['#children'];
$vid = 4;
$terms = taxonomy_node_get_terms_by_vocabulary($node, $vid);
if ($terms) {
$links = array();
foreach ($terms as $term) {
$links[] = $term->name;
}
$prod .= implode(", ", $links);
}
$price = $node->content['field_price']['field']['items'][0]['#children'];
$user = user_load($node->uid);
$company = $user->profile_company;
$phone = $user->profile_phone;
$date = format_date($node->changed, 'small');
?>
<tr class="<?php print $search_zebra; ?>">
<td><a href="<?php print $url; ?>"><?php print $part; ?></a></td>
<td><?php print $condition; ?></td>
<td><?php print $number; ?></td>
<td><?php print $prod; ?></td>
<td><?php print $price; ?></td>
<td><a href="<?php print '../../users/'.$node->uid; ?>"><?php print $company; ?></a></td>
<td><?php print $phone; ?></td>
<td><?php print $date; ?></td>
</tr>
Этот файл -- drupal/modules/search/search-results.tpl.php тоже должен быть в папке темя. Ядерные файлы не трогаем.
Я тоже так думал. Но подкладывание изменённого search-results.tpl.php в папку с темой никак не отражается на результатах. Т.е. ничего не происходит. Поэтому я решился на изменение ядра.
есть такой недокументированный на официальных доках хук - hook_search_page($results)
он идет в связке с хуком hook_search, доки по которому можно почитать на drupal.org
решение простое - определяете свой поиск, переадресуете поисковый запрос на стандартный hook_search в модуле search простым вызовом search_search, насколько помню
далее с помощью hook_search_page - выводите результаты
<?php
unction apachesolr_search_search_page($results) {
apachesolr_addon_add_includes();
$content = '';
$content .= '<dl class="search-results">';
foreach ($results as $result) {
$content .= '<div class="apachesolr_addon_search_element_container">';
$content .= '<div class="apachesolr_addon_search_element_image">';
$content .= $result['node'] -> ss_thumbnail;
$content .= '</div>';
$content .= '<div class="apachesolr_addon_search_element_body">';
$content .= '<div class="apachesolr_addon_search_element_body_title">';
$content .= '<a href="'.check_url($result['link']).'">'.$result['title'].'</a>';
$content .= '</div>';
if (isset($result['snippet'])) {
$content .= '<div class="apachesolr_addon_search_element_body_snippet">';
$content .= ''.$result['snippet'].'';
$content .= '</div>';
}
$content .= '</div>';
$content .= '</div>';
}
$content .= '</dl>';
$content .= theme('pager', NULL, 10, 0);
return $content;
}
?>
в свое время писал это для модуля apachesolr для интеграции с solr'ом, но не в этом суть
будут вопросы - задавайте
P.S. - не стоит патчить ядро НИКОГДА, ибо это первый шаг к превращения ващего сайта в дырявое решето, будь вы даже самым крутым программистом в мире
P.P.S. - собственно темизацию неплохо бы вынести в отдельный tpl, но у меня просто не было времени