Группируйте результаты поиска по drupal 7 и показывайте их во вкладках
Я использую такую функцию. Я сгруппировал вывод и отображение результатов поиска, но мне нужно сгруппировать их по вкладкам, используя любую доступную функцию вкладок, как мне это сделать здесь, используя любую другую функцию модуля.
function arras_preprocess_search_results(&$variables) {
$variables['search_results'] = '';
// get a list of node types
$nodeTypes = node_type_get_types();
// loop through results, group by type
$resultTypes = array();
foreach ($variables['results'] as $result) {
$resultTypes[$result['node']->type][] = $result;
}
// create fieldsets for each type
foreach ($resultTypes as $resultType => $resultTypeResults) {
$value = "";
// loop through entries
foreach ($resultTypeResults as $result) {
$value .= theme('search_result', array('result' => $result, 'module' => $variables['module']));
}
//$variables['search_results'] .= $value;
// add fieldset
/* $variables['search_results'] .= theme('fieldset',
array(
'element' => array(
'#title' => $nodeTypes[$resultType]->name,
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#value' => $value
)
)
);
*/
/* Проблема здесь */
$variables['search_results'] .= quicktabs_build_quicktabs('test',array(),array('title' => $nodeTypes[$resultType]->name, 'contents' => 'test'));
}
}
3 answers
Спасибо, что поделились. Я внес некоторые незначительные изменения в ваш код, потому что получал некоторые плавающие результаты поиска. Поэтому я изменил эту часть:
$output .= '<div id="tabs-'.$i.'">';
$output .= $value;
$output .= '</div>';
}
$output .= '</ul>';
$output .= '</div>';
$variables['search_results'] = $output;
К этому:
$output_results .= '<div id="tabs-'.$i.'">';
$output_results .= $value;
$output_results .= '</div>';
}
$output .= '</ul>';
$output .= $output_results;
$output .= '</div>';
$variables['search_results'] = $output;
Спасибо всем за код здесь, сэкономил мне кучу времени.
Однако предупреждаю - вам нужно включить вкладки пользовательского интерфейса jQuery следующим образом:
drupal_add_js('
(function ($) {
jQuery("#tabs").tabs();
}(jQuery));', array("type" => "inline", "scope" => "footer", 'weight' => 1));
В противном случае вы получите странности и столкновения с другими библиотеками - я заметил, что вкладки не будут отображаться, например, если пользователь не вошел в систему. При таком включенном коде несоответствия исчезают.
Я отвечаю на свой собственный вопрос, так как я наконец-то сделал то, что хотел, поискав в Google..
function arras_preprocess_search_results(&$variables) {
global $base_path;
drupal_add_library('system', 'ui.tabs');
drupal_add_js('jQuery(document).ready(function(){jQuery("#tabs").tabs();});', 'inline');
$variables['search_results'] = '';
// get a list of node types
$nodeTypes = node_type_get_types();
// loop through results, group by type
$resultTypes = array();
foreach ($variables['results'] as $result) {
$resultTypes[$result['node']->type][] = $result;
}
// create fieldsets for each type
$output .= '<div id="tabs">';
$output .= '<ul>';
$i = 0;
foreach ($resultTypes as $resultType => $resultTypeResults) {
$i++;
$value = "";
// loop through entries
foreach ($resultTypeResults as $result) {
$value .= theme('search_result', array('result' => $result, 'module' => $variables['module']));
}
$output .= '<li><a href="#tabs-'.$i.'">';
$output .= $nodeTypes[$resultType]->name.'</a></li>';
$output .= '<div id="tabs-'.$i.'">';
$output .= $value;
$output .= '</div>';
}
$output .= '</ul>';
$output .= '</div>';
$variables['search_results'] = $output;
}