RandomOrLatest

Dieses Droplet nimmt die Grundidee des Droplets [[RandomImage]] auf, arbeitet im Gegensatz zu diesem aber rekursiv. Das heißt, es durchforstet nicht nur das angegebene Verzeichnis, sondern auch alle Unterverzeichnisse. Zudem kann es auch dazu verwendet werden, das neueste Bild (=die Datei mit dem jüngsten Modifikationsdatum) zu finden und anzuzeigen.

Die Idee entstand aufgrund einer Anfrage im WebsiteBaker-Forum bezüglich der FolderGallery.

Thread im WebsiteBaker Forum

Droplet Code

Wichtig! Ab Version 1.1 verwendet die FolderGallery den Ordnernamen fg-thumbs für die Thumbnail-Bilder. Sie müssen dann die Einstellung

$thumbdir = 'thumbs';

auf

$thumbdir = 'fg-thumbs';

ändern, wenn Sie diese Version verwenden!


global $suffixes, $thumbs, $thumbdir, $f_time, $f_latest;

// config
$thumbdir   = 'thumbs';           // sub directory for thumbnail images
$suffixes   = 'jpg|jpeg|gif|png'; // recognized file suffixes for images
$random     = 1;
// end config

if( ! function_exists('rol_recurse_dir') ) {
    function rol_recurse_dir( $dir_handle, $path ) {
        global $suffixes, $thumbs, $thumbdir, $f_time, $f_latest;
        $files = array();
        //running the while loop
        while ( false !== ( $file = readdir($dir_handle) ) ) {
            $dir = $path.'/'.$file;
            // recurse
            if( is_dir($dir) && $file != '.' && $file != '..' ) {
                $handle = @opendir($dir);
                $files  = array_merge(
                              rol_recurse_dir( $handle, $dir ),
                              $files
                          );
            }
            elseif( $file != '.' && $file != '..' && preg_match( "/\.$suffixes$/i", $file ) ) {
                if ( $thumbs && ! preg_match( "#/$thumbdir$#i", $path ) ) {
                    continue;
                }
                if ( ! $thumbs && preg_match( "#/$thumbdir$#i", $path ) ) {
                    continue;
                }
                $timedat = filemtime($path.'/'.$file);
                if ( $timedat > $f_time ) {
                    $f_time   = $timedat;
                    $f_latest = str_ireplace(
                                    WB_PATH.MEDIA_DIRECTORY,
                                    "",
                                    $path.'/'.$file
                                );
                }
                $files[] = str_ireplace(
                               WB_PATH.MEDIA_DIRECTORY,
                               "",
                               $path.'/'.$file
                           );
            }
        }
        //closing the directory
        closedir( $dir_handle );
        return $files;
    }
}

$thumbs     = isset( $thumb )  ? 1       : 0;
$random     = isset( $latest ) ? 0       : 1;
$width      = isset($width)    ? $width  : 150;
$height     = isset($height)   ? $height : 150;
$folder     = WB_PATH.MEDIA_DIRECTORY.'/'.$dir;
$names      = array();
$dir_handle = @opendir($folder);
$names      = rol_recurse_dir( $dir_handle, $folder );

if ( $random ) {
    shuffle($names);
    $image=$names[0];
}
else {
    $image = $f_latest;
}

$name = $image;
if ( preg_match( "#/(\w+)\.\w+$#", $image, $match ) ) {
    $name = $match[1];
}
return '<img src="'.WB_URL.MEDIA_DIRECTORY.'/'.$image.'" alt="'.$name.'" width="'.$width.'" height="'.$height.'" />';

Verwendung

Wie jedes Droplet, z. B. im Template oder einer WYSIWYG-Sektion.

Standardaufruf:

    [[RandomOrLatest?dir=<Verzeichnis>&height=<Pixel>&width=<Pixel>]]

Der Standardaufruf entspricht exakt dem des Droplets [[RandomImage]] und funktioniert auch genauso, mit der Ausnahme, daß ausgehend von <Verzeichnis> auch eventuelle Unterverzeichnisse durchsucht werden.

Statt eines Zufallsbild das aktuellste Bild anzeigen

Mit Hilfe des optionalen Parameters latest erreichen Sie, daß das Droplet aus allen Verzeichnissen, die unterhalb von <Verzeichnis> liegen (und natürlich einschließlich diesem), das aktuellste Bild heraussucht. Dieses wird anhand des Modifikationsdatums der Datei ermittelt.

    [[RandomOrLatest?dir=<Verzeichnis>&height=<Pixel>&width=<Pixel>&latest=1]]

Nur Thumbnails berücksichtigen

Vielleicht möchten Sie statt der "großen" Bilder (speziell bei der FolderGallery) lieber nur ein Thumbnail anzeigen. Das können Sie über den optionalen Parameter thumb erreichen:

    [[RandomOrLatest?dir=<Verzeichnis>&height=<Pixel>&width=<Pixel>&thumb=1]]

Wichtig! Wenn Sie latest und thumb kombinieren, wird natürlich der aktuellste Thumb angezeigt, nicht etwa der Thumb des aktuellsten Bildes!

Kommentare

Sie können hier einen Kommentar hinterlassen; ich behalte mir allerdings vor, Kommentare zu löschen, also bleiben Sie höflich. ;)

Kommentar abgeben 
Ihr Name 
Code eingeben 586

Peter?17 Oktober 2013, 20:53

Hallo! Wäre es möglich das angezeigte Bild mit einem Link auf die entsprechende Foldergallery zu versehen?

Roxy?09 Oktober 2011, 06:13

People noramlly pay me for this and you are giving it away!

Melissa?06 Oktober 2011, 21:33

If time is money you've made me a welateihr woman.

Gloriana?06 Oktober 2011, 19:20

No qusteion this is the place to get this info, thanks y'all.