Views automatisiert erstellen
am 23.06.2008 - 11:37 Uhr in
Hi,
ich würde gerne Views automatisiert erzeugen. Ich habe da auch schon etwas recherchiert:
http://drupal.org/node/223404.
Zuerst habe ich eine bereits vorhandene View (View Objekt) exportiert und in PHP einegefügt.
<?php
// Bootstrap Drupal
include_once "includes/bootstrap.inc";
include_once("includes/common.inc");
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$view = new stdClass();
$view->name = 'Kat_View_Test';
$view->description = 'Test';
$view->access = array (
0 => '1',
);
$view->view_args_php = '';
$view->page = TRUE;
$view->page_title = 'Test';
$view->page_header = '';
$view->page_header_format = '1';
$view->page_footer = '';
$view->page_footer_format = '1';
$view->page_empty = '';
$view->page_empty_format = '1';
$view->page_type = 'teaser';
$view->url = 'Test';
$view->use_pager = TRUE;
$view->nodes_per_page = '10';
$view->menu = TRUE;
$view->menu_title = 'Test';
$view->menu_tab = FALSE;
$view->menu_tab_weight = '9';
$view->menu_tab_default = FALSE;
$view->menu_tab_default_parent = NULL;
$view->menu_tab_default_parent_type = 'tab';
$view->menu_parent_tab_weight = '0';
$view->menu_parent_title = '';
$view->sort = array (
);
$view->argument = array (
);
$view->field = array (
);
$view->filter = array (
array (
'tablename' => 'node_data_field_kategorie',
'field' => 'field_kategorie_value_like',
'operator' => '=',
'options' => '',
'value' => 'Wirtschaft',
),
);
$view->exposed_filter = array (
);
$view->requires = array(node_data_field_kategorie);
$views[$view->name] = $view;
views_sanitize_view($view);
_views_save_view($view);
?>
Die neue View soll den Namen Test tragen und auch im Menü erscheinen.
Nun zu meinen Problemen. Ich habe eine Page erstellt in der ich o.g. Code ausführe.
Wenn ich den Code ausführe bekomme ich folgende Meldung:
Fatal error: Call to undefined function: views_sanitize_view() in /home/httpd/vhosts/mydomain.com/httpdocs/includes/common.inc(1342) : eval()'d code on line 58
Hm, die Funktion existiert aber... in views_cache.inc. Wozu brauche ich views_sanitize_view()???
Entferne ich die Funktion läuft es glatt durch,..dachte ich!
Leider taucht im Menü meine neue View nicht auf, unter Administrator Views ist sie jedoch vorhanden. Wenn ich dort auf View Edit gehe, nichts verändere, die View speichere ist alles in Ordnung (Im Menü sichtbar). Darüberhinaus werden die Filter die ich für diese View definiere nicht übernommen. :-(
Vielleicht hatte jemand schon ein ähnlichen Problem?
Vielen Dank!
Cheers,
Ralph
- Anmelden oder Registrieren um Kommentare zu schreiben
Warum benutzt du nicht
am 23.06.2008 - 11:52 Uhr
Warum benutzt du nicht einfach hook_views_default_views? http://drupal.org/node/99568
<?php
function hook_views_default_views() {
$view = new stdClass();
$view->name = 'Kat_View_Test';
$view->description = 'Test';
$view->access = array (
0 => '1',
);
$view->view_args_php = '';
$view->page = TRUE;
$view->page_title = 'Test';
$view->page_header = '';
$view->page_header_format = '1';
$view->page_footer = '';
$view->page_footer_format = '1';
$view->page_empty = '';
$view->page_empty_format = '1';
$view->page_type = 'teaser';
$view->url = 'Test';
$view->use_pager = TRUE;
$view->nodes_per_page = '10';
$view->menu = TRUE;
$view->menu_title = 'Test';
$view->menu_tab = FALSE;
$view->menu_tab_weight = '9';
$view->menu_tab_default = FALSE;
$view->menu_tab_default_parent = NULL;
$view->menu_tab_default_parent_type = 'tab';
$view->menu_parent_tab_weight = '0';
$view->menu_parent_title = '';
$view->sort = array (
);
$view->argument = array (
);
$view->field = array (
);
$view->filter = array (
array (
'tablename' => 'node_data_field_kategorie',
'field' => 'field_kategorie_value_like',
'operator' => '=',
'options' => '',
'value' => 'Wirtschaft',
),
);
$view->exposed_filter = array (
);
$view->requires = array(node_data_field_kategorie);
$views[$view->name] = $view;
}
?>
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.deXING
Nicht wirklich was ich suche...
am 23.06.2008 - 14:25 Uhr
@dereine Vielen Dank für deine schnelle Antwort!
Leider löst das nicht mein Problem.
Etwas mehr details:
ich erzeuge dynamisch nodes(node_save), diese nodes haben Attribute die ich gerne über views abbilden möchte.
Beispiel: Ich habe eine node die ein CCK field Hersteller hat.
Wenn für diesen Hersteller (Attribut) noch keine View besteht, möchte ich diese erzeugen.
Ich dachte mit:
views_sanitize_view($view);
_views_save_view($view);
wäre das zu lösen.
Vielen Dank für eure Hilfe.
Cheers,
Ralph
Lösung1: Warum gibts du den
am 23.06.2008 - 15:07 Uhr
Lösung1: Warum gibts du den Hersteller nicht einfach als Argument der View an?
Lösungs2:
Genauso wie du dynamisch Nodes erzeugen kannst, ist es natürlich auch möglich dynamisch Views zu erzeugen.
Nimm dazu z.B. eine vorhandene View und füge folgendes in ein Modul ein
<?php
function hook_views_pre_query(&$view) {
if ($view->name == 'test') {
$view->filter[] = array (
'tablename' => 'node_data_field_kategorie',
'field' => 'field_kategorie_value_like',
'operator' => '=',
'options' => '',
'value' => 'Wirtschaft',
);
}
?>
Damit kannste Felder dynamisch zur View hinzufügen
// Aber Lösung eins ist definitiv der bessere/einfachere Weg
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.deXING
hm immer noch nicht
am 23.06.2008 - 15:23 Uhr
hm immer noch nicht wirklich, warscheinlich fehlt mir der Durchblick.(zu warm)
Ziel ist es eine View zu erzeugen, analog zur GUI.
Ich möchte mir die Arbeit sparen xhundert views manuell zu erzeugen.
Ganz dynamisch wie in Lösung zwei ist mir nicht sicher genug.
Einfach nur ne view via script erzeugen, die dann im Views - Adminbereich auftaucht.
Cheers,
Ralph