Drupal - Просмотров. Установка фильтра программно - PullRequest
2 голосов
/ 24 февраля 2012

Надеюсь, это не глупый вопрос, который я искал большую часть дня!

У меня есть тип контента (документы), который просто содержит заголовок, файл и категорию. Значение категории является обязательным и «приведено в действие» компанией Taxonomy.

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

Используя свои ограниченные знания Drupal, я намерен перебрать соответствующие идентификаторы терминов (используя taxonomy_get_tree($vid)), а затем отрисовать каждое представление соответственно.

Для этого я надеялся использовать этот фрагмент.

view = views_get_view('documents');

$view->set_display($display_id);

$filter = $view->get_item($display_id, 'filter', 'field_dl_category');

$filter['value']['value'] = $filter_value;

$view->set_item($display_id, 'filter', 'field_dl_category', $filter);

$viewsoutput = $view->render();

Но это не работает; когда я запрашиваю значение $filter ($view->get_item($display_id, 'filter', 'field_dl_category')), я получаю нулевое значение.

Может ли быть так, что имя моего фильтра не совпадает с именем поля CCK?

Я использую Drupal 7.

Любая помощь очень ценится, у меня заканчиваются идеи (и время).

Ответы [ 3 ]

0 голосов
/ 27 февраля 2012

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

Естьдва (или, может быть, больше) способа, которыми вы можете сделать это в Представлениях 3:

(a) Выберите стиль отображения, который позволяет вам выбрать поле группировки.(Вы можете попробовать стиль таблицы, который поставляется с Views по умолчанию).Предположим, что вы правильно связали таблицу node с таблицей taxonomy_term_data через отношение Views, и вы можете выбрать taxonomy_term_data.name в качестве поля группировки.

Обратите внимание, что эта группировка выполненадо того, как вид только что представлен.Таким образом, ваш запрос должен был бы просто выбрать плоский список пар (контент, тег).

(b) Вы также можете использовать тип отображения «Вложение» для достижения чего-то подобного.Сначала покажите категории используемые в виде списка, щелкнув по которому отобразится страница (вложение) со всеми документами, помеченными в этой выбранной категории.

Чтобы понять, как это сделать (a) или (b), сначала включите модуль advanced_help (который не является обязательным для Views, но рекомендуется).

Для (a),прочитайте раздел в Группировка по стилям т.е. views/help/style-grouping.html и
Для (b) прочитайте раздел в Отображение вложений т.е. views/help/display-attachment.html

Паравещей о вашем подходе:

(a) Он покажет все термины из этого словаря независимо от того, были ли они использованы для обозначения хотя бы одного документа.

(b) views_embed_view()вернет NULL, даже если просматриваемый в данный момент пользователь не имеет доступа к представлению.Итак, убедитесь, что вы поймали этот случай.

0 голосов
/ 07 января 2014

Вот альтернатива:

$view = views_get_view('view_machine_name');
$view->init_display('default');
$view->display_handler->display->display_options['filters']['your_filter_name']['default_value'] = 'your_value';
$view->is_cacheable = FALSE;  
$view->execute();
print $view->render();

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

0 голосов
/ 27 февраля 2012

Мне, наконец, удалось заставить это работать, но я выбрал немного другой подход.

Я изменил свое представление и добавил соответствующий контекстный фильтр, а затем использовал эту функцию views_embed_view, чтобы получить требуемые результаты.

Если это поможет!это мое решение:

$display_id = 'default';
$vid = 7; 
$terms = taxonomy_get_tree($vid);

foreach($terms As $term){    
    $content = views_embed_view('documents', $display_id, $term->tid);

    //now we see if any content has been provided
    if(trim($content) != ''){
        print "<h3>" . $term->name . "</h3>";
        print $content;        
    }
}

В моем случае, отделка ($ content) возвращает '' без данных, так как шаблон представления был отредактирован, это может быть не для всех.

Я очень новый разработчик Drupal, поэтому я уверен, что есть гораздо лучшие способы сделать это, если так, пожалуйста, пишите.

...