Archiv der Kategorie: Webentwicklung

Den visuellen Editor in WordPress loswerden

Der Editor im WordPress-Backend lässt sich ja zwischen visueller und HTML-Ansicht umstellen. Benötigt man die visuelle WYSIWYG-Ansicht nicht, lässt sie sich in den Benutzereinstellungen deaktivieren. So handhabe ich es in meinen eigenen Blogs, in denen nur ich selber schreibe.

Was aber, wenn man ein Blog für mehrere Autoren anbietet oder eins für einen Kunden erstellt? Nicht alle der im WYSIWYG-Editor angebotenen zusätzlichen Möglichkeiten sind sinnvoll einsetzbar. Zum Beispiel könnte ein Autor unpassende Textfarben einstellen. Aber durch eine Zeile Code in der Datei functions.php im Theme-Ordner kann man diesen visuellen Editor deaktivieren.

Hier steht, wie es geht: www.guru-20.info.

WordPress: Verschiedene Templates und Sidebars für Seiten

Für mich ist WordPress immer noch am ehesten ein Blogsystem. Wenn also das Hauptaugenmerk eines Webauftrittes nicht auf einem Blog- oder Newsbereich liegt, sondern hohe Flexibilität in den Seitenlayouts gefragt ist, würde ich WordPress eher nicht einsetzen.

Für eine bestimmte Kundin standen die News stark im Vordergrund, weswegen ich WordPress wählte. Allerdings gibt es auch eine ganze Anzahl »statischer« Seiten (pages), die jedoch nicht alle gleich aufgebaut sind. Manche haben einen vollformatigen Inhaltsbereich, andere eine Seitenleiste (sidebar). Innerhalb des Gestaltungsthemas (theme) muss es also verschiedene Seitenvorlagen (templates) geben. Darüber hinaus müssen die Seitenleisten je nach Seite unterschiedliche Inhalte tragen.

Das in WordPress umzusetzen, war eine neue Anforderung für mich. In meinem anderen Lieblings-System, concrete5, ist so etwas super-leicht umzusetzen, aber auch in WordPress geht es ganz gut, wenn man erst einmal weiß, wie. Die Lösung fand ich auf drei Websites, und zwar so gut erklärt, dass ich mir die Mühe spare, alles mit eigenen Worten wiederzugeben. Hier sind die Quellen:

Templates für Seiten (Pages) in WordPress
[WordPress] Mehrere Sidebars nutzen
{WordPress} Unterschiedliche Inhalte in der Sidebar anziegen

Warum ich kein Typo3 verwende

Warum ich kein Typo3 verwende, ist eigentlich in wenigen Worten erklärt, auch wenn mir Typo3-Freaks wahrscheinlich gern den Kopf abreißen würden: Ich habe weder Zeit noch Lust, mich ein halbes Jahr lang einzuarbeiten, um das System zu verstehen und ein Theme selber erstellen zu können. Und ich möchte ein so unintuitiv bedienbares System auch meinen Kunden nicht zumuten.

Natürlich muss man sich auch mit WordPress und concrete5, meinen Lieblings-Systemen, ein wenig näher befassen, um gut damit arbeiten zu können. Aber wenn man fit in HTML und CSS ist und PHP halbwegs versteht, kann man schon nach einigen Tagen eigene Themes bauen. Es gibt bei beiden Content-Management-Systemen keine Template-Sprache, alles lässt sich mit purem PHP steuern.

Aber, na gut … Warum einfach, wenn es auch umständlich geht! Und die ganzen Typo3-Agenturen können sich auf die Schulter klopfen, so ein kompliziertes Zeug bestens zu verstehen. Und können dem Kunden eine Menge Geld abknöpfen, weil Typo3 ja das absolute Enterprise-CMS ist. Und natürlich ist auch ein Kunde, der einen eher kleinen Webauftritt mit fünf Seiten plus Kontaktformular braucht, mit Typo3 bestens beraten. Jo.

Tomato Cart 2.0 Alpha 4: Installation hängt bei Beispieldaten

Inzwischen ist das Shopsystem Tomato Cart, ein osCommerce-Fork, für mich gestorben. Es gab einfach zu viele Probleme. Was ich als ein viel besseres Open-Source-Shop-System empfinde, gerade für den deutschen Markt, ist modified eCommerce. Jedenfalls, ich habe zuletzt noch Tomato Cart 2.0 in der Alpha-Version 4 ausprobiert. Die Zweier-Version wird, wenn sie fertig entwickelt ist (eine komplette Neuentwicklung), vermutlich besser als die Einser-Produktlinie funktionieren, aber Alpha 4 nervte mich schon, als die Installation an dem Punkt hängen blieb, wo die Beispieldaten installiert werden sollen. Immerhin fand ich eine Lösung, die ich hier gern noch präsentieren möchte.

Zu bearbeiten ist folgende Datei: /install/applications/controllers/setting.php. Man löscht folgenden Code (ab Programmzeile 97):

    
//import sample data
if ($sample == 'on') {
    //import sample sql data
    $this->import_sample_sql();

    //copy sample data
    toc_copy('samples/images', '../images');

    //resize images
    $this->resize_product_images();
}

Und noch diesen Code (ab Programmzeile 141):

/**
 * Import sample sql data
 *
 * @access private
 * @return boolean
 */
private function import_sample_sql() {
    //get database configuration from session
    $config = $this->session->userdata('db_config');

    //connect to database
    $this->load->database($config);

    //database is connected
    if ($this->db) {
        $sql_data = $this->load->file(realpath(dirname(__FILE__) . '/../../../') . '/install/tomatocart_sample_data.sql', TRUE);
        $sql_data = str_replace('`toc_', '`' . $config['dbprefix'], $sql_data);

        //split sql data with ;
        $statements = preg_split("/;[\r\n]/", $sql_data) ;

        //execute the sql statement
        foreach ($statements as $statement) {
            $this->db->query($statement);
        }

        return TRUE;
    }

    return FALSE;
}

Dann hat man zwar keine Beispieldaten (die ich sowieso überflüssig finde, weil man sie mühsam vor Inbetriebnahme des Shops wieder löschen muss), aber immerhin läuft die Installation auf diese Weise flüssig durch.

Wenn WordPress im Wartungsmodus hängen bleibt

Ist mir gerade passiert: drei Plugins waren in WordPress zu aktualisieren, was normalerweise glatt über die Bühne geht. Diesmal jedoch blieb WordPress im Wartungsmodus hängen und ich konnte das Backend nicht mehr bedienen. Zum Glück fand ich schnell eine sehr einfache Lösung, und zwar im Blog von Ansas Meyer: WordPress Wartungsmodus manuell beenden. Vielen Dank für den Tipp!

concrete5: Wenn im Composer Eingabefelder fehlen (Teil 2)

Kürzlich hatte ich beschrieben, wie man fehlende Eingabefelder im Composer für die Blogartikel-Texte nachrüsten kann.

Ich hatte geschrieben, dass man sich ins Dashboard einloggt, zu den Seitentypen navigiert und im Seitentyp blog_entry die gewünschten Blöcke als Platzhalter einfügt. Nur leider fehlte eine Winzigkeit: Man muss, während man sich im Bearbeitung­smodus befindet, im Kontextmenü des eingefügten Blocks noch Composer-Einstellungen wählen.

concrete5-block-in-composer-einbinden-1.png

Im daraufhin erscheinenden Bearbeitungs-Fenster setzt man dann ein Häkchen bei Block in Composer einbinden. Erst dann erscheint solch ein Bereich auch im Composer.

concrete5-block-in-composer-einbinden-2.png

Das wirkt zunächst einmal alles ein bisschen umständlich. Es wird aber einleuchtend, wenn man bedenkt, dass sich die in einem Theme (Gestaltungsthema) enthalten Seitenvorlagen sehr flexibel durch den Webentwickler für den Kunden programmieren lassen und somit das System gar nicht wissen kann, welche Block-Platzhalter überhaupt im Composer zur Verfügung gestellt werden sollen und wie der Webentwickler sie genannt hat. Dennoch wäre es sicherlich eine gute Idee, wenn die concrete5-Programmierer die beiden Standard-Platzhalter Main und Blog Post More, falls vorhanden, im Composer auswählbar machen würden oder so was. So steht man als Anwender und/oder Webdesigner nicht wie der Ochs vorm Berg. Und wie man an den Fragen in den Foren erkennen kann, bin ich beileibe nicht der einzige »Ochse«.

concrete5: Wenn im Composer Eingabefelder fehlen

Der Composer im CMS concrete5 ist dafür da, auf besonders einfache Art neue Seiten oder Blogartikel zu erstellen. Andere Möglichkeiten sind, in der Verwaltung den Seitenbaum aufzurufen und dort eine neue Seite anzulegen; oder man geht direkt auf die Seite, zu welcher eine Unterseite erstellt werden soll. Der Composer soll einem diese langen Wege ersparen. Außerdem kann man ganz gut Seiten vorbereiten, ohne sie gleich veröffentlichen zu müssen; anders gesagt, es lassen sich Entwürfe speichern.

Ich muss gestehen, dass ich früher nie verstand, was dieser Composer überhaupt sollte. Aber es wurden bei mir auch nie irgendwelche Editoren oder Eingabebereiche für die zu erstellenden Texte angezeigt.
concrete5-composer-editoren.png

Ich begann zwar bald zu ahnen, dass da vielleicht in den Einstellungen etwas nicht stimmen konnte, ging der Sache aber nicht weiter nach. Kürzlich ließ mir das Thema aber endlich doch keine Ruhe mehr, und ich ging auf die Suche nach einer Lösung. Diese Lösung lautet: Man loggt sich ins Dashboard ein, geht zu Verwaltung > Seiten & Themes > Seitentypen, dort zu Blog Entry > Standards und fügt hier schon einmal Inhaltsblöcke ein. Am besten gibt man kurze Platzhalter-Texte als Hinweise ein.
concrete5-composer-bloecke.png

Quelle: concrete5.org/community/forums/

Nachtrag: Ein letzter Handgriff fehlt noch, wie ich feststellen musste! Er wird in Teil 2 beschrieben.

concrete5: Datum von Blogartikeln

Das CMS concrete5 speichert in der Datenbank die Angabe, wann ein Blogartikel erstellt wurde. Das dem Blogbesucher angezeigte Datum lässt sich allerdings ändern – und nach diesen öffentlichen Daten wird die Artikelliste auch sortiert, falls man eine chronologische Sortierung im Seitenlisten-Block eingestellt hat.
c5-blogartikel-datum.png

Wie aber lässt sich im Seitentyp blog_entry.php einstellen, dass eben diese Datumsangabe angezeigt werden soll? Indem man die Methode getCollectionDatePublic statt getCollectionDateAdded benutzt, etwa folgendermaßen:

<?php
    global $u;
    echo t(
        '%1$s',	
        $c->getCollectionDatePublic(DATE_APP_GENERIC_MDY_FULL) 
    );
?>

Quelle: concrete5.org/community/forums/

Limit Login Attempts: selbst ausgesperrt

Blogs, die auf dem wohl verbreitetsten Blogsystem WordPress laufen, sind natürlich äußerst beliebte Ziele von Crackern. Bots versuchen, durch wiederholtes Ausprobieren von Benutzernamen und Passwörtern in die Systeme einzudringen. Diese Brute-Force-Attacken sind weit verbreitet.

Es gibt verschiedene Möglichkeiten, sich zu schützen, die ich in diesem Rahmen nicht alle besprechen möchte. Sicherlich fängt der Schutz damit an, dass man keinen Benutzer admin im System hat und natürlich keine Passwörter wie password oder 1234 benutzt.

Ein bekanntes und beliebtes, wenn auch inzwischen veraltetes Plugin ist Limit Login Attempts, das eben diese Brute-Force-Attacken abzuwehren versucht. Wie es das macht, beschreibt Vladimir Simović in seinem Blog perun.net.

Dumm nur, wenn man sich selbst ausschließt. Es ist peinlich, aber ich muss zugeben: mir ist das gestern passiert. Irgendwie habe ich wohl drei- oder viermal ein altes, nicht mehr gültiges Passwort eingegeben, und schon kam ich nicht mehr ins Backend hinein. Vladimir empfiehlt, entweder die Zeitsperre abzuwarten oder eine andere IP-Adresse zu verwenden. Dazu müsste man im Falle eines DSL-Modems die Internet-Verbindung trennen und sich neu einloggen. Im Falle eines DSL-Routers müsste man vermutlich den Router neu starten, um eine andere IP zu erhalten, oder?

Ich schlage eine weitere Möglichkeit vor. Sie setzt allerdings voraus, dass man Zugriff auf die WordPress-Datenbank hat, und den hat man nur bei einem selbst gehosteten WordPress-Blog, nicht aber bei einem Blog auf wordpress.com. Außerdem eignet sich diese Methode auch nur für versierte Anwender. Und zwar löscht man einen Eintrag in der Datenbank (zum Beispiel über phpMyAdmin, falls der Webhoster es zur Verfügung stellt oder man es selbst installiert hat).

Im Detail: Tabelle wp_options, Feld option_name, Eintrag limit_login_lockouts, Feld option_value, und hier den Eintrag aus <MEMO> löschen.

Allerdings gibt es Plugins mit weiteren Möglichkeiten, sein WordPress-Blog sicher zu machen. Mehrere werden auf t3n.de vorgestellt. Welche man einsetzen will, mag jeder für sich entscheiden.

concrete5: Menü-Icons in TinyMCE fehlen

Neulich hatte ich nach einer frischen Installation von concrete5 das Problem, dass dem WYSIWYG-Editor TinyMCE im Content-Block die Menü-Icons fehlten. Auch früher schon einmal hatte ich das erlebt, und in Foren kann man lesen, dass es auch anderen Leuten bisweilen so geht. Dieses Phänomen ist ein bisschen mysteriös, denn es tritt anscheinend sporadisch auf, ohne erklärbare Ursache.

In meinem Fall könnte es daran gelegen haben, dass ich beim Upload der concrete5-Dateien ziemliche Verbindungs-Probleme zum FTP-Server des Kunden gehabt hatte und möglicherweise nicht alle Dateien korrekt hochgeladen worden waren. Nachdem ich die Ordner concrete/js und concrete/blocks gelöscht und neu hochgeladen hatte und außerdem das Verzeichnis files/cache geleert hatte, war wieder alles normal.

Diese Menüleiste fehlte.
(Aufs Bild klicken zum Vergrößern)