Mit Rules und "Custom PHP" Ausgabe eines Nodes verändern
am 05.12.2009 - 17:35 Uhr in
Hallo Leute,
Da ich dazu leider bei Google nicht fündig geworden bin und ich das nicht in meinen anderen Thread schreiben wollte, weil es sich um ein etwas anderes Thema dreht, stelle ich hier mal eine weitere Frage:
Ist es möglich, mittels Rules und "Custom PHP Code" die Ausgabe eines Nodes sozusagen "temporär" zu ändern?
Ich hatte mir eine Regel erstellt, als "Auslöser" habe ich "Inhalt soll angezeigt werden" eingestellt. Dann noch als Bedingung den Inhaltstyp gewählt, um den es geht.
Als Aktion habe ich dann "Benutzerdefinierten PHP-Code" bzw. "Custom PHP" gewählt. Damit wollte ich jetzt die Ausgabe des Nodes ändern.
Sodass dort zum Beispiel nicht einfach der Inhalt (also der Node-Body) steht, sondern davor noch "Hallo User XYZ, deine IP ist ..." und danach erst der Node-Body kommt und unter dem Nodebody sollen noch andere Informationen erscheinen, die ich mir aus einer Datenbank-Tabelle hole.
Ich will diese Informationen aber nicht im Node-Body speichern, sondern jeweils bei der Anzeige des Inhalts einfügen, sodass je nachdem, welcher User sich den Node anschaut, andere Informationen erscheinen, die ich eben im PHP-Script festlege.
Leider habe ich keine Ahnung, wie ich das umsetzen kann :( Ich habe probeweise einfach mal "print $node->nid;" eingegeben, aber das wird dann ganz oben angezeigt, direkt unterhalb von meinem Admin Menu: Link
Wie gesagt, ich würde am liebsten damit die Ausgabe des Node-Body entsprechend verändern, je nachdem, wer die Seite besucht. Gespeichert werden sollen diese Daten jedoch nicht, der Node-Body soll in der Datenbank der gleiche bleiben. Aber bei der Anzeige des Inhalts soll eben mittels PHP auf den betrachtenden Nutzer eingegangen werden.
Kann mir jemand sagen ob und wie das geht? Denn ich weiß momentan leider nicht so recht, wie ich das umsetzen kann :(
mfg Exterior
PS: Das Beispiel mit "Hallo User XYZ" usw. war nur ein Beispiel, da können bzw. sollen andere Daten aus der Datenbank hin, es diente nur dazu, das Problem zu verdeutlichen.
- Anmelden oder Registrieren um Kommentare zu schreiben
Theming
am 05.12.2009 - 18:21 Uhr
Um einen Node anzuzeigen, wird die node.tpl.php in Deinem Theme verwendet (wenn die nicht da ist den default aus dem Node-Modul hinkopieren). Dort kann auch eine Datei namens node-<typ>.tpl.php legen, um eine spezielle Ausgabe für diesen Typ zu erzeugen (die Standard node.tpl.php muß dazu auch dort liegen!!). In diesen Dateien kannst Du in PHP mit global $user auf den User zugreifen und dementsprechend die Ausgabe wie gewünscht verändern. Am Inhalt des Nodes ändert das nichts.
Bste Grüße
Werner
........
am 05.12.2009 - 22:56 Uhr
Oh... natürlich... mein Güte, da bin ich so sehr damit beschäftigt, mir eine Lösung mittels eines Moduls zu suchen, dass ich nicht auf die simple Idee komme, den PHP-Code in die node.tpl.php zu schreiben -,-' Aber danke für den Denkanstoß, damit klappt das natürlich =)
Eine kleine Frage hätte ich noch:
Ich habe bei mir den Filter für Collapsable Text installiert.
Kann man es irgendwie einrichten, dass der Text, den man dynamisch per PHP ausgibt, in solch einer zusammenklappbaren Box erscheint?
Wenn ich z.B. diesen Code verwende:
<?php print $content;
print "[collapse title=Testfeld]";
print "Hallo Welt";
print "[/collapse]";?>
Dann steht eben unter jedem Node dieses Typs "[collapse title=Testfeld]Hallo Welt[/collapse]". Ich hätte aber lieber, dass das "Hallo Welt" in so einer Box erscheint. Geht das?
Edit: Sorry, das mit dem Collapsable Text hat sich gerade erledigt.
Dafür hätte ich eine andere Frage: Ich habe mitunter auch vor, für den dynamischen Text auf CCK-Felder im Node zurückzugreifen. Das ist ja soweit kein Problem. Aber wenn ich zum Beispiel ein einzeiliges Textfeld mit unendlich vielen Werten einfüge, dann kann der Autor ja beliebig oft auf "Wert hinzufügen" klicken. Wenn er damit zum Beispiel 5 Textfelder erstellt und mit Inhalt füllt, wie kann ich dann auf jedes einzelne dieser Felder zugreifen und den Inhalt auslesen? Bekommen die einen Namen mit fortlaufender Nummer oder wie müsste ich das ganze angehen?
Das gibt ein Array mit den
am 06.12.2009 - 18:05 Uhr
Das gibt ein Array mit den Werten. Habe das gerade in einem Theme durchexerziert. Der Code sieht dann so aus
$node->field_text3[$index]['value']
$index ist dann der Laufindex durch die Felder mit Startpunkt 0. text3 ist der Name der Textfeldes.
Beste Grüße
Werner
Hab das ganze mit Foreach()
am 06.12.2009 - 22:06 Uhr
Hab das ganze mit Foreach() ausgewertet =)
Noch was anderes: Ich bau in einer Funktion mittels der Form API ein Formular. Zu beginn dieser Funktion habe ich "global $user, $node;" geschrieben.
Habe dan einfach mal probehalber damit ein paar Radiobuttons erstellen wollen:
$options = array();
$options[] = t($user->uid);
$options[] = t($node->nid);
$form['access']['log'] = array(
'#type' => 'radios',
'#title' => t('Log'),
'#default_value' => variable_get('log', 0),
'#options' => $options,
'#description' => t('The log.'),
);
Eigentlich müsste das ja ein eine Radiobutton mit der User-ID als Text und einen mit der Node-ID geben.
Die User-ID steht auch da, aber anstelle der Node-ID steht da nur "Array" =( Weiß jemand, warum?
Wenn ich anstatt "$node->nid" arg(1) eingebe, funktioniert das ganze, aber $node->nid wäre wohl etwas zuverlässiger, oder? Weiß jemand abhilfe?
Warum arbeitest Du an der
am 06.12.2009 - 22:46 Uhr
Warum arbeitest Du an der Stelle mit der T-Funktion? UID und NID sind doch ganze Zahlen, da ist das Unsinn.
Beste Grüße
Werner
Die T-Funktion hatte ich nur
am 07.12.2009 - 00:00 Uhr
Die T-Funktion hatte ich nur vergessen, raus zu machen, die war vorher bei der Formular-Referenz mit drin.
Aber das ändert leider nichts daran, dass bei node->nid nur das Wort "Array" ausgegeben wird =(