[gelöst] Mit Rules Feldinhalte verändern bzw. Strings verkürzen
am 08.02.2012 - 14:38 Uhr in
Ich bin begeisterter Nutzer von Rules, kenne mich aber leider noch nicht so gut aus mit diesem Modul. Hier mein Problem:
Ich möchte beim Speichern eines neuen Nodes prüfen, ob ein Feld ("field_kurzbeschreibung") leer ist, und wenn das der Fall ist, soll in dieses Feld die gekürzte Version von einem anderen Feld ("body") gespeichert werden. Das Kopieren von einem ins andere Feld klappt auch schon soweit ganz gut, doch erhalte ich eine Fehlermeldung, sobald der Inhalt von "body" zu lang ist - ich möchte ja auch eine gekürzte Version. Zum Kürzen des Inhaltes scheint aber keine passende Aktion zu existieren. PHP-Code klappt auch nicht. Weiß jemand Rat?
Viele Grüße,
Michael
- Anmelden oder Registrieren um Kommentare zu schreiben
Jippie, ich hab es selbst
am 09.02.2012 - 14:12 Uhr
Jippie, ich hab es selbst lösen können. PHP-Code klappt doch bei Rules, wenn man vorher das Core Modul "PHP Filter" aktiviert. Hier mein Code für die Kürzung des Textes:
<?php
// Voraussetzungen: Aktion vorher = eine Variable "bodytext" vom Typ "Text" hinzufügen mit dem Wert aus node:body:value
$maxlength = 200; // Länge
$wrapper = "\0"; // Ein Trennzeichen für meine Kürzungsfunktion
// Kürzung des Bodytextes
$wordwrap = wordwrap($bodytext, $maxlength, $wrapper); //1. Trennzeichen einfügen, ohne Wörter zu teilen
$description = substr($wordwrap, 0, strpos($wordwrap, $wrapper)); // 2. Anfang bis zum Wort nach dem Trennzeichen rausschneiden
$description = trim( preg_replace( '#\s+#' , ' ' , $description ) ); // 3. mehrfache Leerzeichen entfernen
return $description; // 4. Rückgabe des gekürzten Textes
?>
So kann man alle beliebigen Feldinhalte ohne komplizierte Actions in eigene Modulen zu erstellen. Das ist nämlich ziemlich kompliziert und schlecht dokumentiert.