Иногда бывает нужно вывести в скобках пункта меню, который ведет на views, показать количество результатов. То есть, чтобы выглядело все примерно так:

snimok_ekrana_2014-02-10_v_12.18.01.png

Для реализации этого можно добавить в своем модуле следующий код:

/**
 * Implements hook_preprocess_HOOK().
 */
function mymodule_preprocess_menu_link(&$variables) {
  if ($variables['element']['#href'] == 'my-menu-item-path') { // my-menu-item-path - заменяем на путь нашего пункта меню
    $variables['element']['#title'] = $variables['element']['#title'] . ' (' . get_view_items_count('my_views_name', 'display_id', null) . ')'; // my_views_name - имя views, display_id - id дисплея
  }
}
 
/**
 * Executes View to know rows count
 */
function testm_get_view_items_count($view_name, $display_id, $args) {
  // $count = &drupal_static(__FUNCTION__); 
  if (!isset($count)) {
    if ($view = views_get_view($view_name)) {
      $view->set_arguments($args);
      $view->get_total_rows = TRUE;
      $view->execute($display_id);
      if (isset($view->total_rows)) {
        $count = $view->total_rows;
      }
    }
  }
  return $count;
}
/**
* Implements hook_preprocess_HOOK().
*/
function hide_clear_body_text_preprocess_menu_link(&$variables) {
$views_paths = array (
'my-drafts' => array('my_drafts', 'page_1'),
'my-submitted' => array('articles','page_1'),
);

if(array_key_exists($variables['element']['#href'], $views_paths)) {
$start = microtime(true);

$path = $variables['element']['#href'];
$view_name = $views_paths[$path][0];
$view_display = $views_paths[$path][1];
$variables['element']['#title'] = $variables['element']['#title'] . ' (' . testm_get_view_items_count($view_name, $view_display, null) . ')';

$time = microtime(true) - $start;
$variables['element']['#title'] .= ' time: ' . $time;

// $variables['element']['#title'] = $variables['element']['#title'] . ' (' . testm_get_view_items_count($views_paths, 'page_1', null) . ')';
}

// if ($variables['element']['#href'] == 'my-drafts') {
// // dsm($variables);
// $variables['element']['#title'] = $variables['element']['#title'] . ' (' . testm_get_view_items_count('my_drafts', 'page_1', null) . ')';
// }
}

/**
* Executes View to know rows count
*/
function testm_get_view_items_count($view_name, $display_id, $args) {
// $count = &drupal_static(__FUNCTION__);
if (!isset($count)) {
if ($view = views_get_view($view_name)) {
$view->set_arguments($args);
$view->get_total_rows = TRUE;
$view->execute($display_id);
if (isset($view->total_rows)) {
$count = $view->total_rows;
// $count = count($view->result); //maybe better solution
}
}
}
return $count;
}

Добавить комментарий