PHP ( Halbgott ) Frage - noch ne Zusatzfrage
am 20.03.2009 - 17:17 Uhr in
Hmmm ... wenns im eigentlichen Thread nicht klappt ... versuche ich es mal so rum ...
In einer mit RULES erstellten Regel bewerkstellige ich das Löschen von hochgeladenen Bildern mit der Anweisung ( Quelle: stBorchert )
if (isset($node->field_anrissbild[0]['filepath'])) {
file_delete($node->field_anrissbild[0]['filepath']);
}
Dabei wird mir das hochgeladene Bild aus allen in Frage kommenden Verzeichnissen gelöscht. In meinem Fall im Verzeichnis sites/default/files/anrissbilder UND ausserdem im durch IMAGECACHE angelegten Verzeichnis sites/default/files/imagecache/anrissbild_teaser/anrissbilder.
Ich bin leider PHP - Nichtskönner und habe keinen blassen Schimmer, wie der obige PHP-Befehl aussehen müsste, damit explizit die Datei im Verzeichnis sites/default/files/anrissbilder gelöscht wird. Die Bilddatei im Verzeichnis sites/default/files/imagecache/anrissbild_teaser/anrissbilder MUSS vorhanden bleiben.
Bitte Ihr PHP Halbgötter :-) Verratet mir doch wie der obige PHP Schnippsel aussehen müsste ....
- Anmelden oder Registrieren um Kommentare zu schreiben
php
am 20.03.2009 - 23:27 Uhr
Moin!
Ich fühl mich mal halbwegs angesprochen :-)
<?php
if (isset($node->field_anrissbild[0]['filepath'])
&& (strpos($node->field_anrissbild[0]['filepath'],
'sites/default/files/anrissbilder') > 0)) {
file_delete($node->field_anrissbild[0]['filepath']);
}
?>
So?
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hi ( mein ) Halbgott :-)
am 21.03.2009 - 14:26 Uhr
Grüß Dich Stefan,
erstmal vielen Dank für Deine Hilfe! Ich habe gestern nach stundenlangem Probieren noch auf einen eigenen Pfad für das Imagefield verzichtet, dann hat doch noch alles geklappt - DANKE!!!!!
------------------------------------------
NACHTRAG
@Stefan
Sorry, wenn ich langsam nervig werde, aber ich habe doch noch ein weiteres Detailproblem.
Wenn ich die IMAGECACHE Integration benutze, dann habe ich ja nicht allzuviele Einstellungsmöglichkeiten. Ich habe da z.B.:
Aktion: Imagecache - Execute Preset
- Feld: field_beitragbild
- Select the name of the preset to execute: beitragbild_teaser
- Reihenfolge: 0
Das klappt ja auch sehr gut, wenn man ein einzelnes Bild hat. Nur ich habe bei meinem Imagefield drei mögliche Bildwerte erlaubt. Und wenn ich jetzt di REGEL "IMAGECACHE PRESET" ausführen lasse, dann macht mir das Preset leider nur für den ersten der drei Werte meine Presets. siehe: http://www.steeldart.org/dart/drei-tiere-mit-bildern-und-anrissbild
Ich könnte jetzt natürlich bei mehreren Beitragsbildern mehrere verschiedene Imagefelder und die dazugehörigen Imagecache Presets und die Regeln ...
Aber wenn ich beispielsweise mal 12 Bilder erlaube, dann ufert das ganz schön aus ... Hast Du da noch ne elegantere Lösung für mich, mit "einem Imagefield und mehreren erlaubten Werten" für die zu erstellenden Presets?
-----------------------------------------
Wegen dem neuen Code ... ich werde ihn gut aufbewahren und demnächst mal antesten ... Derzeit muss ich erstmal meine ganzen Regeln ohne eigenes Verzeichnis "stricken" ... Unter anderem brauchts ja auch noch ne Regel für Änderungen. Da bin ich gerade am suchen, warum das alles reibungslos klappt, nur nicht bei der erstellen Imagecache-Datei ...
Aber diese RULES Integration von IMAGECACHE von Dir ist Spitzenklasse! Hut ab. Bei einem durchschnittlichen 2MB Foto eines Users spart man mit diesen Regeln 90% des ansonsten benötigten Webspaces ... das macht sich bei einigen hundert Usern, die Bilder uploaden echt bemerkbar!
Schätze mal, dass ich da demnächst mal ein kleines Tutorial dazu schreiben muss ...
-------------------------------------------------------------------------------
Drupal ist das "Coolste", was mir in 10 Jahren Webworking untergekommen ist!
Meine persönliche Drupal Spielwiese
Drupal 7 Screencasts in deutsch!
mehrfache Bilder
am 21.03.2009 - 15:14 Uhr
Moin!
Das Skript (also die Rules-Integration) ist für eine Datei ausgelegt. Es müsste also umgeschrieben werden, so dass es auch mit mehrfachen Werten im image-Feld klarkommt...
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Schade, hatte ich fast
am 21.03.2009 - 19:29 Uhr
Schade,
hatte ich fast befürchtet. Die "Löschungen" liesen sich ja relativ einfach mit "field_anrissbild[0]['filepath']","field_anrissbild[1]['filepath']","field_anrissbild[2]['filepath']" ... usw. ansprechen. Es klappt also leider nicht, wenn es mehrere Bilddateien in einem Node gibt :-(
... falls Du die Integration mal abänderst, dann würde ich mich sehr freuen, davon zu erfahren! Ich würde das gerne einsetzen. An sich ist es nämlich echt genial!
Nochmal DANKE!!!
--------------------------------
Hat vielleicht noch jemand ne andere Lösung parat, wie man das Verzeichnis sites/default/files
in regelmäßigen Abständen ( vielleicht per Cron ) von .png, jpg und .gif Dateien "säubern" könnte?
Drupal 7 Screencasts in deutsch!
Thoor schrieb Hat
am 22.03.2009 - 00:25 Uhr
Hat vielleicht noch jemand ne andere Lösung parat, wie man das Verzeichnis sites/default/files
in regelmäßigen Abständen ( vielleicht per Cron ) von .png, jpg und .gif Dateien "säubern" könnte?
Ist das noch aktuell?
Also ich hoffe ich setze mich jetzt nicht in die Nesseln und versteh deine Frage, aber als PHP Laie würde ich es so machen:
<?php
$folder = opendir('files');
while($file = readdir($folder)){
$endung = substr($file, -4);
if ($endung == ".png" or $endung == ".jpg" or $endung == ".gif") {
unlink('files/'.$file);
}
}
closedir($folder);
?>
Natürlich nur das Verzeichnis noch anpassen und wenn man das dann per cron aufruft, müsste das laufen oder?
Gruß
Hi ... prima, daß sich noch
am 22.03.2009 - 10:14 Uhr
Hi ... prima, daß sich noch jemand einklinkt.
Also erreicht werden sollte, daß die upgeloadeten Originalbilder aus einem Imagefield auf dem Server gelöscht werden, nachdem entsprechende Imagecache Presets vorhanden sind. Ich habe jetzt zwei Tage mit der RULES Integration für Imagecache "probiert" ... Allerdings klappt es leider ( noch nicht ), wenn man mehr als eine Bilddatei im Imagefield hat.
Wie schon erwähnt ... Sehr schade! Mit einzelnen Dateien und RULES klappt es aber gut.
Ich habe deshalb mittlerweile in einem Inhaltstyp ( Soll ein Multiuser Dart Blog werden ) zwei Bildtypen per Imagefield angelegt. Beispielseite: http://www.steeldart.org/dart/testbeitrag-mit-tierbild Ein Feld "Field_startbild" das ich mit Imagecache als Teaser- und Artikelbild anzeige. Presets ( startbild_teaser & startbild_artikel ) Hier habe ich die Integration von stBorchert genutzt und es klappt recht gut mit dem automatischen Löschen der Ursprungsdatei. Für dieses Bild können potentielle User dann Ihre MB-Riesenfotos hochladen, aber mich kümmert es nicht, da eben die Originaldateien beim speichern und Ändern per RULES gelöscht werden.
Außerdem will ich Minigalerien ( Weitere Bilder zum Beitrag )erlauben bei den Beiträgen, mit erstmal bis zu drei Bildern. Da ich die RULES Integration hier aufgrund der Restriktion auf eine Datei ( noch ) nicht nutzen kann, um Presets zu erstellen, habe ich mir folgenden Weg gedacht: Es könnte doch eigentlich eine Regel angelegt werden, die bei einer Änderung von Inhalten alle bisherigen Originaldateien im entsprechenden Verzeichnis löscht. So wären auch nicht mehr zuviele Dateien auf dem Server, die unnötig Geld kosten können.
Damit wären alle Imagecache Presets erstellt, die Bilddateien würden korrekt angezeigt und nach nur einer erfolgten Änderung wäre der Webspace vom Ballast bereinigt. Was haltet Ihr von der Lösung?
Würde ich gerne ausprobieren, aber leider bin ich wie schon mehrmals erwähnt PHP-Depp. Deshalb noch eine Frage an
@einfachfragen
In meinem Beispiel möchte ich bei Änderungen alle Bilder aus dem Verzeichnis mit dem Pfad sites/default/files/bilder löschen. Wäre dann Dein Code folgendermaßen richtig?
$folder = opendir('sites/default/files/bilder');
while($file = readdir($folder)){
$endung = substr($file, -4);
if ($endung == ".png" or $endung == ".jpg" or $endung == ".gif") {
unlink('files/'.$file);
}
}
closedir($folder);
Würde ich dann mal ausprobieren, wenn Du meinst, daß das dann klappt :-)
-------------------------------------------------------------------------------
Drupal ist das "Coolste", was mir in 10 Jahren Webworking untergekommen ist!
Meine persönliche Drupal Spielwiese
Drupal 7 Screencasts in deutsch!
Hi. Sofern du die Datei in
am 22.03.2009 - 19:15 Uhr
Hi.
Sofern du die Datei in die root legst sollte es klappen. Aber "vorsicht" mach ein Backup, da wird ohne Rückfrage gelöscht.
Irgendwie habe ich aber sonst noch nicht so ganz gepeilt was du noch möchtest, hehe.
Gruß