Drupal 6 Просмотров 2: Настройка аргументов даты

Передача uid в качестве аргумента отлично работает с этим кодом:

$bouts = views_get_view_result('Results', 'page_1', array($user->uid)); 

Ключевая строка в views_get_view_result, которая устанавливает аргументы:

 $view->set_arguments($args); 

Но как насчет прохождения диапазонов дат?

Кроме того, если что-то указано как фильтр на представлении, есть ли способ его пропорционально изменить?

 views_get_view_result: /** * Investigate the result of a view. * from Drupal.org. * * @param string $viewname * The name of the view to retrieve the data from. * @param string $display_id * The display id. On the edit page for the view in question, you'll find * a list of displays at the left side of the control area. "Defaults" * will be at the top of that list. Hover your cursor over the name of the * display you want to use. A URL will appear in the status bar of your * browser. This is usually at the bottom of the window, in the chrome. * Everything after #views-tab- is the display ID, eg page_1. * @param array $args * Array of arguments. (no keys, just args) * @return * array * An array containing an object for each view item. * string * If the view is not found a message is returned. */ function views_get_view_result($viewname, $display_id = NULL, $args = NULL) { $view = views_get_view($viewname); if (is_object($view)) { if (is_array($args)) { $view->set_arguments($args); } if (is_string($display_id)) { $view->set_display($display_id); } else { $view->init_display(); } $view->pre_execute(); $view->execute(); /* print "<pre> $viewname: $display_id"; print_r(get_class_methods($view)); */ return $view->result; } else { return t('View %viewname not found.', array('%viewname' => $viewname)); } } по views_get_view_result: /** * Investigate the result of a view. * from Drupal.org. * * @param string $viewname * The name of the view to retrieve the data from. * @param string $display_id * The display id. On the edit page for the view in question, you'll find * a list of displays at the left side of the control area. "Defaults" * will be at the top of that list. Hover your cursor over the name of the * display you want to use. A URL will appear in the status bar of your * browser. This is usually at the bottom of the window, in the chrome. * Everything after #views-tab- is the display ID, eg page_1. * @param array $args * Array of arguments. (no keys, just args) * @return * array * An array containing an object for each view item. * string * If the view is not found a message is returned. */ function views_get_view_result($viewname, $display_id = NULL, $args = NULL) { $view = views_get_view($viewname); if (is_object($view)) { if (is_array($args)) { $view->set_arguments($args); } if (is_string($display_id)) { $view->set_display($display_id); } else { $view->init_display(); } $view->pre_execute(); $view->execute(); /* print "<pre> $viewname: $display_id"; print_r(get_class_methods($view)); */ return $view->result; } else { return t('View %viewname not found.', array('%viewname' => $viewname)); } } 

Что касается передачи диапазонов данных и с учетом опубликованного определения функции, вы можете передавать диапазоны дат, если только представление примет их в качестве аргументов. Я не уверен на 100%, но диапазоны дат афайка могут быть определены только как фильтры, а не как аргументы, что приводит к вашему второму вопросу:

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

 $view = views_get_view($viewname); 

После этого $ view содержит весь объект вида. Настройки фильтра определяются для каждого дисплея, поэтому, если у вас есть представление только с отображением по умолчанию, вы найдете настройки фильтра в

 $view->display['default']->display_options['filters'] 

(Обратите внимание на мигание нотации объектов / массивов – дисплей является содержимым объекта вида views_display)

Массив 'filters' содержит одну запись для каждого фильтра с различными элементами в зависимости от типа фильтра. Для вашей цели я бы предложил создать фиктивный вид только с интересующим вас фильтром с предварительно настроенными / жестко закодированными значениями. Используя отладчик (или var_dump / print_r ), вы можете взглянуть на массив фильтров после создания представления. Из того, что вы найдете там, вы сможете определить, как ввести свой диапазон дат.


Отказ от ответственности: выдумка в таком взгляде, как это немного раздражает, а не эффективна, но она работает. На данный момент я не нашел краткой документации Views2, которая бы объясняла внутренности прямолинейным способом, поскольку я считаю, что официальная документация API немного отсутствует в отношении использования кода. (Конечно, это может быть только я, будучи глупым;)

Если вы используете представления 2, вы можете использовать графический интерфейс для добавления аргумента даты. Затем в URL-адресе вы можете поставить:

http://www.yousite.com/yourview/startDate–finishDate

Для startDate / finishDate формат – YYYY-MM-DD-HH.

GL!