Как создать собственный фильтр для модуля просмотра Drupal?

У меня есть модули Profile, CCK и Views2, установленные на сайте Drupal 6. Я добавил строковое поле в профиль пользователя. Я могу легко фильтровать по заданным значениям, через конструктор GUI Views, действительно красиво. Тем не менее, я бы хотел, чтобы критерии фильтра были динамически заданы на основе других переменных среды (а именно $_SERVER['SERVER_NAME']).

Есть ли там где-то базовый "How-to-write-a-custom-drupal-views-filter"? Я смотрел через документацию, но это не очевидно для моего простого ума о том, как это сделать.

Ответ 1

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

<?php custom_views_embed_view($view_name, $display_id) {
$view = views_get_view($view_name);
$view->set_display($display_id);
$id = $view->add_item($display_id, 'filter', 'node', 'created',
                      array( 'value' => array('type' => 'date', 'value' => date('c')), 'operator' => '<='));
return $view->execute_display($display_id);
}
?>

Ответ 3

Есть возможность, посмотрев на фильтры, установленные для моего собственного сайта, что фильтры должны основываться на каком-то поле базы данных, и в этом случае то, что вы пытаетесь достичь, невозможно. Похоже, что фильтры предоставляют предложение WHERE для сгенерированного SQL-запроса.

Сказав все это, если вы хотите продолжить его, лучше всего начать с модуля, который уже предоставляет фильтры для Views. Существуют фильтры, снабженные элементами Views для модуля Node; альтернативно, вы можете посмотреть аудио модуль, который также предоставляет некоторые фильтры. Кроме того, публикация на форумах Drupal или в списке поддержки может включать еще один модуль, который позволит вам добиться того, что вы пытаетесь выполнить.

Ответ 4

да, вы можете это сделать. Попробуйте использовать модуль "блок фильтров просмотров". После того, как вы включите блок, извлеките html блока из "источника просмотра" при просмотре страницы. Теперь отключите "блок фильтров просмотров"... создайте свой собственный блок. Добавьте код к нему с помощью любого CSS, который вам нравится, чтобы он выглядел красиво. Внутри этого кода используйте php для динамического указания того, что вы хотите для первоначального выбора фильтра. Убедитесь, что вы фактически выбрали поле, на котором основан фильтр.. тогда в пределах настраиваемого php-блока используйте php-код, чтобы записать условие IF, чтобы проверить значение server_name и соответственно присвоить переменной фильтра правильное значение.

Возможно, другие (возможно, даже лучшие) способы сделать это, чтобы написать модуль для использования фильтра. Так что это всего лишь одно предложение. Также дайте "Views PHP Filter" попробовать. Я еще не использовал его, но, похоже, его стоит сделать.

  • пользователем drupal (имя пользователя drupal: drupdrips)

Ответ 5

Вы можете использовать viewsphpfilter модуль, который разрешает просмотр фильтров на node id., однако есть патч, если вам нужно расширить его для user views