NAVIGATION
This shows you the differences between two versions of the page.
deutsch:ersetzer_rts:frontend_render:random-image-from-folder [2010/12/08 16:51] Knut Heermann (flip-flop) |
deutsch:ersetzer_rts:frontend_render:random-image-from-folder [2018/06/03 18:09] (current) |
||
---|---|---|---|
Line 3: | Line 3: | ||
====== Random Image aus Verzeichnis ====== | ====== Random Image aus Verzeichnis ====== | ||
- | FIXME TRANSLATE | ||
> Ich verwende Zufallshintergrundbilder auf vielen meiner Seiten. | > Ich verwende Zufallshintergrundbilder auf vielen meiner Seiten. | ||
- | > Es ist recht einfach, wenn Bilder während die Einrichtung der Website definiert und aufgenommen werden aber danach nie geändert werden, weil der Benutzer nicht weiß, wie man sie ändern. | + | > Es ist recht einfach Bilder während die Einrichtung der Website zu definieren und aufzunehmen. Diese Bilder werden aber danach nie geändert werden, weil der Benutzer nicht weiß wie man sie ändern. |
> | > | ||
> Bei allen Lösungen die ich bisher gesehen habe werden die Bilder in einen separaten Ordner auf dem Server abgelegt und dann mit PHP-Replacern abgeholt. | > Bei allen Lösungen die ich bisher gesehen habe werden die Bilder in einen separaten Ordner auf dem Server abgelegt und dann mit PHP-Replacern abgeholt. | ||
> Aber die meisten meiner Nutzer wollen nicht einmal wissen, was FTP ist - so dass ich nach einer anderen Lösung suchte. | > Aber die meisten meiner Nutzer wollen nicht einmal wissen, was FTP ist - so dass ich nach einer anderen Lösung suchte. | ||
> Wäre es nicht schön, wenn der Benutzer seine Bilder in der Dateizentrale hochladen und die Bilder dann von dort aus als Hintergrundbilder einfügen könnte? | > Wäre es nicht schön, wenn der Benutzer seine Bilder in der Dateizentrale hochladen und die Bilder dann von dort aus als Hintergrundbilder einfügen könnte? | ||
+ | > | ||
> Die Hintergrundbilder werden nicht auf den body-Tag im Layout gesetzt sondern frei mit HTML-Tags und/oder CSS-Klassen. | > Die Hintergrundbilder werden nicht auf den body-Tag im Layout gesetzt sondern frei mit HTML-Tags und/oder CSS-Klassen. | ||
> Manchmal erfordern verschiedene Abschnitte einer Website unterschiedliche Hintergründe, so wollte ich auch in diesem Bereich Flexibilität. | > Manchmal erfordern verschiedene Abschnitte einer Website unterschiedliche Hintergründe, so wollte ich auch in diesem Bereich Flexibilität. | ||
Line 27: | Line 26: | ||
**Forum:** [[http://forum.phpwcms.org/viewtopic.php?p=123473#p123473|[Css trick] Random background image]] | **Forum:** [[http://forum.phpwcms.org/viewtopic.php?p=123473#p123473|[Css trick] Random background image]] | ||
- | **Autor:** P. Bracher //(breitsch)// [[http://www.webrealisierung.ch|Webrealisierung GmbH]] | The incredible module page: [[http://web.casa-loca.com/index.php?googlemaps|phpwcms module]] \\ | + | **Autor:** P. Bracher //(breitsch)// [[http://www.webrealisierung.ch|Webrealisierung GmbH]] \\ |
**Version:** V1.0 22.03.10 | **Version:** V1.0 22.03.10 | ||
Line 42: | Line 41: | ||
\\ | \\ | ||
- | ===== Beispiel: ===== | + | ===== Beispiele ===== |
-- ##{RAND_IMG_FROM_FOLDER:ID of PHPWCMS Folder::}## \\ | -- ##{RAND_IMG_FROM_FOLDER:ID of PHPWCMS Folder::}## \\ | ||
Line 92: | Line 91: | ||
\\ | \\ | ||
+ | |||
+ | -- ##{RAND_N_IMG_FROM_FOLDER:ID of PHPWCMS Folder:Number of Files:Lightbox WxHxCROPxQUALITY:WxHxCROPxQUALITY Alt Text}## \\ | ||
+ | -> **{RAND_N_IMG_FROM_FOLDER:23:5:800x800x0x100:x125 My Image}** | ||
+ | |||
+ | = erzeugt 5 Bilder, aus dem Verzeichnis in der Dateizentrale mit der ID=23, \\ | ||
+ | = Bilder skaliert auf Höhe = 125px, mit dem alt-Text "My Image" \\ | ||
+ | = Lightbox mit max. Höhe bzw. Breite von 800px (vgl. Bedingung Lightbox) \\ | ||
==== Finden der Verzeichnis-ID ==== | ==== Finden der Verzeichnis-ID ==== | ||
Line 105: | Line 111: | ||
\\ | \\ | ||
- | ===== Code: ===== | + | ===== Code ===== |
Line 253: | Line 259: | ||
\\ | \\ | ||
+ | ===== Mehrere Bilder ===== | ||
+ | Benötigt man mehr als ein zufälliges Bild aus dem Verzeichnis, kann es bei mehrfachem Verwenden von RAND_IMG_FROM_FOLDER vorkommen, dass Bilder mehrfach gezeigt werden. Abhilfe schafft hier das modifizierte RAND_N_IMG_FROM_FOLDER: | ||
+ | |||
+ | {RAND_N_IMG_FROM_FOLDER:<<folder id>>:<<number of images>>:<<lightbox size params>>:<<WxHxCROPxQUALITY ALT-Text>>} | ||
+ | |||
+ | Dabei ist | ||
+ | |||
+ | * <<folder id>> = ID des Dateiordners aus der Dateizentrale. | ||
+ | * <<number of images>> = Anzahl der ausgewählten Zufallsbilder (Falls weniger Bilder im Ordner sind, werden weniger Bilder ausgegeben) | ||
+ | * <<lightbox size params>> = WxHxCROPxQUALITY für die Lightbox. Falls leer, wird keine Lightbox erzeugt | ||
+ | * <<WxHxCROPxQUALITY ALT-Text>> = Größe und Alt-Text der Bilder | ||
+ | |||
+ | === Code === | ||
+ | - entwickelt und getestet auf phpwcms 1.5.3 (2012/04/26, r471) | ||
+ | |||
+ | **Ort:** /template/inc_script/frontend_render/random_multi_images_from_folder.php | ||
+ | |||
+ | <code php |h {RAND_N_IMG_FROM_FOLDER:ID:number ...}|h > | ||
+ | <?php | ||
+ | /* =========================================================================================== | ||
+ | get a number of random images from a folder V1.0 01.06.2012 thoblerone | ||
+ | =========================================================================================== | ||
+ | basiert auf | ||
+ | random image from folder V1.0 22.03.10 breitsch http://www.webrealisierung.ch | ||
+ | -> {RAND_IMG_FROM_FOLDER:ID of PHPWCMS Folder:CSS_CLASS or HTML tag:WxHxCROPxQUALITY ALT-Text} | ||
+ | The original script in /include/inc_front/ext.func.inc.php programmed by (c) Oliver Georgi | ||
+ | 22.03.10 patched and swaped out to /frontend_render/* by breitsch partially copied from | ||
+ | imgx V1.0 03.01.09 by K.Heermann (flip-flop) | ||
+ | |||
+ | Tag: | ||
+ | {RAND_N_IMG_FROM_FOLDER:<<folder id>>:<<number of images>>:<<lightbox size params>>:<<WxHxCROPxQUALITY ALT-Text>>} | ||
+ | |||
+ | folder ID = the ID number of the Folder in the phpwcms file browser - required | ||
+ | number of images = the number of images to create. Will create max. the number of files in specified folder | ||
+ | lightbox size params = Dimensions, cropping and render quality for lightbox image style is WxHxCROPxQUALITY | ||
+ | lightbox popup relies on lightbox script and css include somewhere on your webpage. | ||
+ | <!-- CSS: template/lib/slimbox/slimbox.css --> | ||
+ | <!-- JS: template/lib/slimbox/slimbox.mootools-1.3.js --> | ||
+ | leave lightbox size params empty for no lightbox | ||
+ | WxHxCROPxQUALITY ALT-Text = Dimensions and alt text of the image (alt text only when not used as background image) | ||
+ | if empty and css background image it takes the original dimensions of the image | ||
+ | if empty and not css background image it takes the preview dimensions for the images | ||
+ | |||
+ | ============================================================================================= */ | ||
+ | |||
+ | // ---------------------------------------------------------------- | ||
+ | // obligate check for phpwcms constants | ||
+ | if (!defined('PHPWCMS_ROOT')) { | ||
+ | die("You Cannot Access This Script Directly, Have a Nice Day."); } | ||
+ | // ---------------------------------------------------------------- | ||
+ | |||
+ | if( strpos($content['all'], '{RAND_N_IMG_FROM_FOLDER:') !== FALSE ) { | ||
+ | |||
+ | function parse_nimagesfromfolder($matches) { | ||
+ | // $matches[0] = complete RT | ||
+ | // $matches[1] = ID of Folder | ||
+ | // $matches[2] = number of images (leave empty for 1 image) | ||
+ | // $matches[3] = leave empty = no lightbox , else Lightbox cmsimage.php Parameters (WxHxCROPxQUALITY e.g. 800x800x0x100) | ||
+ | // $matches[4] = WxHxCROPxQUALITY ALT-Text | ||
+ | |||
+ | |||
+ | $nImages = 1; | ||
+ | if (isset ($matches[2]) && $matches[2] !== "") { | ||
+ | $nImages = $matches[2]; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | if(isset($matches[1])) { | ||
+ | |||
+ | // Folder ID | ||
+ | $folder_id = intval($matches[1]); | ||
+ | |||
+ | // check for Alt-Text | ||
+ | $alt = explode(' ', $matches[4], 2); // WxHxCROPxQUALITY ALT-Text | ||
+ | // $alt[0] = WxHxCROPxQUALITY | ||
+ | // $alt[1] = ALT-Text | ||
+ | |||
+ | |||
+ | $value = explode('x', trim(strtolower($alt[0]))); | ||
+ | $alttext = isset($alt[1]) ? trim($alt[1]) : ''; | ||
+ | |||
+ | $alt = isset($alt[0]) ? html_specialchars(trim($alt[0])) : ''; // WxHxCROPxQUALITY | ||
+ | |||
+ | $width = isset($value[ 0 ]) ? intval($value[ 0 ]) : 0; | ||
+ | $height = isset($value[ 1 ]) ? intval($value[ 1 ]) : 0; | ||
+ | $crop = isset($value[ 2 ]) && intval($value[ 2 ]) === 1 ? 1 : 0; | ||
+ | $quality = isset($value[ 3 ]) ? intval($value[ 3 ]) : 0; | ||
+ | |||
+ | $sql = 'SELECT * FROM '.DB_PREPEND.'phpwcms_file WHERE f_aktiv=1 AND f_public=1 AND f_trash=0 AND f_pid='.$folder_id.' AND f_ext IN ("jpg", "png", "gif")'; | ||
+ | $result = mysql_query($sql); | ||
+ | $i=0; | ||
+ | while($folderfile = mysql_fetch_array($result)) { | ||
+ | $folderfiles[$i] = $folderfile; | ||
+ | $i++; | ||
+ | } | ||
+ | |||
+ | /* use max. as many images as there are in the folder */ | ||
+ | if ($i < $nImages) | ||
+ | $nImages = $i; | ||
+ | |||
+ | $random = array_rand($folderfiles, $nImages); | ||
+ | |||
+ | if ($nImages == 1) /* special case 1 file: array_rand returns single value instead of array of indices */ | ||
+ | $random = array( $random ); | ||
+ | |||
+ | shuffle($random); | ||
+ | |||
+ | $folderfile_output = ''; | ||
+ | |||
+ | for ($idxImage = 0; $idxImage<$nImages; $idxImage++) | ||
+ | { | ||
+ | $folderfile = $folderfiles[$random[$idxImage]]; | ||
+ | |||
+ | if(isset($folderfile['f_id']) ) { | ||
+ | // $thumb_info = @getimagesize(PHPWCMS_URL.PHPWCMS_FILES.$folderfile["f_hash"] . '.' . $folderfile["f_ext"]); | ||
+ | $thumb_info = @getimagesize(PHPWCMS_FILES.$folderfile["f_hash"] . '.' . $folderfile["f_ext"]); | ||
+ | |||
+ | (isset ($value[ 0 ])) ? $thumb_info[0] = $value[0] : $thumb_info[0] = $thumb_info[0]; | ||
+ | (isset ($value[ 1 ])) ? $thumb_info[1] = $value[1] : $thumb_info[1] = $thumb_info[1]; | ||
+ | |||
+ | $zoominfo = get_cached_image( | ||
+ | array( "target_ext" => $folderfile["f_ext"], | ||
+ | "image_name" => $folderfile["f_hash"] . '.' . $folderfile["f_ext"], | ||
+ | "max_width" => $thumb_info[0], | ||
+ | "max_height" => $thumb_info[1], | ||
+ | "thumb_name" => md5( $folderfile["f_hash"].$thumb_info[0]. | ||
+ | $thumb_info[1].$GLOBALS['phpwcms']["sharpen_level"].$crop), | ||
+ | 'crop_image' => $crop | ||
+ | ) | ||
+ | ); | ||
+ | $folderfile_path = PHPWCMS_IMAGES.$zoominfo[0]; | ||
+ | } else { | ||
+ | $folderfile_path = ''; | ||
+ | } | ||
+ | |||
+ | $image = '<img src="'.PHPWCMS_URL.'img/cmsimage.php/'.$width.'x'.$height.'x'.$crop; | ||
+ | if($quality <= 100 && $quality >= 10) { | ||
+ | $image .= 'x'.$quality; | ||
+ | } | ||
+ | $image .= '/'.$folderfile['f_id'].'.'.$folderfile["f_ext"].'" alt="'.$alttext.'" border="0" />'; | ||
+ | |||
+ | /* TB lightbox */ | ||
+ | if (isset ($matches[3]) && $matches[3] !== "") | ||
+ | { | ||
+ | $lightbox = '<a title="'.$folderfile['f_longinfo'].'" rel="lightbox" target="_blank" href="' | ||
+ | . PHPWCMS_URL.'img/cmsimage.php/' . $matches[3]; | ||
+ | $lightbox .= '/'.$folderfile['f_id'].'.'.$folderfile["f_ext"].'">'; | ||
+ | |||
+ | $image = $lightbox . $image . '</a>'; | ||
+ | } | ||
+ | /* TB lightbox ende*/ | ||
+ | |||
+ | // append current image to output | ||
+ | $folderfile_output .= $image; | ||
+ | |||
+ | } | ||
+ | return $folderfile_output; | ||
+ | } | ||
+ | |||
+ | return '<img src="'.PHPWCMS_URL.'img/leer.gif" alt="" border="0" />'; | ||
+ | |||
+ | } | ||
+ | |||
+ | $content["all"] = preg_replace_callback( '/\{RAND_N_IMG_FROM_FOLDER:(\d+):(\d+):(.*?):(.*?)\}/i', 'parse_nimagesfromfolder', $content["all"]); | ||
+ | |||
+ | } // end if | ||
+ | |||
+ | ?> | ||
+ | </code> | ||
+ | |||
+ | === Lightbox === | ||
+ | Bedingung für Lightbox: irgendwo im Template oder auch im Zufallsbild - CP | ||
+ | |||
+ | <code> | ||
+ | <!-- CSS: template/lib/slimbox/slimbox.css --> | ||
+ | <!-- JS: template/lib/slimbox/slimbox.mootools-1.3.js --> | ||
+ | </code> |