RULES mit Imagecache - Löschregeln für Original Dateien per PHP klappen nicht
am 07.03.2009 - 13:10 Uhr in
Nachdem ich vor einigen Tagen das Tutorial zu Bildgößen geschrieben habe, hat stBorchert ja auf die Möglichkeit hingewiesen, daß man mit seiner vorgestellten Erweiterung die Ursprungsbilder löschen könnte. Finde ich eine sehr gute Idee, da einige wenige hochgeladenen Bilder ja einen ganzen Webspaceaccount ausnutzen können.
Ich habe mich also mal an die Umsetzung gewagt. Hier mein aktuelles Vorgehen ( STAND 20.03.2009 ):
RULES installiert
Die RULES Integration ( http://drupal.org/files/issues/376531_imagecache.rules_.inc_.txt ) als imagecache.rules.inc in den Modulordner sites\all\modules\imagecache eingefügt
Folgende Regel erstellt: Anrissbilder - Originale löschen
Neue Regel: Nach dem speichern von neuem Inhalt
Bedingung: keine
2 Aktionen hinzugefügt:
1. Aktion: Imagecache - Execute Preset
- Feld: field_anrissbild
- Select the name of the preset to execute: anrissbild_teaser
- Reihenfolge: 0
2. Aktion: Benutzerdefinierten PHP Code ausführen
- Code: if (isset($node->field_anrissbild[0]['filepath'])) {
file_delete($node->field_anrissbild[0]['filepath']);
}
- Reihenfolge: 5 ( auch -5 versucht ... keine Änderung )
------------------------
Tja ... nur ich habe schon alle möglichen Kombinationen versucht, es klappt keine so richtig. Mit der oben beschriebenen Regel wird mir das Bild kpl. gelöscht. Aus den Pfaden sites/default/files/anrissbilder und auch aus sites/default/files/imagecache/anrissbild_teaser/anrissbilder
Da es ja eigentlich klappt, wird das wohl wieder ein leidiges PHP Problem sein, dass ich leider nicht kann. Jemand nen Tipp, wie ich die PHP Aktion anzupassen habe, damit mein Vorhaben klappt? Ich möchte letztendlich erreichen, daß die upgeloadeten Bilder unter sites/default/files/anrissbilder gelöscht werden und nur noch die Bilder unter sites/default/files/imagecache/anrissbild_teaser/anrissbilder nach dem Eintragen erhalten bleiben.
Nötige Pfade gibts einzusehen unter: http://www.steeldart.org/dart/pferd
Ich wäre jedem verbunden, der mir bei dem Problem behilflich sein könnte! Danke
- Anmelden oder Registrieren um Kommentare zu schreiben
Rules
am 07.03.2009 - 13:39 Uhr
Moin!
Kann sein, dass ich jetzt etwas faösch verstehe. Die Originalbilder werden auch mit meiner Rules-Integration weiterhin im Standardordner gespeichert. Ich lösch die dann nur automatisch mit einer weiteren Regel.
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hinfällig - siehe ganz oben
am 20.03.2009 - 15:29 Uhr
Hinfällig - siehe ganz oben die Thema Beschreibung!
Drupal 7 Screencasts in deutsch!
PHP als Aktion bei Rules
am 07.03.2009 - 14:35 Uhr
Hmm leide rnichts mehr gehört, wegen meiner erstellten Regel oben, aber ich habe es jetzt mal mit folgendem PHP Code als weitere Aktion bei meiner Regel versucht:
$ordnername = "sites/default/files/";
if (is_dir($ordnername)) {
if ($dh = opendir($ordnername)) {
while (($file = readdir($dh)) !== false) {
if ($file!="." AND $file !="..") {
unlink("sites/default/files/$file");
}
}
closedir($dh);
}
}
Dieser Code löscht mir zwar die Einzeldateien aus meinem Verzeichnis, aber es gibt dann diverse Fehlermeldungen wegen der anderen Ordner im Verzeichnis.
Kann mir jemand nen Tip geben, wie die PHP Anweisung auszusehen hat, damit die Dateien unter sites /default/files ohne Fehler gelöscht werden? Ich bin leider nur rudimentär in Sachen PHP bewandert ...
Drupal 7 Screencasts in deutsch!
rules + imagecache
am 09.03.2009 - 09:17 Uhr
Moin!
Jetzt musste ich doch selbst erstmal nachschauen, wie ich das gemacht hatte.
Also, ich hatte mir für imagecache zwei Presets angelegt, "display" und "thumb". Diese Presets legen ihre erzeugten Bilder dann in /sites/default/files/imagecache/display bzw. /sites/default/files/imagecache/thumb ab.
Dann habe ich eine neue Regel (unter "Triggered Rules") angelegt:
* Event: Content is going to be saved
* Actions
- Execute preset 'display'
o Arguments: "Content: Saved content"
o Preset: display
- Execute preset 'thumb'
o Arguments: "Content: Saved content"
o Preset: thumb
Tja und die Löschen-Regel finde ich gerade nicht bei den Installationen auf dem Rechner hier. Da muss ich heute Abend nochmal zu Hause schauen.
Wenn ich mich richtig erinnere, hatte ich einfach aus
$node
den entsprechenden Eintrag mit dem Pfad zum hochgeladenen Bild herausgesucht und dann einunlink()
auf diesen Pfad gemacht.Nichts Wildes also.
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
stBorchert schrieb Wenn ich
am 20.03.2009 - 15:30 Uhr
Hinfällig - siehe ganz oben die Thema Beschreibung!
Drupal 7 Screencasts in deutsch!
opendir
am 09.03.2009 - 10:53 Uhr
Ah, moment. Jetzt seh ich das erst. Was machst Du denn da mit
opendir()
?Das benötigst Du doch überhaupt nicht. Lass Dir mal spassenshalber in einer neuen Aktion ("execute custom php") nach den Bildverkleinerungsaktionen einfach den Inhalt von
$node
ausgeben.<?php
drupal_set_message('<pre>'. print_r($node, 1) .'</pre>');
?>
Dann siehst Du den Pfad der Originaldatei und kannst diese dann über das Node-Objekt mit
unlink()
löschen.In etwa so:
<?php
if ($node['field_myimage']['path']) {
unlink($node['field_myimage']['path']);
}}
?>
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
file_delete
am 10.03.2009 - 09:37 Uhr
Moin!
Hab jetzt nochmal geschaut:
<?php
if (isset($node->field_picture[0]['filepath'])) {
file_delete($node->field_picture[0]['filepath']);
}
?>
Das als neue Regel mit "execute custom PHP code" und schon wird das Original gelöscht.
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hi Stefan, Vielen Dank ....
am 10.03.2009 - 10:30 Uhr
Hi Stefan,
Vielen Dank .... werde ich dann mal in Kürze ausprobieren und dann hoffentlich ne Erfolgsmeldung verkünden :-)
-------------------------------------
Öfter mal was neues ... warum nicht mal DRUPAL :-) Meinen "Drupal Kampf" als Anfänger schildere ich mal unter http://www.thoor.de
Drupal 7 Screencasts in deutsch!
Klappt leider wieder mal nicht ...
am 20.03.2009 - 15:44 Uhr
... klappt ( wie zu erwarten ) natürlich nicht. Ich habe ein Imagefield: field_anrissbild
Pfade:
Pfad für die Uplodas: sites/default/files/anrissbilder
Pfad für Imagecache: sites/default/files/imagecache/anrissbild_teaser/anrissbilder
Folgende Regeln habe ich ausprobiert, um die Originale unter sites/default/files/anrissbilder gelöscht zu bekommen:
if (isset($node->field_anrissbild[0]['filepath'])) {
file_delete($node->field_anrissbild[0]['filepath']); }
Ergebnis - löscht alles
if (isset($node->field_anrissbild[0]['sites/default/files/anrissbilder'])) {
file_delete($node->field_anrissbild[0]['sites/default/files/anrissbilder']);}
Ergebnis - löscht nichts
if (isset($node->field_anrissbild[0]['sites/default/files/anrissbilder/'])) {
file_delete($node->field_anrissbild[0]['sites/default/files/anrissbilder/']);}
Ergebnis - löscht ebenfalls nichts
Es wird doch ( ausser stBorchert :-)) noch jemanden hier geben, der mir den richtigen PHP Befehl verraten können - oder?
Drupal 7 Screencasts in deutsch!