Результаты стандартного поиска в виде таблицы?

Главные вкладки

Аватар пользователя atLex atLex 10 августа 2009 в 17:24

Подскажите, пожалуйста, как реализовать вывод результатов стандартного поиска в виде таблицы, например как это сделано во Views?
Какие модули использовать и какие файлы модифицировать?

Пробовал http://drupal.org/project/faceted_search, у него есть возможность выводить результаты через уже созданные Views. Ничего не вышло, т.к. наверное не правильно создавал аргументы вьюхи.

В сети нашёл только варианты модификаций search-result.tpl.php и search-results.tpl.php и они были без таблиц.

Неужели никому не нужны результаты в виде красивой таблички, а не куски текста?

Комментарии

Аватар пользователя atLex atLex 10 августа 2009 в 21:58

Пока сделал так. Это конечно жёсткий хардкод, но выводит красивую табличку в стиле Views. Ищу более элегантное решение.

drupal/modules/search/search-results.tpl.php

<table class="views-table">
<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

<?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>

Аватар пользователя Dan Dan 11 августа 2009 в 0:07

Этот файл -- drupal/modules/search/search-results.tpl.php тоже должен быть в папке темя. Ядерные файлы не трогаем.

Аватар пользователя atLex atLex 11 августа 2009 в 12:36

"Dan" wrote:
Этот файл -- drupal/modules/search/search-results.tpl.php тоже должен быть в папке темя. Ядерные файлы не трогаем.

Я тоже так думал. Но подкладывание изменённого search-results.tpl.php в папку с темой никак не отражается на результатах. Т.е. ничего не происходит. Поэтому я решился на изменение ядра.

Аватар пользователя serious.vip@drupal.org serious.vip@dru... 11 августа 2009 в 15:05

есть такой недокументированный на официальных доках хук - 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'NULL100);
        return 
$content;
    }
?>

в свое время писал это для модуля apachesolr для интеграции с solr'ом, но не в этом суть

будут вопросы - задавайте

P.S. - не стоит патчить ядро НИКОГДА, ибо это первый шаг к превращения ващего сайта в дырявое решето, будь вы даже самым крутым программистом в мире

P.P.S. - собственно темизацию неплохо бы вынести в отдельный tpl, но у меня просто не было времени