blog.bartlweb - a technologist's external brain

Thema: Webentwicklung

PHP unter Windows kann die Erweiterung cURL nicht laden

Im Regelfall lassen sich sowohl unter Windows als auch Linux PHP-Module durch einfaches Auskommentieren der zugehörigen Zeile in der Konfigurationsdatei php.ini aktivieren. So aktiviert die Zeile extension=php_curl.dll das Modul cURL.

Unter Windows wird in den Logdateien, dann allerdings der folgende Fehler angezeigt:

PHP Warning:  PHP Startup: Unable to load dynamic library 'C:/Program Files (x86)/PHP/ext/php_curl.dll' - Das angegebene Modul wurde nicht gefunden.\r\n in Unknown on line 0

Diese Warnung entsteht, weil PHP die notwendigen Abhängigkeiten nicht finden kann. Um dies zu lösen, müssen Sie die Datei libssh2.dll aus dem PHP-Installationsverzeichnis nach <Installationspfad>\Apache24\bin\ kopieren und eine Pfadvariable auf den PHP-Ordner in der Windows-Systemkonfiguration ergänzen.

Besonderheiten beim Betrieb von TYPO3 auf einem Webhost von DomainFactory

Wer TYPO3 auf einem Webhosting-Paket von DomainFactory per Hand installieren möchte, wird eventuell auf die eine oder andere Hürde stoßen, die ich hier kurz erläutern möchte.

Leeres Fronted - Fehler 500

DomainFactory erlaubt auf seinen Hostingpaketen zwar Symlinks auf Ordner aber nicht auf einzelne Dateien. Wer TYPO3 laut den Empfehlungen so installiert, dass der Ordner typo3 und die Datei index.php per Symlink auf den Ordner typo3_src zeigen, wird mit einem leeren Frontend konfiguriert. Die Server-Logs zeigen dazu ebenfalls nur einen nichtssagenden HTTP 500-Fehler an.

Kopieren Sie die Datei index.php direkt in das Root-Verzeichnis (nicht als Symlink anlegen) um das Problem zu lösen.

Browser mittels JavaScript in den Vollbildmodus versetzen

Das unten stehende JS-Snippet versetzt den Browser in den Vollbildmodus und funktioniert in allen gängigen Browsern (Mozilla Firefox, Google Chrome, Microsoft Internet Explorer, Apple Safari)

Achtung: Apple Safari wird nur unter Mac OS unterstützt, denn unter iOS erlaubt Apple für Websites generell keinen Vollbildmodus.

JavaScript-Code

function fullscreen(){
    elem = document.getElementsByTagName("body")[0];
   
    if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement){
        if(elem.requestFullscreen){
            elem.requestFullscreen();
        } else if(elem.msRequestFullscreen){
            elem.msRequestFullscreen();
        } else if(elem.mozRequestFullScreen){
            elem.mozRequestFullScreen();
        } else if(elem.webkitRequestFullscreen){
            elem.webkitRequestFullscreen(elem.ALLOW_KEYBOARD_INPUT);
        }
    } else {
        if(document.exitFullscreen){
            document.exitFullscreen();
        } else if(document.msExitFullscreen){
            document.msExitFullscreen();
        } else if(document.mozCancelFullScreen){
            document.mozCancelFullScreen();
        } else if(document.webkitExitFullscreen){
            document.webkitExitFullscreen();
        }
    }
}

Einschränkungen

Bei der Entwicklung von Websites, die im Vollbildmodus angezeigt werden sollen, sind die folgenden beiden Dinge zu beachten:

HTML-Emails mit Plaintext-Alternative aus TYPO3-Extensions verschicken

TYPO3 setzt seit geraumer Zeit beim E-Mail-Versand auf die mächtige Library Swift Mailer, die es sehr komfortabel erlaubt Multipart-E-Mails zu erstellen. Der folgende Code erlaubt es, aus einer TYPO3-Extension heraus HTML-Mails mit einer Nur-Text-Variante als Fallback zu versenden.

$html enthält dabei den kompletten HTML-Quelltext inclusive html-Tag, header und body. $text enthält die durch \n mit Zeilenumbrüchen versehene Textvariante.

$mail = t3lib_div::makeInstance('t3lib_mail_Message');
$mail->setFrom(array('absender@bartlweb.net' => 'angezeigter Absendername'));
$mail->setTo(array('empfänger@mail.com' => 'empfänger@mail.com'));
$mail->setSubject('Betreff der E-Mail');
$mail->setBody($html, 'text/html');
$mail->addPart($text, 'text/plain');
$mail->send();

Mehr Optionen und Möglichkeiten (z.B. für Anhänge) finden Sie in der Dokumentation von Swift Mailer unter http://swiftmailer.org/docs/introduction.html.

interne und externe Links automatisch in WordPress auszeichnen

Wer sich beim Erstellen der Blogposts noch keine Gedanken über die korrekten CSS-Klassen für interne und externe Links machen will, kann diese auch automatisch ergänzen lassen. Dafür sorgt die unten angegebene Funktionen, die als Filter auf den Inhalt gelegt wird. Ergänzen Sie den unteren Code in der Datei functions.php ihres Themes.
 

WordPress RSS-Feed mit Icon versehen

Wer den von WordPress automatisch generierten RSS-Feed um ein eigenes Icon (Favicon) ergänzen will, kann den XML-Header über die unten angeführte Funktion selbst erzeugen. Ergänzen Sie den Code in der Datei functions.php ihres Themes.

function addRssFavicon() {
  echo "<image>
            <title>blog.bartlweb</title>
            <url>" . get_site_url() . "/favicon.png</url>
            <link>" . get_site_url() ."</link>
            <width>16</width>
            <height>16</height>
            <description>die neuesten Posts von blog.bartlweb</description>
        </image>";
}
add_action('rss2_head', 'addRssFavicon');

 

eigene prev/next-Navigation für die Singleansicht von WordPress erstellen

Wer in der Post-Ansicht von WordPress eine eigene Navigation zum nächsten bzw. vorhergehenden Artikel anzeigen möchte kann den unteren Code nutzen um die Ausgabe in der Datei single.php des eigenen Themes entsprechend zu ergänzen.

<?php if(get_adjacent_post(false,'',true)) {?>                            
    <a href="<?php echo get_permalink(get_adjacent_post(false,'',true)); ?>" class="navigation_next" title="<?php echo get_the_title(get_adjacent_post(false,'',true)); ?>">n&auml;chster Artikel</a>
<?php } ?>
 
<?php if(get_adjacent_post(false,'',false)) {?>
    <a href="<?php echo get_permalink(get_adjacent_post(false,'',false)); ?>" class="navigation_prev" title="<?php echo get_the_title(get_adjacent_post(false,'',false)); ?>">vorheriger Artikel</a>
<?php } else { ?>
    <a href="<?php bloginfo('url'); ?>" class="navigation_prev" title="zur Startseite von <?php bloginfo('name'); ?>">zur Startseite</a>
<?php } ?>

Favicon für Internet Explorer 10 und Windows 8 aufbereiten

Internet Explorer 10 bietet unter Windows 7 und Windows 8 die Möglichkeit Websites zur Startleiste hinzuzufügen und unter Windows 8 ist es des Weiteren möglich eine Website direkt als Kachel zur Startansicht hinzuzufügen. Das klassische Favicon mit einer Auflösung von 16x16 px ist dafür ungeeignet, da die Icons größer dargestellt werden. Die folgenden HTML-Snippets erlauben die Einbindung von größeren Favicons und die Optimierung der Darstellung für die Windows 8 Startansicht.

Favicon

Favicons können durch aus auch in einer höheren Auflösung als 16x16 px vorliegen und werden von allen modernen Browsern passend skaliert. Der Internet Explorer unterstützt weiterhin nur ICO-Dateien und daher sieht eine optimale Einbindung des Favicons im Moment wie folgt aus.

Feldeingaben bei Flexible Content Elements von TemplaVoila per TypoScript verarbeiten

Mithilfe der Flexble Content Elements von TemplaVoila lassen sich schnell und unkompliziert eigene Content-Elemente, wie z.B. Toggleboxen, erstellen. Dabei können einzelne Tags direkt als Felder gemappt werden. Will man jetzt, wenn wir beim Beispiel der Toggleboxen bleiben, die Header-Tags der Headline nur ausgeben, wenn auch wirklich eine Headline im Content Element angegeben wurde, kann man die Feldausgabe per TypoScript modifizieren.

Dazu wird im XML der Data Structure des Flexible Content Elements die Feldausgabe modifiziert. In unserem Beispiel muss bei unserem Feld headline der XML-Knoten TypoScript ergänzt werden.

Auswahllisten im TYPO3-Backend optimieren

TYPO3 bietet ein mächtiges und simples Formularsystem für sein Backend. Gerade bei umfangreichen Auswahllisten (Selectboxen) werden die Standardelemente aber nicht immer den gewachsenen Anforderungen von komplexen Extensions und Webanwendungen gerecht. Der folgende Ansatz ermöglicht es, die Elemente von Auswahllisten innerhalb einer TCA- oder Flexform-Definition dynamisch mittels einer PHP-Funktion zu generieren. So ist es z.B. möglich weitere Informationen als nur ein Datenbankfeld als Titel anzuzeigen oder den zu speichernden Wert der Auswahl von der UID auf ein anderes Datenbankfeld zu ändern.