Suche
Suche Menü

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

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"}

Win7 Anmeldung ohne Passworteingabe

Bevor ich es wieder vergesse hier ein kleiner Tipp für Home Use Win7 Nutzer. Will man beim Starten des PCs kein Passwort eingeben, findet sich die Option nur sehr versteckt. In der Eingabeaufforderung folgendes eingeben:

control userpasswords2

BenutzerkontenEingabeaufforderung

Im sich nun öffnenden Fenster muss der Haken bei «Benutzer müssen Benutzernamen und Kennwort eingeben» entfernt werden. Dabei muss darunter der Benutzer selektiert werden, welcher danach automatisch beim Windowsstart angemeldet wird.

(Getestet unter Win7 Professional)

NirLauncher – Alle Programme von Nir Sofer gesammelt

Nir Sofer ist bekannt für diverse kleine Helferlein welche z.B. Passwörter oder Lizenzkeys sichtbar machen. Mit den Tools von Nir Sofer können auch Cookies verwaltet, Browser-History eingesehen, Browser-Passwörter ausgelesen, Batterie-Leistung ausgelesen und vieles mehr werden. Auf nirsoft.net hat Nir Sofer eine schon bald unzählige Anzahl dieser Tools veröffentlicht.

 NirLauncher

Mit dem NirLauncher kann man sich diese Programme alle auf einen Schlag auf den PC Laden. Die Installationsdatei dazu ist nur 11.5 MB gross. Zusätzlich kann eine deutsche Sprachdatei dazu heruntergeladen werden. Als Zusatz können die Programme von SysInternals, joeware free tools und piriform (ccleaner) integriert werden.

Virenscanner

Nir Sofer weisst  darauf hin, dass Virenscanner bei einigen dieser Programme motzen. Dies da Antiviren Hersteller Programme welche Passwörter auslesen oder ähnliche Mechanismen eingebaut haben grundsätzlich als Trojaner eingestuft werden. Das sind jedoch Fehlalarme.

Download

Download NirLauncher

PHPDoc Blöcke in Eclipse automatisch einfügen

Bisher habe ich meine PHP Funktionen/Klassen mehr schlecht als recht dokumentiert. Nach einem längeren Gespräch mit einem Kollegen über Sinn und Unsinn von guter Dokumentation, habe ich mich auf die Suche gemacht, wie dies in Eclipse am einfachsten umsetzbar ist.

Eclipse hat dazu eine ganz einfache Funktion, welche den PHPDoc Syntax einfügt. Folgende Zeichenfolge eingeben und danach Enter drücken.

/**

Eclipse fügt damit folgendes ein:

    /**
     * 
     * Enter description here ...
     * @param unknown_type $user
     * @param unknown_type $password
     * @param unknown_type $host
     * @param unknown_type $port
     */

Somit muss nur noch die Beschreibung, die Typen der einzelnen Parameter sowie der @return Typ angegeben werden.

Nützliche Eclipse Kurzbefehle

Es gibt verschiedene Tools um PHP zu entwickeln. Mein bevorzugtes Tool ist Eclipse. Hier stelle ich ein paar Kurzbefehle vor, welche die Arbeit mit Eclipse beschleunigen:

Ctrl+Shift+L
Mit diesem Befehl werden alle Kurzbefehle aufgelistet

Ctrl+K
Zur nächsten gleichen Zeichenfolge springen.

Ctrl+Shift+K
Zur vorher gehenden gleichen Zeichenfolge springen

Ctrl+Q
Zur letzen bearbeiteten Stelle springen

Alt+Pfeil Links / Pfeil rechts
Springt zur Stelle an der man vorher gearbeitet hat. Dies ist sehr nützlich wenn an verschiedenen Stellen im Script gearbeitet wird.

Alt+Pfeil hoch / Pfeil runter
Aktuelle Zeile nach oben oder nach unten verschieben

Ctrl+Alt+Pfeil hoch / Pfeil runter
Kopiert die aktuelle Zeile/n nach oben oder unten

Shift+Alt+A
Spaltenmodus aktivieren. Damit lässt sich über mehrere Zeilen hinweg ein bestimmter Bereich gleichzeitig bearbeiten.

Ctrl+D
Aktuelle Zeile oder markierte Zeilen löschen

Ctrl+Shift+7 bzw. Ctrl+Shift+C
Zeile aus- oder einkommentieren

Ctrl+Shift+/
Fügt Block-Kommentar Zeichen um den selektierten Bereich ein.

Ctrl+M
Editorfenster maximieren

Ctrl+L
Zu Zeile springen (Zeilennummer eingeben)

Ctrl+Shift+R
Open Resource Dialog öffnen. Schneller als mit diesem findet man keine Datei im Projekt.

Ctrl+Shift+T
Klassen, Funktionen, Variablen, Macros, Namespaces und vieles mehr anspringen.

Alt+Space
Autocomplete, den begonnenen Text vervollständigen.

Ctrl+Shift+F
Autoformatierung des Quellcodes.

Ctrl+E
Zeigt die Liste der offenen Tabs an. Dadurch kann via Tastatur zu einem anderen Tab gesprungen werden.

Ctrl+O
Zeigt alle Funktionen des aktuellen Tabs sowie markiert die Funktion in welcher sich der Pointer gerade befindet.

Ctrl+Shift+Y
Markierter Text in Kleinbuchstaben umwandeln.

Ctrl+Shift+X
Markierter Text in Grossbuchstaben umwandeln. 

Alt+Shift+R
aktive Datei umbenennen

Shift+Enter und Ctrl+Shift+Enter
Shift+Enter fügt eine leere Zeile unterhalb des Cursors ein. Der Unterschied zum normalen Verhalten ist, dass man hier nicht am Ende einer Zeile (Linie) sein muss, um eine neue Zeile einzufügen.
Ctrl+Shift+Enter macht das gleiche, der Cursor bleibt jedoch oben stehen.

Ctrl+F6
Einfach zwischen den geöffneten Dateien hin und her switchen

Weitere Listen mit Kurzbefehlen sind hier zu finden:
http://eclipse-tools.sourceforge.net/shortcuts.html
http://eclipse.dzone.com/news/effective-eclipse-shortcut-key

Metadaten unter Typo3 anzeigen

Vorhin gefragt worden, wie denn die Metadaten, welche unter «Metadata» eingegeben werden, angezeigt werden können.

Typo3 Metadaten eingeben

Dazu gibt es ein einfaches Snipplet:

 page.meta.keywords.data = DB:pages:1:keywords
page.meta.keywords.override.field = keywords

page.meta.description.data = DB:pages:1:description
page.meta.description.override.field = description

page.meta.abstract.data = DB:pages:1:abstract
page.meta.abstract.override.field = abstract

page.meta.author.data = DB:pages:1:author
page.meta.author.override.field = author

page.meta.author_email.data = DB:pages:1:author_email
page.meta.author_email.override.field = author_email

1 = ID der Startseite. Diese muss also entsprechend der Seite in der das Snipplet eingesetzt wird, angepasst werden.

CMSMS: Zeilenumbrüche in Menüpunkten

Ab und an wird im Forum wieder danach gefragt, wie einem Menü-Eintrag ein Zeilenumbruch hinzugefügt werden kann. Wird im Menütext ein <br /> eingefügt, so wird dieses genau so wie in diesem Text angezeigt, statt einen Zeilenumbruch einzufügen.

Die Lösung: Im Menütemplate

{$node->menutext}

durch folgendes ersetzen:

{$node->raw_menutext}

Damit wird der Menütext genau so ausgegeben, wie er auch eingegeben wurde.

Blindflug Abu Dhabi

Blindflug Abu DhabiIrgendwann diesen Frühling bin ich über das Blog von Dieter Eppler gestolpert. In seinem Blog Wüstenspruren berichtete er über fünf Jahre als Pilot bei der Etihad in Abu Dhabi. Nach dem Swissair Grounding nützte er 2005 die Möglichkeit in Abu Dhabi bei der damals sehr neuen, und stark expandierenden Fluggesellschaft Etihad anzuheuren. Mit Frau und 3 Kindern zog er deshalb in die VAE nach Abu Dhabi. In seinem Buch «Blindflug Abu Dhabi» sind seine  Blogbeiträge in Buchform aufbereitet.

Wie bei Blogeinträgen üblich, sind die Kapitel lose aneinander gereiht. Damit ist das Buch sehr leicht zu lesen und es kann nach einem Kapitel auch mal wieder weggelegt werden ohne vor Spannung zu vergehen. Ich habe das Buch dennoch innert 2 Tagen gelesen, da die einzelnen Erlebnisse und Berichte noch nach mehr gelusten.

Nach 5 Jahren konnte Dieter Eppler eine Rückkehroption bei Swiss einlösen und ist nun seit Juni 2011 wieder in der Schweiz.

Das Buch kann bei Exlibris bestellt werden. Interessanterweise hat mein Buch so um 23.05.- gekostet und hatte den Aufkleber «Exlibris 32.90.-«. Nun sparen und kein Porto zahlen ist nicht schlecht, es mutet jedoch schon lustig an, wenn Online bestellt, ohne Versandkosten das Buch 10.- billiger sein soll als im Laden 🙂

PS: Vorhin gesehen, dass da noch 30% drin sind.

2 Klicks für mehr Datenschutz

2 Klicks für mehr Datenschutz

2 Klicks für mehr
Datenschutz

Heise.de hat vor kurzem ein jQuery Plugin für mehr Datenschutz bei Socialmedia Buttons veröffentlicht.

Das Plugin bindet die Socialmedia Buttons von Facebook, Twitter und Google+ erst auf den ausdrücklichen Wunsch des Nutzers ein.

Ein weiterer Vorteil dieser Methode ist, dass die Ladegeschwindigkeit einer Seite nicht unter den Socialmedia Buttons leidet, da beim ersten Ladevorgang alle Daten direkt vom eigenen Server geladen werden.

Details von Heise:

Normalerweise übertragen diese Buttons schon beim Laden der Seite – also ganz ohne dass der Anwender etwas dazu tut – Daten an die Betreiber der Netzwerkplattformen. Die enthalten neben der URL der aktuellen Seite unter anderem eine Kennung, die zumindest bei dort angemeldeten Nutzern direkt mit einer Person verknüpft ist. Facebook & Co können also komplette Surfprofile ihrer Nutzer erstellen; Details dazu erklärt der Artikel Das Like-Problem. Da dies mit unseren Vorstellungen von Datenschutz und Privatspäre nicht vereinbar ist, hat heise online eine zweistufige Lösung entworfen, die nur mit Zustimmung der Anwender Daten übermittelt.

Socialmedia Buttons

Socialmedia Buttons

Standardmäßig überträgt dieser Button keine Daten an Dritte. Das Konzept ist einfach. Standardmäßig bettet heise online deaktivierte Buttons ein, die keinen Kontakt mit den Servern von Facebook & Co herstellen. Erst wenn der Anwender diese aktiviert und damit seine Zustimmung zur Kommunikation mit Facebook, Google oder Twitter erklärt, werden die Buttons aktiv und stellen die Verbindung her. Dann kann der Anwender mit einem zweiten Klick seine Empfehlung übermitteln. Ist er beim sozialen Netz seiner Wahl bereits angemeldet, erfolgt das bei Facebook und Google+ ohne ein weiteres Fenster. Bei Twitter erscheint ein Popup-Fenster, in dem man den Text des Tweets noch bearbeiten kann.

Weitere Infos bei Heise: