Archiv der Kategorie: Webentwicklung

Concrete5: Dateimanager zeigt manchmal keinen Upload-Button

Ich hatte heute das Problem, dass im Dateimanager des Concrete5-Backends das Eingabefeld und die Schaltflächen zum Hochladen von Dateien verschwunden waren. Möglicherweise ist das bei einem Update von 5.4.2 auf 5.4.2.1 passiert.

Die Lösung fand ich bei concrete5.org: Es waren keine Dateitypen zum Hochladen angegeben; doch wenn man sie unter Dateimanager > Zugriff neu eingibt, werden auch die Schaltflächen wieder angezeigt.

(Zum Vergrößern auf die Bilder klicken!)

Concrete5-Dateimanager

Concrete5-Dateimanager

Concrete5-Dateimanager

Concrete5-Dateimanager

Concrete5-Add-on »Designer Content«

»Designer Content ist ein unschätzbares Werkzeug, das Webdesignern ermöglicht, auf einfache Weise spezialangefertigte Block-Typen zu erstellen.«

Stimmt. Das im »Marketplace« von Concrete5 kostenlos erhältliche Add-on »Designer Content« ist für den Webdesigner gedacht. Dieser kann seinem Kunden damit einen Block basteln und zur Verfügung stellen, der es diesem leicht macht, bestimmte Inhalte in seine Webseiten einzugeben.

Denn mit dem WYSIWYG-Editor (in Concrete5 ist es TinyMCE), sofern man ihn nicht total abgespeckt hat, kann ein Laie viel Unfug anstellen. In falscher Hierarchie gesetzte Überschriften können es zum Beispiel den Suchmaschinen schwer machen, die Gliederung korrekt zu erkennen. Fehlende Überschriften und statt dessen Normaltext mit vergrößerter Schriftgröße sind genauso kontraproduktiv. Bilder werden vielleicht ohne Abstand in den Text eingefügt.

Von schrecklichen Schriftfarben, abscheulichen Schriftmixturen, albernen Smilies und aus einem Textverarbeitungsprogramm kopiertem Text, dessen Schriftformatierung das ganze Schriftbild ruiniert, mal ganz abgesehen.

Da bietet der Webdesigner dem Kunden eben lieber – zumindest für bestimmte Inhaltsbereiche – speziell angefertigte Blöcke an, die genau vorgeben, wo zum Beispiel welche Überschrift und in welcher Hierarchie zu stehen hat. Man kann auch mehrspaltige Inhaltsbereiche damit vorfertigen, Linklisten, Bild mit umfließendem Text … und sicherlich noch vieles mehr.

Bloß fand ich die Stelle nicht mehr, wo man überhaupt erst einmal so einen Block erstellen kann. Ein Blick in den beschreibenden Text zum Add-on (im Marketplace) brachte dann aber die Aufklärung: Nach der Installation dieses Paketes geht man zu Verwaltung → Seiten und Themes, dann klickt man auf den Reiter Designer Content (in der grauen Leiste oben, rechts von Einzelne Seiten).

Designer Content, developed by jordanlev

Concrete5: »Previous & Next Nav« und URL-Rewriting

In Concrete5 gibt es den nützlichen Block »Previous & Next Nav«. Damit kann man zwischen benachbarten Seiten hin und her navigieren, ohne zum Beispiel immer wieder über die Elternseite (also die übergeordnete Seite) gehen zu müssen.

Das Problem ist nur: Trotz per .htacess-Datei eingeschalteten »hübschen« URLs wird immer /index.php/ in der Adresse eingeblendet, was man aus Gründen der Lesbarkeit und Suchmaschinenfreundlichkeit ja eigentlich vermeiden will.

Doch es gibt eine Lösung: In die Datei config/site.php ist eine Codezeile einzutragen. Ich habe sie ganz an den Anfang, also direkt unter das einleitende PHP-Tag gesetzt. Sie lautet:
define('URL_REWRITING_ALL', true);

(Quelle: www.concrete5.org/community/forums/. Danke an jordanlev für diese Lösung!)

WebMatrix

Microsoft® hat mal wieder versucht, ein Webentwicklungs-Werkzeug zu basteln: WebMatrix. In der Presse wird es sogar vereinzelt gelobt (»Chip Online« und »Page Online«) – wobei ich eigentlich nicht weiß, warum. Denn ich kann in keiner Weise eine Arbeitserleichterung darin sehen.

Sicher, man hat eine komplette Entwicklungsumgebung mit Datenbank- und Web-Server und dazu als Editor »Visual Web Developer Express Edition« (na ja …). Plus eine recht stattliche Anzahl von Content-Management- und Blogsystemen, die man wahlweise lokal installieren kann. Und Dateivorlagen – nicht nur HTML, JavaScript und PHP, nein auch die ganze Palette an Microsoft-proprietären Formaten.

Doch wer braucht das alles? Es geht doch auch mit XAMPP oder, noch besser, mit selbst zusammengestellten Komponenten. So mache ich es: Apache-HTTP-Server, MariaDB (statt MySQL®), PHP und HTML-/PHP-Editor. Viele schwören auf Eclipse mit PHP-Plugin als Editor, aber ich persönlich arbeite lieber mit Webocton-Scriptly.

Oder noch einfacher: Webspace als Testumgebung buchen und das gewünschte CMS dort installieren. Die Template- und Theme-Dateien sind doch ruckzuck hochgeladen in der heutigen Zeit der schnellen Breitbandverbindungen. Viele HTML-Editoren haben sogar eine eingebaute FTP-Upload-Funktion.

Letztlich ist alles Geschmackssache, und WebMatrix wird sicherlich seine Anhänger finden. Für mich ist es unnütz aufgeblähtes Zeug.

Links:
WebMatrix
Webocton-Scriptly
Apache
MariaDB
PHP

Concrete5: Datenbanknamen mit Binde- oder Unterstrich

Das CMS Concrete5® in der Version 5.4.1.1 (und wahrscheinlich auch älteren Versionen) hat Probleme mit Datenbanknamen, die einen Binde- oder Unterstrich beinhalten.

Wenn Datenbankabfragen ausgeführt werden wie etwa die SQL-Abfrage SHOW TABLES FROM […] – zum Beispiel wenn man über das Dashboard eine Datenbanksicherung vornehmen will – dann wird eine Fehlermeldung ausgespuckt, falls eben die Datenbank einen Binde- oder Unterstrich im Namen führt.

Ich habe im Concrete5-Forum diesen Bug berichtet und erhielt die erfreuliche Antwort, dass dieser Fehler in der aktuellen Entwickler-Version von Concrete5 behoben worden ist. Im öffentlichen Download-Bereich werden allerdings nur die stabilen, also fertigen Versionen angeboten. Bis die nächste stabile Version erscheint, kann man sich folgendermaßen behelfen:

Entweder man ändert Zeile 13 in der Datei /concrete5/concrete/libraries/backup.php von

$arr_tables = $db->getCol("SHOW TABLES FROM " . DB_DATABASE);

in

$arr_tables = $db->getCol("SHOW TABLES FROM `" . DB_DATABASE . "`");

oder man lädt sich die Entwicklerversion herunter von Github – doch Vorsicht, denn es handelt sich ja um eine Version, die noch nicht für den Einsatz in einer Produktivumgebung geeignet ist und noch Fehler enthalten könnte. Ich empfehle also Folgendes: Das heruntergeladene Zip- oder Tar-Archiv entpacken und nur die oben genannte Datei auf den Webserver hochladen, nicht aber das ganze Paket.

TinyMCE in Concrete5: Schriftgröße anpassen

Neulich schrieb ich, wie man die Schriftgröße des WYSIWYG-Editors »TinyMCE« im Content-Management-System »SilverStripe« anpassen kann. Heute will ich dasselbe für das CMS »Concrete5« erklären.

Man sucht mittels FTP-Client (etwa FileZilla, Core FTP Lite, Cyberduck) den Ordner /concrete/js/tiny_mce/themes und kopiert ihn nach /js/tiny_mce/themes/ (weil Dateien im Kern-Ordner niemals verändert werden sollten). Im kopierten Verzeichnis gibt es die Unterordner advanced, concrete und simple. Jeder dieser Ordner verzweigt sich noch weiter. Für uns interessant ist jeweils skins/default/. Wenn im Backend von Concrete5 unter Verwaltung > Allgemeine Einstellungen > Texteditor > Toolbar Set zum Beispiel Einfach eingestellt ist, nehmen wir uns den Ordner simple/skins/default/ vor.

Darin gibt es die CSS-Datei editor.css – diese bearbeiten wir mit einem Text- oder HTML-Editor. Gleich in den ersten Zeilen finden wir die Angabe


body, td, pre {
  font-family: Verdana, Arial, Helvetica, sans-serif;
  font-size: 10px;
}

Wir ändern die Buchstabengröße zum Beispiel in 14px, laden die Datei wieder hoch, leeren den Cache von Concrete5 und den Browser-Cache – und das war’s dann auch schon.

Ladezeit von Webseiten

Eine kurze Ladezeit von Webseiten ist heutzutage ein ziemlich wichtiges Bewertungskriterium von Google – und ich könnte mir vorstellen: auch von anderen Suchmaschinenbetreibern. Sie wollen den Suchenden schließlich gute Ergebnisse liefern, und eine gute Website darf eben nicht langsam sein.

Denn kaum etwas ist ärgerlicher für Seitenbesucher als ein quälend lahmer Aufbau. Da wird dann gern schon mal schnell weggeklickt und weitergesurft – vielleicht zur Konkurrenz. Schlecht für den Seitenbetreiber, der eigentlich das Ziel hat, das Interesse der Besucher für seine Website und sein Unternehmen zu wecken.

Mit dem Ladezeit-Check von Topsubmit kann man die Geschwindigkeit seiner Webpräsenz testen. Das Tool zeigt an, wo die Schwachstellen sind. Das können zu große Bilddateien sein oder riesige JavaScript-Bibliotheken wie jQuery oder ähnliche. Lachen Sie nicht – 80 KiB sind riesig im WWW, auch heutzutage.

Also: Es ist Frühling und damit Zeit, abzuspecken!

Website absichern

Immer wieder passiert es, dass Websites in der Form attackiert werden, dass schädlicher Code eingeschleust wird. Jüngst bin ich auf eine Website gestoßen, die – vom Betreiber ungewollt – eine Verbindung zu »greatrow[dot]ru« aufbaute. Bei »Google Safe Browsing« kann man Näheres dazu erfahren.

Es ist nicht immer leicht, die Schwachstelle zu entdecken, über die es dem Angreifer gelungen ist, die Website zu infiltrieren. Man sollte aber, damit es möglichst gar nicht erst so weit kommt, seine Website von vornherein so gut wie möglich absichern:

  • Sichere Passwörter zu allen Zugängen vergeben, zum Beispiel: Login ins CMS, FTP-Zugang, Login zur Administrations-Oberfläche (Confixx, Plesk etc.) beim Webhoster. Diese Passwörter sollten mindestens acht bis zehn Zeichen enthalten und aus Klein- und Großbuchstaben, Ziffern und Sonderzeichen bestehen.
  • .htacess-Datei absichern, die den Zweck hat, dem Apache-Webserver bestimmte Anweisungen zu geben. Wie man diese Absicherung vornimmt, kann man bei squatlabs nachlesen. Die empfohlenen Dateiberechtigungen werden aber beim Standardhosting dazu führen, dass die Website nicht mehr erreichbar ist, hier dürfte die Berechtigung 644 die niedrigst mögliche sein.
  • Datenbankabfragen absichern: Wenn über Webformulare Benutzereingaben entgegengenommen und in eine Datenbank gespeichert werden, könnte schädlicher Code in die Datenbank eingeschleust werden, falls man die Eingaben ungeprüft/ungefiltert übergibt. Man spricht hier von eine SQL-Injection. Heise Security bietet zu diesem Thema einen älteren, aber immer noch gültigen Artikel an.

Achtung: Diese Maßnahmen allein machen es Angreifern nicht unbedingt unmöglich, in das System einzudringen, sondern sind als unerlässlicher Grundschutz zu verstehen, ohne den ein Einbruch so leicht wäre wie der unerlaubte Eintritt in ein Haus mit offenen Türen.

Sergej Müller: neues WP-Plugin für datenschutzkonforme Statistiken

Sergej Müller stellte heute Morgen in seinem Blog sein neues Plugin »Statify« für das Blogsystem WordPress vor. Google Analytics steht ja in Deutschland unter starkem Beschuss von Datenschützern, weil es IP-Adressen speichert und Daten von Deutschland in die USA sendet. »Statify« hingegen steht im Einklang mit den deutschen Daten­schutz­bestim­mungen.

Von WordPress-Kenner Sergej Müller stammen ja schon mehrere äußerst professionelle und brauchbare Plugins, zum Beispiel das bekannte und beliebte Anti-Kommentarspam-Tool »Antispam Bee«. Und auch »Statify« ist wie gewohnt kostenlos, aber natürlich ist es immer nett und auch fair, wenn zufriedene Benutzer als Dankeschön eine Spende per PayPal oder Flattr geben.

Was ich gut finde, ist, dass die Datenbank-Tabelle, in der die statistischen Daten gespeichert werden, sich in bestimmten Abständen selbsttätig reinigt. Es muss ja schließllich nicht sein, dass sie durch uralte Statistiken unnötig aufgebläht wird.

Statify: Plugin für Datenschutz-konforme Statistik in WordPress

Überflüssige WordPress-Plugins loswerden

Auch wenn man die beiden WordPress-Standard-Plugins »Hello Dolly« und »Akismet« gelöscht hat: bei einem WordPress-Update sind sie garantiert wieder da! »Hello Dolly« bietet keinen Mehrwert und »Akismet« ersetzen viele – wie in Foren zu lesen ist – lieber durch Antispam Bee.

Außerdem ist »Akismet« inzwischen in Deutschland aus datenschutz­rechtlicher Sicht äußerst umstritten und reiht sich damit in die von Datenschützern gehassten Tools Google-Analytics und Facebook-Like-Button ein.

Wie auch immer – wer diese beiden Plugins bei einem WordPress-Update eben nicht immer wieder erneut vorfinden möchte, kann dieses Entfernungs-Werkzeug installieren: Unwanted-Plugins-Remover für WordPress. Danke an das »Schweizer WordPress Magazin« für den Hinweis und noch mehr danke an Dominik Schilling, der das Plugin programmiert hat!