Wie können Sie bei Verwendung von Drupal 7 und Views 3 einen Views-Filterwert so ändern, dass er sich auf den Inhalt auswirkt, der gerade gerendert wird?
Ich habe alles versucht, was hier für D6 erwähnt wurde.
Obwohl ein paar Leute es zum Laufen gebracht haben, gibt Merlin an, dass das Ändern der display_options der falsche Weg ist, um dies zu erreichen, aber er ist vage in seiner Antwort, was zu tun ist ( http://drupal.org/node/789710#comment- 2927556 ).
Ich habe versucht:
function pages_views_pre_view($view){
$view = views_get_view('north_carolina');
$view->set_display('default');
$view->display_handler->options['filters']['province']['value'] = 'Georgia';
dsm($view->display_handler->options['filters']['province']);
}
Anmerkungen:
1) Ich habe eine Ansicht namens erstellt north_carolina
, die zwei Arten von Anzeigen hat - eine Seite und einen Block (Seite_1 und Block_1).
2) Meine Filter sind auf allen Anzeigen gleich, daher versuche ich, die Standardanzeige so zu ändern, dass sie sich auf alle auswirkt.
3) Der Standardwert für meinen Filter ist "North Carolina" (den ich in der Ansichts-Benutzeroberfläche festgelegt habe). Beachten Sie jedoch, dass ich versuche, ihn in "Georgia" zu ändern.
4) Wenn ich unmittelbar danach DSM ausführe, wird angezeigt, dass der Filter geändert wurde. Meine Ergebnisse zeigen jedoch weiterhin die Ergebnisse von "North Carolina". Das Caching ist deaktiviert, und ich erhalte immer noch das Gleiche, nachdem ich drush cc all ausgeführt habe.
Ich habe auch versucht, den gleichen Code durch hook_views_pre_build
und laufen zu lassen hook_views_pre_execute
.
Irgendwelche Vorschläge?
BEARBEITEN:
Wie vorgeschlagen, kann es hilfreich sein, zusätzliche Informationen zu haben. Hier ist ein Dump der Ansicht:
$view = new view();
$view->name = 'north_carolina';
$view->description = '';
$view->tag = 'default';
$view->base_table = 'node';
$view->human_name = 'North Carolina';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = 'test nc block';
$handler->display->display_options['use_more_always'] = FALSE;
$handler->display->display_options['access']['type'] = 'perm';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['style_plugin'] = 'default';
$handler->display->display_options['row_plugin'] = 'fields';
/* Field: Content: Title */
$handler->display->display_options['fields']['title']['id'] = 'title';
$handler->display->display_options['fields']['title']['table'] = 'node';
$handler->display->display_options['fields']['title']['field'] = 'title';
$handler->display->display_options['fields']['title']['label'] = '';
$handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE;
$handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE;
/* Sort criterion: Content: Post date */
$handler->display->display_options['sorts']['created']['id'] = 'created';
$handler->display->display_options['sorts']['created']['table'] = 'node';
$handler->display->display_options['sorts']['created']['field'] = 'created';
$handler->display->display_options['sorts']['created']['order'] = 'DESC';
/* Filter criterion: Content: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = 1;
$handler->display->display_options['filters']['status']['group'] = 1;
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
/* Filter criterion: Location: Province */
$handler->display->display_options['filters']['province']['id'] = 'province';
$handler->display->display_options['filters']['province']['table'] = 'location';
$handler->display->display_options['filters']['province']['field'] = 'province';
$handler->display->display_options['filters']['province']['value'] = 'North Carolina';
$handler->display->display_options['filters']['province']['exposed'] = TRUE;
$handler->display->display_options['filters']['province']['expose']['operator_id'] = 'province_op';
$handler->display->display_options['filters']['province']['expose']['label'] = 'State';
$handler->display->display_options['filters']['province']['expose']['operator'] = 'province_op';
$handler->display->display_options['filters']['province']['expose']['identifier'] = 'province';
$handler->display->display_options['filters']['province']['expose']['remember_roles'] = array(
2 => '2',
1 => 0,
3 => 0,
4 => 0,
);
/* Display: Block */
$handler = $view->new_display('block', 'Block', 'block_1');
$handler->display->display_options['block_description'] = 'test nc block';
Beachten Sie, dass diese Handler vom Modul locations bereitgestellt werden. Speziell für den Filter "Ort: Provinz" erhalte ich ein Formular zur automatischen Vervollständigung. Wenn ich in North Carolina tippe, wird es angezeigt, und das muss ich auswählen. Beachten Sie jedoch, dass Views in der SQL-Anweisung die zweistellige Abkürzung für state verwendet:
SELECT node.title AS node_title, node.nid AS nid, node.created AS node_created
FROM
{node} node
LEFT JOIN {location_instance} location_instance ON node.vid = location_instance.vid
LEFT JOIN {location} location ON location_instance.lid = location.lid
WHERE (( (node.status = '1') AND (location.province = 'NC') ))
ORDER BY node_created DESC
LIMIT 10 OFFSET 0
Falls jemand diesen Thread auftauchte, während er auf D8 nach der gleichen Lösung suchte (wie ich):
Mit der neuen API können diese Parameter viel übersichtlicher bearbeitet werden. In diesem Abschnitt finden Sie Referenzen.
Kleines Beispiel
quelle