blattertech informatikLukas BlatterNiederlenzerstrasse 21
5600 Lenzburg/AGSwitzerland

079 569 25 90
https://www.blattertech.ch

Adresse anzeigen

CMSMS: Gallery Ordner auslesen und mit einem Dropdown zur Auswahl geben

21. Oktober 2011 |  SNIPPLETS |  CMS MADE SIMPLE9 Kommentare

Vor ein paar Monaten erstellte ich eine Webseite welche vorallem aus einer Gallery besteht. Die einzelnen Galerien wurden auf einzelnen Seiten eingebunden. Damit dies möglichst einfach möglich ist, habe ich ein Plugin für AdvancedContent geschrieben, welches die Gallery-Ordner ausliest und als Dropdown zur Verfügung stellt.

Als erstes in den Ordner ./plugins folgende Datei laden:

function.getGalleryTree.php:

<?php

/**
 * ------------------------------------------------------------------------
 * Liest alle Gallery Ordner aus und übergibt sie als Liste AdvancedContent
 * ------------------------------------------------------------------------
 * blattertech informatik, Lukas Blatter, lb@blattertech.ch
 * Twitter: @lukasblatter
 * Web: www.blattertech.ch
 * ------------------------------------------------------------------------
 * History:
 * 2011.08.20 - Lukas Blatter - Inital Release
 * 2011.12.02 - Lukas Blatter - Unterstützt nun auch die Auswahl von Unterordnern
 *                              mit subdir="/pfad/zum/ordner"
 *                              $config Aufruf an 1.10.x angepasst.
 * ------------------------------------------------------------------------
 * This program is distributed under the GNU General Public License, Version 2,
 * June 1991. Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin
 * St, Fifth Floor, Boston, MA 02110, USA
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * */

function smarty_cms_function_getGalleryTree($params, &$smarty)
{

    $config = cmsms()->GetConfig();
    $delimiter = "|";

    if (!function_exists("getGalleryTreeAsArray"))
    {
        function getGalleryTreeAsArray($path = '.', $ignore = array()) {
            $dirTree = array ();
            $dirTreeTemp = array ();
            $ignore[] = '.';
            $ignore[] = '..';
            $ignore[] = '.htaccess';
            $ignore[] = 'error_log';
            $ignore[] = 'cgi-bin';
            $ignore[] = '.DS_Store';
            $ignore[] = 'thumb';

            $config = cmsms()->GetConfig();

            if (strpos($path,$config['uploads_path']) === FALSE)
                $path = $config['uploads_path']."/".trim($path,"/");

            $dh = @opendir($path);

            while (false !== ($file = readdir($dh))) {

                if (!in_array($file, $ignore)) {
                    if (!is_dir("$path/$file")) {
                        $fileinfo=pathinfo($path."/".$file);
                                        if((strtolower($fileinfo['extension']) == "jpg"
                                         or  strtolower($fileinfo['extension']) == "jpeg"
                                         or strtolower($fileinfo['extension']) == "gif"
                                         or strtolower($fileinfo['extension']) == "png") and strpos($file,"thumb") === FALSE)
                        $dirTree["$path"][] = $file;

                    } else {

                        $dirTreeTemp = getGalleryTreeAsArray("$path/$file", $ignore);
                        if (is_array($dirTreeTemp))$dirTree = array_merge($dirTree, $dirTreeTemp);
                    }
                }
            }
            closedir($dh);

            return $dirTree;
        }
    }
 
     $subdir = "";
         if (isset($params['subdir'])) {
         $subdir = "/".trim($params['subdir'],"/");
     }



    $dirTree = getGalleryTreeAsArray('/images/Gallery'.$subdir);
    $gallerys = array();

    foreach ($dirTree as $k => $v) {
        $pfad = str_replace($config['uploads_path']."/images/Gallery/","",$k);
        $gallerys[$pfad] = $pfad." (".count($v)." Fotos)";
    }

    ksort($gallerys);

    $smarty->assign("galleryTreeArray",$gallerys);
    $smarty->assign("galleryTreeTitel",implode($delimiter, $gallerys));
    $smarty->assign("galleryTreePath",implode($delimiter, array_keys($gallerys)));

    if ($params['action'] == "url")
        return implode($delimiter, array_keys($gallerys));
    else
        return implode($delimiter, $gallerys);

}

Eingebaut wird das wie folgt:

{* Dropdownfeld mit AdvancedContent erstellen *}
{AdvancedContent block="Gallery" label="Gallery"  block_type="dropdown" allow_none=true items="Keine Gallery|:::getGalleryTree :::" values="|:::getGalleryTree action='url':::" smarty=true assign="gallerypath"}

{* Gallery anzeigen wenn eine Gallery ausgewählt wurde *}
{if $gallerypath != ""}{Gallery dir=$gallerypath}{/if}

Im Dropdown werden nur Ordner angezeigt welche auch Bilder enthalten:

getGalleryTree Dropdown

Soll nur ein bestimmter Teil der Gallery angezeigt werden, kann über den Parameter "subdir" der Pfad zum entsprechenden Unterordner angegeben werden:

{* Dropdownfeld mit AdvancedContent erstellen *}
{AdvancedContent block="Gallery" label="Gallery"  block_type="dropdown" allow_none=true items="Keine Gallery|:::getGalleryTree subdir='pfad/zum/unterordner':::" values="|:::getGalleryTree action='url' subdir='pfad/zum/unterordner':::" smarty=true assign="gallerypath"}

Über den Autor:

Lukas Blatter

bloggt und twittert seit 2009 aus Leidenschaft diverse Themen rund um Webdesign, PHP, TYPO3, CMS Made Simple, Computer und weiteres.

Er ist Gründer und Inhaber von blattertech informatik, Ehemann und Vater einer Kinderschar.

Kommentare

Auswahl einschränken
2. Dezember 2011 von Reto Corrodi
Super Anleitung. Funktioniert gut.
Gibt es die Möglichkeit nur Untergalerieen einer bestimten Gallerie auszugeben?
Re: Auswahl einschränken
2. Dezember 2011 von Lukas Blatter
Ich habe mal das Script angepasst und den Parameter "subdir" ergänzt. Getestet habe ich es aktuell noch nicht, müsste aber in etwa so funktionieren.
RE: RE: Auswahl einschränken
2. Dezember 2011 von Reto Corrodi
Danke für die schnelle Antwort. Leider bekomme ich damit foldende Fehlermelung im Backend: Warning: array_keys() [function.array-keys]: The first argument should be an array in /home/tannerga/public_html/plugins/function.getGalleryTree.php on line 98

Warning: implode() [function.implode]: Invalid arguments passed in /home/tannerga/public_html/plugins/function.getGalleryTree.php on line 102
Referenzen/garten_zuerich_referenz"> Warning: array_keys() [function.array-keys]: The first argument should be an array in /home/tannerga/public_html/plugins/function.getGalleryTree.php on line 98 Warning: implode() [function.implode]: Invalid arguments passed in /home/tannerga/public_html/plugins/function.getGalleryTree.php on line 102 Referenzen/garten_zuerich_referenz (18 Fotos)
RE: Auswahl einschränken
2. Dezember 2011 von Lukas Blatter
Ich schau's mir heute Abend an und korrigiere das Script.
RE: Auswahl einschränken
2. Dezember 2011 von Lukas Blatter
Ich habe das Plugin nun nochmals kontrolliert und dokumentiert. Bei mir funktioniert es problemlos.
RE: Auswahl einschränken
3. Dezember 2011 von Reto Corordi
Mit dem Script werden zwar nur die gewünschten Gallerien ausgegeben, leider jedoch auch folgende Fehlermeldung:
<b>Warning</b>: implode() [<a href='function.implode'>function.implode</a>]: Invalid arguments passed in <b>/home/tannerga/public_html/plugins/function.getGalleryTree.php</b> on line <b>105</b>

Folgender Code steht im Template:
{content block='get_gallery' label='Galerie' description='Wählen Sie ein Verzeichnis aus Gallery Modul für Galerie anzeige im Inhalt.' block_type='dropdown' allow_none=true items="Keine Galerie|:::getGalleryTree subdir='inhalt':::" values="|:::getGalleryTree action='url' subdir='inhalt' :::" smarty='true' assign='get_gallery' block_group='Inhalts-Galerie'}
RE: Auswahl einschränken
4. Dezember 2011 von Reto Corordi
Die Fehlermeldung kommt jeweil von der ersten Galerie (alphabet)
Wir eine neue Galerie die z.B. mit dem Buchstaben a beginnt erstellt, werden alle anderen angezeigt nur die die als erstes stehen würde nicht..
RE: Auswahl einschränken
4. Dezember 2011 von Reto Corordi
Hab der Fehler gefunden:
Zeile 101: $gkeys = array_keys($gallerys); und nicht $gkeys = array_keys($gallery);
Re: Auswahl einschränken
5. Dezember 2011 von Lukas Blatter
Danke für den Hinweis. Ich hatte dies am Samstag auch gesehen und hier im Artikel korrigiert, allerdings danach keine Zeit mehr zum Testen gehabt.

Ich habe es so gelöst:

$smarty->assign("galleryTreeArray",$gallerys);
$smarty->assign("galleryTreeTitel",implode($delimiter, $gallerys));
$smarty->assign("galleryTreePath",implode($delimiter, array_keys($gallerys)));

Auf Grund des hohen Spamaufkommens können zu diesem Beitrag keine Kommentare mehr abgegeben werden