Группируйте результаты поиска по 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')); 
    }
}
 2
Author: Hacker, 2011-09-13

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;
 2
Author: anon, 2011-09-22 11:44:03

Спасибо всем за код здесь, сэкономил мне кучу времени.

Однако предупреждаю - вам нужно включить вкладки пользовательского интерфейса jQuery следующим образом:

drupal_add_js('
(function ($) {
 jQuery("#tabs").tabs();
}(jQuery));', array("type" => "inline", "scope" => "footer", 'weight' => 1));

В противном случае вы получите странности и столкновения с другими библиотеками - я заметил, что вкладки не будут отображаться, например, если пользователь не вошел в систему. При таком включенном коде несоответствия исчезают.

 1
Author: Paul Barrett, 2012-05-01 16:01:22

Я отвечаю на свой собственный вопрос, так как я наконец-то сделал то, что хотел, поискав в 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;

}
 0
Author: Hacker, 2011-09-19 15:34:26