Mit Views einen generischen Node View erstellen
Drupal 6, Views 2
Thema
Dieser FAQ beschreibt eine Möglichkeit, mittels eines View Nodes anzuzeigen.
Ich nenne einen solchen View zur Anzeige von Nodes "Generischen Node View" - auch GNV.
Normalerweise wird eine Node von Drupal durch den Aufruf der URL www.example.com/node/x
angezeigt. Wobei x die Node ID ist. Die Anzeige von Nodes nach dem genannten URL-Schema ist eine Grundfunktion von Drupal.
Der Generische Node View, GNV
Der GNV macht zunächst nichts weiter als Drupals Grundfunktion der Anzeige von Nodes zu übernehmen. Er ist also als View zur Anzeige von Seiten mit der
URL node/%
konfiguriert. Wobei % als Argument eine Node ID ist. Das Argument wird beim Ansprechen des GNV mit der jeweils verwendeten URL übergeben und die entsprechende Node wird angezeigt.
Das ist Allgemein zum GNV schon Alles.
Der (exportierte) GNV ist am FAQ Ende als Text beigefügt, um ihn Importieren zu können.
Sinn des GNV
Nun entsteht die Frage warum man Drupals Grundfunktion der Nodeanzeige mit einem View ersetzen soll.
Die Antwort ergibt sich aus der weiteren Konfiguration des GNV.
Wenn man den GNV so konfiguriert das er immer nur eine einzelne Node anzeigen kann schöpft man die Möglichkeiten von Views nicht aus.
Mehrere beliebige Nodes gleichzeitig anzeigen - ohne Theming
Eine den GNV erweiternde Möglichkeit ist,
die Anzeige von mehreren Nodes zu erlauben. Dies wird gekoppelt mit der Erlaubnis, mehrere Argumente an den GNV übergeben zu können.
Damit können URL's nach dem Schema www.example.com/node/1
oder auch www.example.com/node/1+2+3+117+312
aufgerufen werden. Ergebnis:
Es werden auf einfache Weise 2 oder auch mehrere Nodes gleichzeitig zur Anzeige gebracht - ohne jedwedes Theming.
Der Zusammenhang mit der Standard Startseite
Normalerweise ist als Standard Startseite node festgelegt.
An dieser Stelle ergibt sich ein Zusammenhang mit dem GNV. Was passiert wenn man als URL nach dem Schema www.example.com/node/1
- keine Node ID angibt,
- eine nicht existente Node ID angibt?
zu 1.
In diesem Falle wird vom System nicht der GNV verwendet sondern es werden entsprechend der als Standard definierten URL node
alle Nodes mit der Startseitenoption angezeigt.
zu 2.
Es wird keine Node gefunden. Um diesen Fehler abzufangen ist der GNV entsprechend konfiguriert - "Page not found".
Und wie ist es bei URL's nach dem Schema www.example.com/node/1+2+3
und wenn
- eine der verwendeten ID's eine nicht existente Node ID angibt?
Der GNV zeigt nur die Node/Nodes's mit einer existieren ID an. Trotz voran beschriebenem Abfangen des Fehlers bei Aufruf nicht existenter Nodes wird keine entsprechende Information angezeigt. D. h., es werden nur die Nodes angezeigt die existieren.
Eine andere Standard Startseite
Um die im GNV definierte Option, das bei fehlenden Argument/en keine Seite angezeigt wird, kann man als Standard Startseite in Drupal home
festlegen.
Dies setzt allerdings voraus das es einen View gibt der auf die URL home
hört und alle Nodes anzeigt welche die Veröffentlichungsoption "Auf der Startseite anzeigen" haben.
Der GNV zum Importieren
Den folgenden Code mit der Importfunktion von Views aufnehmen:
$view = new view;
$view->name = 'Nodes';
$view->description = '';
$view->tag = '';
$view->view_php = '';
$view->base_table = 'node';
$view->is_cacheable = FALSE;
$view->api_version = 2;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'Node', 'default');
$handler->override_option('arguments', array(
'nid' => array(
'default_action' => 'not found',
'style_plugin' => 'default_summary',
'style_options' => array(),
'wildcard' => 'all',
'wildcard_substitution' => 'Alle',
'title' => '',
'default_argument_type' => 'fixed',
'default_argument' => '',
'validate_type' => 'none',
'validate_fail' => 'not found',
'break_phrase' => 1,
'not' => 0,
'id' => 'nid',
'table' => 'node',
'field' => 'nid',
'relationship' => 'none',
'default_argument_user' => 0,
'default_argument_fixed' => '',
'default_argument_php' => '',
'validate_argument_node_type' => array(
'ajaxstory' => 0,
'ccktax' => 0,
'imagestory' => 0,
'page' => 0,
'profile' => 0,
'story' => 0,
'testnode' => 0,
),
'validate_argument_node_access' => 1,
'validate_argument_nid_type' => 'nids',
'validate_argument_vocabulary' => array(
'1' => 0,
),
'validate_argument_type' => 'tid',
'validate_argument_php' => 'if ( is_numeric($argument) ) {
return TRUE;
}',
'default_options_div_prefix' => '',
),
));
$handler->override_option('filters', array(
'status' => array(
'operator' => '=',
'value' => 1,
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'status',
'table' => 'node',
'field' => 'status',
'relationship' => 'none',
),
));
$handler->override_option('access', array(
'type' => 'none',
'role' => array(),
'perm' => '',
));
$handler->override_option('empty', '<?php drupal_set_title(\'Page not found\'); ?>
<p>The requested page could not be found.</p>');
$handler->override_option('empty_format', '3');
$handler->override_option('use_ajax', TRUE);
$handler->override_option('row_plugin', 'node');
$handler->override_option('row_options', array(
'teaser' => 0,
'links' => 1,
));
$handler = $view->new_display('page', 'Seite', 'page_1');
$handler->override_option('row_plugin', 'node');
$handler->override_option('row_options', array(
'teaser' => 0,
'links' => 1,
));
$handler->override_option('path', 'node/%');
$handler->override_option('menu', array(
'type' => 'none',
'title' => '',
'weight' => 0,
));
$handler->override_option('tab_options', array(
'type' => 'none',
'title' => '',
'weight' => 0,
));
Verbesserungen oder Erweiterungen des GNV sind willkommen.
- Anmelden oder Registrieren um Kommentare zu schreiben
Neue Kommentare
vor 21 Stunden 47 Minuten
vor 1 Tag 16 Minuten
vor 1 Tag 49 Minuten
vor 1 Tag 1 Stunde
vor 1 Tag 1 Stunde
vor 1 Tag 1 Stunde
vor 1 Tag 16 Stunden
vor 3 Tagen 30 Minuten
vor 4 Tagen 13 Minuten
vor 4 Tagen 7 Stunden