Drupal 7 Installationsprofil - Content Type Formular hooken um Node zu erstellen
am 04.04.2011 - 19:43 Uhr in
Hi Leute!
Ich habe folgendes vor:
Ich möchte ein eigenes Installationsprofil erstellen und mich dort einharken um weitere Schritte hinzuzufügen.
Unter anderem möchte ich mir ein Formular anzeigen lassen in dem ich einen Node eines Content-Type erstellen kann.
Hintergrund, ich möchte die Stammdaten für die Website schon im Installationsprofil eintragen und dann später wie einen ganz normalen Node editieren können, falls was geändert werden muss.
Das ganze soll während der Installation passieren, damit man das nicht noch nachträglich nach der Installation machen muss.
Dazu hab ich mir in einer anderen D7-Installation einen Content-Type mit den dazugehörigen Feldern erstellt und mit 'Features' als Modul (abc_modul) exportiert.
Dieses Modul hab ich dann in der .info meines eigenen Profils hinzugefügt.
dependencies[] = abc_modul
In meiner .profile Datei habe ich folgendes hinzugefügt:
type = normal
<?php
function profilename_install_tasks(){
$tasks['abc_modul']['display_name'] = st('Abc Modul');
$tasks['abc_modul']['display'] = TRUE;
$tasks['abc_modul']['type'] = 'normal';
$tasks['abc_modul']['run'] = INSTALL_TASK_RUN_IF_NOT_COMPLETED;
return $tasks;
}
function abc_modul($install_state){
module_load_include('inc', 'node', 'node.pages');
$form = node_add('abc_modul');
return drupal_render($form);
}
?>
Ich bekomm jetzt im Installationsprofil einen neuen Schritt mit dem Namen "Abc Modul" angezeigt.
Dort sehe ich auch das Formular. Jedoch habe ich folgendes Problem:
Egal welchen Button ich klicke (Safe oder Preview), der Installationsvorgang springt zum nächsten Schritt weiter, ohne validierung und ohne den node zu speichern.
(Passiert auch wenn ich einen eigenen Button hinzufüge)
Schreibe ich das ganze folgendermaßen:
type = form (mit hook_form_FORM_ID_alter)
<?php
function profilename_install_tasks(){
$tasks['abc_modul']['display_name'] = st('Core data');
$tasks['abc_modul']['display'] = TRUE;
$tasks['abc_modul']['type'] = 'form';
$tasks['abc_modul']['run'] = INSTALL_TASK_RUN_IF_NOT_COMPLETED;
return $tasks;
}
function profilname_form_abc_modul_alter(&$form, &$form_state, $form_id){
module_load_include('inc', 'node', 'node.pages');
$form = node_add('abc_modul');
return $form;
}
?>
führt er die Validierung der Felder wie gewollt durch, jedoch wenn ich dann auf save klicke lande ich nicht im nächsten Installationsschritt sonder auf der Seite,
auf der ich angezeigt bekomme, das ich den Node erfolgreich erstellt habe (also 'node/' . $node->nid;
- findet man hier: node.pages.inc - function node_form_submit)
Rein theoretisch müsste es ja reichen den $form_state['redirect'] = 'node/' . $node->nid;
auf den nächsten Installationsschritt umzubiegen.
Aber wie?!
Ich hoffe man kann nachvollziehn was ich Vorhabe?! ^^
Hat jemand schonmal mit einem ähnlichen Problem zu tun gehabt, bzw. hat jemand einen Lösungsansatz?
Gruß
- Anmelden oder Registrieren um Kommentare zu schreiben
Schau dir mal das folgende
am 07.04.2011 - 20:40 Uhr
Schau dir mal das folgende Posting an:
http://www.group42.ca/creating_and_updating_nodes_programmatically_in_dr...
Dort wird dir erklärt, wie du programmatisch einen neuen Node in Drupal anlegen kannst. Dies sollte dir bei deinem Problem auf jeden Fall weiterhelfen..
SteffenR