Скрыть ссылку на представление видов, если оно пустое - PullRequest
2 голосов
/ 02 декабря 2009

У меня есть сайт Drupal 6.14 с модулем Views. У меня есть вид и на первичные ссылки я ставлю ссылку на вид.

Есть способ скрыть ссылку в основном меню, только если вид пуст?

Ответы [ 3 ]

6 голосов
/ 03 декабря 2009

Возможно, вы могли бы сделать это либо с помощью реализации темы или модуля preprocess_page (THEMENAME_preprocess_page (& $ vars) или MODULENAME_preprocess_page (& $ vars)), но приведенный выше mac является правильным, так как представления не известны как пустые или нет, пока они запускаются, поэтому производительность будет снижена.

Внутри функции у вас должен быть доступ к массиву структурированных первичных ссылок, чтобы вы могли запустить представление:

 $view = views_get_view('view_name');
 // Swap out 'default' for a different display as needed. Also, $args are arguments, and can be left out if not applicable.
 $output = $view->preview('default', $args);
 if (empty($view->result)) {
   // The view has no results, alter the primary links here to remove the link in question.
 }
2 голосов
/ 03 декабря 2009

Я готов быть в любой момент противоречащим, поскольку я никогда не реализовывал ничего подобного , однако у меня сложилось впечатление, что, поскольку представления по сути являются запросами к БД, вы на самом деле не можете знать, является ли представление пусто, пока вы на самом деле не вызовете его.

Учтите, что, учитывая, что вы говорите о первичных ссылках (показанных почти на каждой странице вашего сайта), это может серьезно повлиять на производительность, в зависимости от сложности представления и его "кешируемости".

Вам также следует рассмотреть возможность изменения содержимого этого представления другими пользователями, просматривающими сайт одновременно с «нашим» пользователем: если представление заполняется после того, как «наш» пользователь загрузил страницу, «наш» пользователь никогда не узнает.

Как и на , как добиться того, чего вы хотите, пожалуйста, посмотрите принятый ответ.

НТН!

0 голосов
/ 04 декабря 2009

Я переопределяю views_embed_view(), чтобы обеспечить вывод только при наличии содержимого, а затем вызываю мое переопределение из слоя темы:

function mymodule_embed_view($name, $display_id = 'default') {
  // handle any add'l args (this hook supports optional params)
  $args = func_get_args();
  array_shift($args); 
  if (count($args)) {
    array_shift($args); 
  }
  $view = views_get_view($name);
  $output = $view->preview($display,$args);
  if ($view->result) {
    return $output;
  }
}

Затем в файле шаблона:

<?php 
  $view = mymodule_embed_view('view_name');           
  if (strlen($view) > 0) {
    print $view;
  }
?>
...