I used to use the following snippet for random images at my revo installation which worked very well:
<?php
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Snippet-Name: randomImage
//
// Funktion: Durchsucht Verzeichnisse nach Bildern
// und gibt eines davon als Zufallsbild zurück
//
// Parameter:
// ----------
// &folder Verzeichnis der Bilder;
// Standardwert: assets/images/
//
// &file_types Dateiendung(en), für die Dateien/Bilder, die angezeigt werden sollen.
// Standardwert: jpg,gif,png
// Optionen: Kommaseparierte liste von Dateiendungen
//
// &defaultImage Pfad und Name des alternativen Bildes;
// Standardwert: assets/images/testbild.jpg
//
// &orientation Ausrichtung der Bilder, welche angezeigt werden sollen;
// Standardwert: leer (= alle Bilder)
// Optionen: landscape, portrait
//
// &recursive gibt an ob Unterverzeichnisse einbezogen werden sollen;
// Standardwert: false
// Optionen: true, false
//
// &depth Anzahl der Verzeichnisebenen;
// Standardwert: false (= alle Unterverzeichnisse)
//
// &maxfilesize maximal erlaubte Größe der gefundenen Dateien in kB.
// Standardwert: false
// Optionen: Ganzzahl
//
// &minwidth minimal erlaubte Breite in Pixeln
// Standardwert: false
// Optionen: Ganzzahl
//
// &minheight minimal erlaubte Höhe in Pixeln
// Standardwert: false
// Optionen: Ganzzahl
//
// &maxwidth maximal erlaubte Breite in Pixeln
// Standardwert: false
// Optionen: Ganzzahl
//
// &maxheight maximal erlaubte Höhe in Pixeln
// Standardwert: false
// Optionen: Ganzzahl
//
// &list_files macht eine Auflistung der gefundenen Dateien (mit Größenangaben).
// Dient nur für Testzwecke
// Standardwert: nicht gesetzt
// Optionen: Text oder Zahl
//
// $tpl Name eine Template Chunks für die Ausgabe.
// Mögliche Platzhalter:
// [+src+] Dateipfad des Bildes
// [+filename+] Dateiname
// [+width+] Breite
// [+height+] Höhe
//
// Beispiel-Chunk:
// <img src="[+src+]" width="[+width+]" height="[+height+]" alt="[+filename+]" />
//
//
// Anwendungsbeispiele:
// [!randomImage?folder=`assets/images/` &orientation=`landscape` &recursive=`true` &depth=`2` !]
// [!randomImage?
// &folder=`assets/images/fotos`
// &defaultImage=`assets/images/default.jpg`
// &maxfilesize=`200`
// &minwidth=`150`
// &tpl=`tplRandomImage`
// !]
//
//
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Optionen für den Parameter &orientation
$orientation_opt = array('portrait','landscape');
// Verzeichnis in dem die Bilder liegen
$folder = strlen($folder) ? trim($folder,"/*")."/" : 'assets/images/';
// Dateitypen, nach denen gesucht werden soll
$file_types = strlen($file_types) ? $file_types : "jpg,gif,png";
// Alternatives Bild
$defaultImage = strlen($defaultImage) ? $defaultImage : 'assets/images/testbild.jpg';
// Ausrichtung: portrait = Hochformat, landscape = Querformat, leer oder andere Angabe = beide Ausrichtungen
$orientation = strlen($orientation) && in_array(strtolower($orientation), $orientation_opt) ? strtolower($orientation) : '';
// Sollen Unterverzeichnisse durchsucht werden?
$recursive = strlen($recursive) && in_array(strtolower($recursive), array("true","1")) ? true : false;
// Verzeichnistiefe
$depth = strlen($depth) && (intval(trim($depth)) == trim($depth)) ? intval(trim($depth)) : false;
// Größenlimit in kB
$maxfilesize = strlen($maxfilesize) && (intval(trim($maxfilesize)) == trim($maxfilesize)) ? intval(trim($maxfilesize))*1024 : false;
// Minimale und maximale Breite und Höhe der Bilder
$minwidth = strlen($minwidth) && (intval(trim($minwidth)) == trim($minwidth)) ? intval(trim($minwidth)) : false;
$minheight = strlen($minheight) && (intval(trim($minheight)) == trim($minheight)) ? intval(trim($minheight)) : false;
$maxwidth = strlen($maxwidth) && (intval(trim($maxwidth)) == trim($maxwidth)) ? intval(trim($maxwidth)) : false;
$maxheight = strlen($maxheight) && (intval(trim($maxheight)) == trim($maxheight)) ? intval(trim($maxheight)) : false;
// Template
if (strlen($tpl)) {
$tplChunk = $modx->getChunk($tpl);
if ($tplChunk) $tpl = $tplChunk;
}
$images = array();
if (!function_exists('dir_rekursiv')) {
function dir_rekursiv(&$images, $folder, $file_types = '', $recurs = false, $depth = false, $maxfilesize = false) {
if (!strlen($folder)) return;
$folder = trim($folder, "/*")."/";
// Regulärer Ausdruck für die Dateityp-Erkennung
$ext = strlen($file_types) ? explode(",",strtolower($file_types)) : ".+";
$ext = "/".(is_array($ext) ? "(".implode("|",$ext).")" : $ext)."/";
if (is_dir(MODX_BASE_PATH.$folder)) {
$handle = opendir(MODX_BASE_PATH.$folder);
while ($file = readdir($handle)) {
if (!in_array($file, array(".",".."))) {
// Wenn Verzeichniseintrag ein Verzeichnis ist
if ( is_dir(MODX_BASE_PATH.$folder.$file) ) {
// Sollen Unterverzechnisse durchsucht werden?
if ( $recurs && (($depth === false) || ($depth > 0)) )
// Erneuter Funktionsaufruf, um das aktuelle Verzeichnis auszulesen
$images = array_merge($images, dir_rekursiv($images, $folder.$file, $file_types, $recurs, ($depth > 0 ? $depth-1 : false), $maxfilesize));
} else {
// Wenn Verzeichnis-Eintrag eine Datei ist, diese ausgeben
$file_type = strtolower(strrchr($file, "."));
// Dateityp überprüfen
$is_image = preg_match($ext, $file_type);
// Leere, zu große und Thumbnail-Dateien herausfiltern
$filesize = filesize(MODX_BASE_PATH.$folder.$file);
if ( $filesize && $is_image && !strpos($file,'thumb_') &&
(($maxfilesize === false) || ($maxfilesize && ($filesize < $maxfilesize))) )
$images[] = $folder.$file;
}
}
}
closedir($handle);
} else return "Folder ".MODX_BASE_PATH.$folder." not found!";
return $images;
}
}
$images = dir_rekursiv($images, $folder, $file_types, $recursive, $depth, $maxfilesize);
if (!is_array($images)) return $images;
// Herausfiltern von doppelten Einträgen
$images = array_unique($images);
if (!count($images)) return $defaultImage;
// Ausrichtung prüfen
if (strlen($orientation)) {
// Bilderliste nach Ausrichtung filtern
foreach ($images as $i => $img) {
$img = MODX_BASE_PATH.$img;
if (file_exists($img)) {
list($width, $height) = getimagesize($img);
if ( ((($orientation === $orientation_opt[1]) && ($width < $height)) ||
(($orientation === $orientation_opt[0]) && ($width > $height))) ||
($minwidth && ($width < $minwidth)) || ($minheight && ($height < $minheight)) &&
($maxwidth && ($width > $maxwidth)) || ($maxheight && ($height > $maxheight)) ) {
unset($images[$i]);
}
} else return "File \"{$img}\" not found!";
}
}
// Liste neu sortieren
sort($images);
reset($images);
if (!count($images)) return $defaultImage;
//Zum Testen: Listet alle gefundenen Bilder
if (strlen($list_files)) {
echo "<ul>";
foreach ($images as $img) {
list($width, $height) = getimagesize(MODX_BASE_PATH.$img);
echo "<li>{$img} ({$width}×{$height}px | ".round(filesize(MODX_BASE_PATH.$img)/1024, 2)." kB)</li>";
}
echo "</ul>";
}
// Zufallszahl ermitteln
$num = (int) rand(0, count($images)-1);
$output = $images[$num];
// Platzhalter im Template-Chunk ersetzen
if (strlen($tpl)) {
list($width, $height) = getimagesize(MODX_BASE_PATH.$output);
$ph = array();
$ph['[+src+]'] = $output;
$ph['[+filename+]'] = basename($output);
$ph['[+width+]'] = $width;
$ph['[+height+]'] = $height;
$output = str_replace(array_keys($ph), array_values($ph), $tpl);
}
return $output;
My revo installation is a mess after upgrading to 2.2.1 because the icons aren't showing up in the backend, which makes the configuratioon quite difficult. As nobody knows a solution for the missing icons I decided to make a clean install of Revo and to import all content. I'm testing local.
Everything works well except the random images. I imported the chunks like the following via database import:
<img src="[[!ZufallsbildLokal? &folder=`assets/images/catering`]]" />
and added the snippet.
Everything's like in the working installation but the links are broken and looking like this:
[20:55:53.199] GET http://localhost/modx/%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20file_types%20in%20%3Cb%3E/opt/lampp/htdocs/modx/core/cache/includes/elements/modsnippet/2.include.cache.php%3C/b%3E%20on%20line%20%3Cb%3E92%3C/b%3E%3Cbr%20/%3E%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20defaultImage%20in%20%3Cb%3E/opt/lampp/htdocs/modx/core/cache/includes/elements/modsnippet/2.include.cache.php%3C/b%3E%20on%20line%20%3Cb%3E95%3C/b%3E%3Cbr%20/%3E%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20orientation%20in%20%3Cb%3E/opt/lampp/htdocs/modx/core/cache/includes/elements/modsnippet/2.include.cache.php%3C/b%3E%20on%20line%20%3Cb%3E98%3C/b%3E%3Cbr%20/%3E%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20recursive%20in%20%3Cb%3E/opt/lampp/htdocs/modx/core/cache/includes/elements/modsnippet/2.include.cache.php%3C/b%3E%20on%20line%20%3Cb%3E101%3C/b%3E%3Cbr%20/%3E%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20depth%20in%20%3Cb%3E/opt/lampp/htdocs/modx/core/cache/includes/elements/modsnippet/2.include.cache.php%3C/b%3E%20on%20line%20%3Cb%3E104%3C/b%3E%3Cbr%20/%3E%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20maxfilesize%20in%20%3Cb%3E/opt/lampp/htdocs/modx/core/cache/includes/elements/modsnippet/2.include.cache.php%3C/b%3E%20on%20line%20%3Cb%3E107%3C/b%3E%3Cbr%20/%3E%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20minwidth%20in%20%3Cb%3E/opt/lampp/htdocs/modx/core/cache/includes/elements/modsnippet/2.include.cache.php%3C/b%3E%20on%20line%20%3Cb%3E110%3C/b%3E%3Cbr%20/%3E%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20minheight%20in%20%3Cb%3E/opt/lampp/htdocs/modx/core/cache/includes/elements/modsnippet/2.include.cache.php%3C/b%3E%20on%20line%20%3Cb%3E111%3C/b%3E%3Cbr%20/%3E%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20maxwidth%20in%20%3Cb%3E/opt/lampp/htdocs/modx/core/cache/includes/elements/modsnippet/2.include.cache.php%3C/b%3E%20on%20line%20%3Cb%3E112%3C/b%3E%3Cbr%20/%3E%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20maxheight%20in%20%3Cb%3E/opt/lampp/htdocs/modx/core/cache/includes/elements/modsnippet/2.include.cache.php%3C/b%3E%20on%20line%20%3Cb%3E113%3C/b%3E%3Cbr%20/%3E%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20tpl%20in%20%3Cb%3E/opt/lampp/htdocs/modx/core/cache/includes/elements/modsnippet/2.include.cache.php%3C/b%3E%20on%20line%20%3Cb%3E116%3C/b%3E%3Cbr%20/%3E%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20list_files%20in%20%3Cb%3E/opt/lampp/htdocs/modx/core/cache/includes/elements/modsnippet/2.include.cache.php%3C/b%3E%20on%20line%20%3Cb%3E189%3C/b%3E%3Cbr%20/%3E%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20tpl%20in%20%3Cb%3E/opt/lampp/htdocs/modx/core/cache/includes/elements/modsnippet/2.include.cache.php%3C/b%3E%20on%20line%20%3Cb%3E202%3C/b%3E%3Cbr%20/%3Eassets/images/catering/catering5.jpg [HTTP/1.1 404 Not Found 1ms]
Can anybody give me a hint?
Thanks a lot