Nodes automatisiert anlegen
am 06.11.2008 - 13:05 Uhr in
Hi,
ich würde gerne Nodes automatisiert, idealerweise per bash-script anlegen. Mir ist klar dass ich mit
mysql -u user -ppassword -D DB -e $sqlstring
direkt in der DB rumwurschteln kann, allerdings fürchte ich hierbei etwas um die Konsistenz meiner DB. Gibt's da irgendwo schon ne Anleitung/Lösung für oder gar nen Modul?
danke, Markus
- Anmelden oder Registrieren um Kommentare zu schreiben

Selber schreiben
am 06.11.2008 - 15:28 Uhr
Von einem direkten Eingriff in die Datenbank würde ich abraten, obwohl, wenn Du genau analysiert hast, was Drupal anstellt, ist das technisch möglich.
Schreibe ein Modul, definiere dort Deinen Node (welche Felder der hat.....). Für eigen Felder die entsprechenden Tabellen anlegen und verwalten, sprich die entsprechenden Funktionen im Modul bereitstellen.
Du kannst dann in einer eigenen Funktion mit mit node_prepare einen leeren Node anlegen, per Programm mit Information füllen und dann mit node_save ablegen.
Die Dokumentation für die einzelnen Funktionen kannst Du unter http://api.drupal.org/ nachlesen.
Gruß
Werner
(Workflow und) einige Zeilen PHP Code
am 06.11.2008 - 16:29 Uhr
1. eine Workflow ng Rule erstellen.
Diese ruft eine PHP Funktion auf.
Um dies tun zu koennen wird in Workflow PHP ausgefuehrt. Dabei wird zur Rule eine Condition (add a condition) als PHP erstellt. In dieser Condition wird mit PHP Code die Funktion aufgerufen welche die "automatisierte" Node erstellt. Das schaut so aus:
<?phpcreate_node($node);
?>
Als Funktionsparameter wird das Nodeobject der Node uebergeben welche die Workflowaktion ausloest. Verschiedene Parameter dieses Nodeobjectes werden beim Erstellen der Node verwendet.
2. Die PHP Funktion erstellen. Beispielsweise in einem kleinen Modul.
Durch das Erstellen einer Node wird das Erstellen einer weiteren Node ausgeloest.
Schneller Code einer solchen Funktion um Nodes zu ertellen:
<?php
function create_node($base_node) {
$node = new StdClass();
$node->format = 1;
$node->language = 'de';
$node->uid = $base_node->uid;
$node->type = 'ein_existierender_node-type';
$node->status = 1;
$node->promote = 0;
$node->title = 'foobar';
$node->teaser = 'Hier der Teasertext';
$node->body = 'Hier der Bodytext';
// Sets taxonomy relation terms
$node->taxonomy = $base_node->taxonomy;
// Save the new container node
node_save($node);
//watchdog('New node', $node->nid . ' | ' . $node->title);
}
?>
Hierbei wird der User der die Workflowaktion ausloest ebenso uebernommen wie die Taxonomy. Mit
$node->taxonomykann man spielen um der "automatisierten" Node spezielle eigene Terms mitzugeben.Mit
$node->teaserund$node->bodymuesste man noch spielen. An dieser Stelle lassen sich auch beliebige Felder Erstellen die die "automatisierte" Node enthalten soll.Um die Funktion zum Erstellen der Node aufzurufen muss man nicht Workflow ng verwenden. Der Funktionsaufruf zum Erstellen der "automatisierten" Node kann an beliebigen anderen Stellen erfolgen.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.