<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>toscho.design&#187; Artikel zum Webdesign</title>
	<atom:link href="http://toscho.de/thema/webdesign/feed/" rel="self" type="application/rss+xml" />
	<link>http://toscho.de</link>
	<description>Redaktion und schwer geprüftes Webdesign aus Halle (Saale)</description>
	<lastBuildDate>Thu, 17 May 2012 23:03:08 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>4</sy:updateFrequency>
	
		<item>
		<title>PHP: Wörter zählen</title>
		<link>http://toscho.de/2012/php-woerter-zaehlen/</link>
		<comments>http://toscho.de/2012/php-woerter-zaehlen/#comments</comments>
		<pubDate>Thu, 17 May 2012 22:16:19 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Zeichen]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1886</guid>
		<description><![CDATA[Wie man Worte in einem String zählt – und wie nicht.]]></description>
			<content:encoded><![CDATA[<p>Gegeben sei ein String (ein Text), der eventuell Markup enthält und <a href="http://graphicdesign.stackexchange.com/q/2160/4606" title="Why all the hate? --Two spaces after the period">doppelte Leerzeichen</a>. Wir wollen die Wörter zählen. Nun gibt es sehr unterschiedliche Ansichten darüber, was ein Wort ist: Mit Abkürzungen bzw. per Apostroph verschmolzenen Worten geht’s los, Chinesisch und andere Sprachen ohne fest vorgeschriebene Leerzeichen erschweren das Problem weiterhin.</p>
<p><a href="http://php.net/str-word-count"><code>str_word_count()</code></a> beispielsweise scheitert an fast allen Punkten, obendrein noch an Bindestrichen, Zahlen … und <a href="http://toscho.de/2010/warum-utf-8/" title="Warum UTF-8?">UTF-8</a>. Man kann daran vorbeieiern, aber der Aufwand lohnt sich einfach nicht.</p>
<p>Bleiben wir pragmatisch, nehmen <a href="http://de.wikipedia.org/wiki/Leerzeichen_in_Komposita" title="Wikipedia: Leerzeichen in Komposita">schlechtes Deutsch</a> seufzend hin und zählen einfach die Leerzeichen, ja?<br />
Nein. Manche Leute haben immer noch die Angewohnheit, hinter einen Punkt zwei Leerzeichen zu setzen, und im Markup tauchen sie selbstverständlich auch auf.</p>
<p>Also nochmal: Gegeben sei ein String …</p>
<pre class="notranslate"><var>$string</var> = '&lt;p class="foo bar"&gt; hello world.  two späceß.&lt;br /&gt;
bla&lt;/p&gt;'</pre>
<p>… aus dem wir erst das Markup entfernen:</p>
<pre class="notranslate"><var>$text</var> = strip_tags( <var>$string</var> );</pre>
<p>… dann die Leerzeichen am Anfang und am Ende:</p>
<pre class="notranslate"><var>$text</var> = trim( <var>$text</var> );</pre>
<p>Und jetzt entspräche die Menge der nicht aufeinanderfolgenden Leerzeichen <em>plus eins</em> der Menge dessen, was wir als Wörter akzeptieren. Wir müssen aber nicht addieren, sondern kleben einfach ein Leerzeichen hinten an und lassen einen trivialen regulären Ausdruck durchzählen:</p>
<pre class="notranslate"><var>$word_count</var> = preg_match_all( <code class="string">'~\s+~'</code>, <code class="string">"<var>$text</var> "</code>, <var>$m</var> );</pre>
<p>Ergebnis: 5.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2012/php-woerter-zaehlen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress-Plugin: Opera Speed Dial Preview</title>
		<link>http://toscho.de/2012/wordpress-plugin-opera-speed-dial-preview/</link>
		<comments>http://toscho.de/2012/wordpress-plugin-opera-speed-dial-preview/#comments</comments>
		<pubDate>Sun, 25 Mar 2012 11:00:55 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1846</guid>
		<description><![CDATA[Die Vorschau auf die eigene Seite im neuen Tab Operas anpassen: Mit einem kleinen Plugin und einer eigenen Template-Datei.]]></description>
			<content:encoded><![CDATA[<p><i lang="en">Speed Dial</i> nennt Opera die konfigurierbare Ansicht eines neuen Tabs. Hier kann man einzelne Seiten festlegen, für die man eine Vorschau haben möchte.</p>
<div id="attachment_1847" class="wp-caption alignnone" style="width: 286px"><a href="http://toscho.de/wp-content/uploads/2012/03/speed-dial-beispiel.png"><img src="http://toscho.de/wp-content/uploads/2012/03/speed-dial-beispiel-276x300.png" alt="" title="Speed-Dial-Beispiel" width="276" height="300" class="size-medium wp-image-1847" /></a><p class="wp-caption-text">Speed-Dial-Beispiel</p></div>
<p>Das sieht bei vielen Seiten recht dröge aus; also habe ich mir überlegt, wie man das besser machen kann. Immerhin bietet Opera eine <a href="http://dev.opera.com/articles/view/opera-speed-dial-enhancements/" title="Make your site shine in Speed Dial">API</a> an. Das Ergebnis ist ein kleines Plugin, das ich ganz kreativ <i>Opera Speed Dial Preview</i> genannt habe. Es liegt natürlich auf <a href="https://github.com/toscho/T5-Opera-Speed-Dial-Preview">GitHub</a>.</p>
<p class="downloadlink"><a href="https://github.com/toscho/T5-Opera-Speed-Dial-Preview/zipball/master">Download: Plugin T5 Opera Speed Dial Preview</a></p>
<p>Das Plugin erfordert keine Konfiguration. Nach dem Aktivieren fängt es Zugriffe ab, die mit dem Request-Header <code>X-Purpose: preview</code> gesendet werden und lenkt sie auf <code>/speedial/</code> um. Permalinks müssen also aktiviert sein, damit es funktioniert!</p>
<div id="attachment_1848" class="wp-caption alignnone" style="width: 413px"><img src="http://toscho.de/wp-content/uploads/2012/03/speed-dial-plugin-standardansicht.png" alt="" title="Speed-Dial-Plugin Standardansicht" width="403" height="280" class="size-full wp-image-1848" /><p class="wp-caption-text">Speed-Dial-Plugin Standardansicht</p></div>
<p>Die Ausgabe wird in der großzügig dokumentierten Datei <code>speed-dial.php</code> erzeugt. Hat das aktuell verwendete Theme eine Datei dieses Namens, so wird diese verwendet, nicht die des Plugins. Damit haben Theme-Autoren freie Hand: Einfach selbst eine Datei <code>speed-dial.php</code> ins Theme werfen, gestalten wie man möchte – fertig. Das dauert nur ein paar Minuten.</p>
<p>Für diese Seite habe ich die <a href="http://toscho.de/speeddial/">Vorschau</a> bloß um das Logo ergänzt:</p>
<div id="attachment_1849" class="wp-caption alignnone" style="width: 413px"><img src="http://toscho.de/wp-content/uploads/2012/03/speed-dial-fuer-toscho.de_.png" alt="" title="Speed Dial für toscho.de" width="403" height="280" class="size-full wp-image-1849" /><p class="wp-caption-text">Speed Dial für toscho.de</p></div>
<p>Man kann aber eingeloggten Nutzern die letzten Nachrichten eines BuddyPress-Setups präsentieren oder die zu moderierenden Kommentare auflisten … ihr habt freie Hand, denn alle normalen WordPress-Funktionen stehen zur Verfügung wie in jeder anderen Template-Datei auch.</p>
<p>Verbesserungsvorschläge sendet bitte an die <a href="https://github.com/toscho/T5-Opera-Speed-Dial-Preview/issues" title="Speed Dial Issue Tracker">passende Adresse auf GitHub</a>, damit ich sie nicht aus den Augen verliere.</p>
<p>Eure eigenen Umsetzungen interessieren mich auch! <a href="http://toscho.de/kontakt/">Schickt sie mir</a>, und ich baue eine Galerie – <a href="http://toscho.de/2009/no-no-no-nofollow/">selbstverständlich mit Dofollow-Link</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2012/wordpress-plugin-opera-speed-dial-preview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anker im Request abfangen</title>
		<link>http://toscho.de/2012/anker-im-request-abfangen/</link>
		<comments>http://toscho.de/2012/anker-im-request-abfangen/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 14:20:39 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[Markup]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[URL]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1844</guid>
		<description><![CDATA[Wenn ein <code>#</code> im Request auftaucht, ist meistens etwas kaputt. Solchen Deppen kann mit einem kleinen Codeschnipsel auf den richtigen Weg geholfen werden.]]></description>
			<content:encoded><![CDATA[<p>Viele Leute sind zu dumm, einen ordentlichen Crawler zu schreiben. Schade. Als Ergebnis bekomme ich dann solche Fehler ins 404-Log geschrieben:</p>
<pre class="notranslate">GET /thema/suchmaschinen/%23content</pre>
<p><img src="http://toscho.de/wp-content/uploads/2012/03/anker-totenkopf.png" alt="" width="150" height="150" class="alignright size-full wp-image-1845" />Einfach ausgedrückt: Da hat jemand nicht verstanden, was ein <code>#</code> am Anfang eines Linkziels bedeutet.</p>
<p>Momentan reagiere ich noch recht gutmütig darauf mit einer kleinen Regel in der .htaccess:</p>
<pre class="notranslate">RedirectMatch Permanent (.*)#.*$ $1</pre>
<p>Sieht ein bißchen aus wie Perl-Code, daher ist eine kleine Erklärung angebracht. Die Regel besteht aus drei Teilen:</p>
<ol>
<li><a href="http://httpd.apache.org/docs/2.0/mod/mod_alias.html#redirectmatch">RedirectMatch</a> – die Direktive, die verwendet werden soll.</li>
<li><code>(.*)#.*$</code> – Erfasse alle URIs, die diesem Muster entsprechen: beliebige Zeichen in beliebiger Menge – <code>.*</code> – plus Raute – <code>#</code> – plus beliebige Zeichen in beliebiger Menge.</li>
<li>Lenke diese Anfragen auf die Zeichen um, die der erste eingeklammerte Ausdruck erfaßt hat.</li>
</ol>
<p>In einem korrekten Request wird der Anker nicht an den Server gesendet, sondern der User-Agent merkt ihn sich einfach. Das zumindest beherrschen auch alle Browser, wenngleich der anschließend plazierte Fokus nicht immer der Norm entspricht. Google Chrome beispielsweise glänzt hier mit besonderer Inkompetenz …</p>
<p>Wer solche Fehler verfolgen möchte und WordPress benutzt, mag vielleicht mein <a href="https://github.com/toscho/T5-404-Tools">Plugin T5 404 Tools</a> ausprobieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2012/anker-im-request-abfangen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WordPress-Plugin: Öffentliche Kontaktdaten</title>
		<link>http://toscho.de/2012/wordpress-plugin-oeffentliche-kontaktdaten/</link>
		<comments>http://toscho.de/2012/wordpress-plugin-oeffentliche-kontaktdaten/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 11:27:18 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1835</guid>
		<description><![CDATA[Ein kleines Plugin, mit dem man Kontaktdaten verwaltet, die keinem bestimmten Nutzer zugeordnet sind. Gebrauchsanweisung, Screenshot und Beispielcode.]]></description>
			<content:encoded><![CDATA[<p>Das brauche ich bei jeder Website: Eine öffentlich sichtbare E-Mail-Adresse und eine Telefonnummer. Wenn nur ein Hauptbenutzer existiert, packe ich diese Daten per <a href="https://gist.github.com/618662">Miniplugin</a> in dessen Profil. In Unternehmen und anderen Organisationen jedoch ist das keine Option: Da existiert oft eine spezielle Supporthotline, und die E-Mail-Adresse wird auch von mehreren Leuten verwaltet.</p>
<p>Das Plugin <i lang="en">Public Contact Data</i> erzeugt dafür neue Felder im Backend unter <i>Einstellungen/Allgemein</i>. Außerdem gibt es drei weitere Felder für Google Plus, Facebook und Twitter.</p>
<p>Im Screenshot hier werden vier Felder benutzt. Neben E-Mail und Telefon auch Facebook und Google Plus. Im Vordergrund sieht man den Tab mit dem Backend, im Hintergrund den Einsatz in der Website.<br />
<img src="http://toscho.de/wp-content/uploads/2012/02/screenshot.png" alt="Screenshot Public Contact Data" width="595" height="663" class="alignnone size-full wp-image-1836" /></p>
<p>Die Liste kann man über den Filter <code>'pcd_fields'</code> ändern. Ein Beispiel:</p>
<pre class="notranslate">add_filter( <code class="string">'pcd_fields'</code>, <code class="string">'change_pcd_fields'</code>, 10, 1 );
function change_pcd_fields( <var>$fields</var> )
{
	<i>// remove an item</i>
	unset ( <var>$fields</var>[<code class="string">'facebook'</code>] );

	<i>// add an item</i>
	<var>$fields</var>[<code class="string">'github'</code>] = <code class="string">'GitHub'</code>;

	return <var>$fields</var>;
}</pre>
<p>Für jedes Feld wird automatisch ein <a href="http://codex.wordpress.org/Shortcode_API">Shortcode</a> erstellt nach dem Muster <code>[public_<var>$fieldname</var>]</code>. Hintergrund dazu auf <a href="http://wordpress.stackexchange.com/q/42882/73">WordPress Stack Exchange</a>.<br />
<code>[public_email]</code> gibt als die E-Mail-Adresse aus, <code>[public_github]</code> den Wert des per Filter erzeugten GitHub-Feldes.</p>
<p>Für den Gebrauch im Theme existiert auch eine Aktion namens <code>pcd</code>. Deren erster Parameter ist der Feldname, der zweite ein Array mit Optionen:</p>
<pre class="notranslate">array (
	<code class="string">'before'</code>  => <code class="string">''</code>,
	<code class="string">'after'</code>   => <code class="string">''</code>,
	<code class="string">'link'</code>    => TRUE,
	<code class="string">'print'</code>   => TRUE,
	<code class="string">'pattern'</code> => FALSE
);</pre>
<p>Um einen E-Mail-Link zu bekommen, schreibt man beispielsweise:</p>
<pre class="notranslate">do_action( <code class="string">'pcd'</code>, <code class="string">'email'</code>, array ( <code class="string">'before'</code> => <code class="string">'Email: '</code> ) );</pre>
<p>Die E-Mail-Adresse wird immer maskiert ausgegeben, also durch die Funktion <a href="http://codex.wordpress.org/Function_Reference/antispambot"><code>antispambot()</code></a> geschickt. Das hilft nicht viel, schadet aber auch nicht.</p>
<p>Wird das Argument <code>pattern</code> benutzt, so wird <code>link</code> ignoriert. Benutze <code>%value%</code> als Platzhalter im Pattern-String.</p>
<p>Der Vorteil beim Einsatz der Aktion: Wird das Plugin abgeschaltet, passiert nichts Schlimmes. Es wird einfach nichts ausgegeben, weil WordPress die Aktion ja nicht mehr kennt und somit ignoriert.</p>
<p>Man kann die wenigen öffentlichen Funktionen der Klasse auch über den Zugriff auf eine eventuell schon existierende Instanz ansprechen. Beispiel:</p>
<pre class="notranslate">Public_Contact_Data::instance()->action_handler( <var>$field</var>, <var>$options</var> );</pre>
<p>Das Plugin ist natürlich übersetzbar, eine deutsche Übersetzung liegt bei. Deshalb heißt es in der Pluginliste eines ins Deutsche übersetzten WordPress’ auch <i>Öffentliche Kontaktdaten</i>. Momentan wird die Sprachdatei nur im Backend geladen, um die Ladezeit zu schonen.</p>
<p class="downloadlink"><a href="https://github.com/toscho/Public-Contact-Data/zipball/master">Download</a></p>
<p>Den Code findet man <a href="https://github.com/toscho/Public-Contact-Data">auf GitHub</a>, im <a href="https://github.com/toscho/Public-Contact-Data/issues">Bugtracker</a> dort möchte ich auch Fehlermeldungen und Verbesserungsvorschläge sehen.</p>
<p>Ich habe das Plugin unter eine <a href="http://www.opensource.org/licenses/mit-license.php">MIT Lizenz</a> gestellt. Die ist kompatibel mit der GPL, gibt dem Benutzer aber etwas mehr Freiraum.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2012/wordpress-plugin-oeffentliche-kontaktdaten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSS: tab-size</title>
		<link>http://toscho.de/2012/css-tab-size/</link>
		<comments>http://toscho.de/2012/css-tab-size/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 05:19:10 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1827</guid>
		<description><![CDATA[Wie man das Unsichtbare gestaltet: Die Breite eines Tabulators. Test, Screenshots und genervtes Fazit obendrein.]]></description>
			<content:encoded><![CDATA[<p>Als Kontrapunkt zum letzten Artikel hier mal eine so unterhaltsame wie nutzlose CSS-Spielerei: Alle Browser haben sich inzwischen darauf geeinigt, daß das Zeichen TAB (<abbr title='Unicode Codepoint'>U+0009</abbr>, der Tabulator) wie acht Leerschritte darzustellen sei. Ein schwachsinnig hoher Wert, wenn man Code darstellen möchte – zumindest kenne ich niemanden, der <em>das</em> in seinem Editor eingestellt hat.</p>
<p>Rettung <del>naht</del> gibt es vielleicht irgendwann: Im CSS Text Level 3 wird die Eigenschaft <a href="http://dev.w3.org/csswg/css3-text/#tab-size"><code>tab-size</code></a> vorgeschlagen. Die <a href="http://lists.w3.org/Archives/Public/www-style/2008Dec/0009.html">Diskussion dazu</a> findet man in der CSS-Mailingliste des W3C.</p>
<pre class="notranslate">pre
{
    tab-size: 4; <i>/* Nimm vier Leerzeichen! */</i>
}</pre>
<p>Das setzt freilich voraus, daß der Browser das Zeichen TAB im <a href="http://glazkov.com/2011/01/14/what-the-heck-is-shadow-dom/">Shadow DOM</a> in ein Pseudo-Element packt. Und das können derzeit nur Firefox und Opera. Mit einem Vendorpräfix.</p>
<pre class="notranslate">pre
{
    -moz-tab-size: 4;
    -o-tab-size:   4;
    tab-size:      4;
}</pre>
<p>Der <a href="http://labs.toscho.de/test/css/tab-size.html">Test</a>, der auch andere Präfixe prüft, zeigt in Opera und Firefox das erhoffte Ergebnis:</p>
<p><img src="http://toscho.de/wp-content/uploads/2012/01/tab-size-opera.png" alt="Screenshot Opera" width="493" height="366" class="alignnone size-full wp-image-1828" /></p>
<p>WebKit (hier Chrome) und der IE 9 machen leider dieses:</p>
<p><img src="http://toscho.de/wp-content/uploads/2012/01/tab-size-chrome.png" alt="Screenshot Chrome" width="493" height="366" class="alignnone size-full wp-image-1829" /></p>
<p>Fazit: Taugt erstmal nur fürs Userstylesheet. Immerhin. In den nächsten zwei Jahren werden wir unseren Code weiterhin ein bißchen vorbereiten müssen und <a href="http://labs.toscho.de/escape/">Tabs in Leerzeichen umwandeln</a> – oder auf die ollen Nischenbrowser pfeifen.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2012/css-tab-size/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CSS langweilt mich</title>
		<link>http://toscho.de/2012/css-langweilt-mich/</link>
		<comments>http://toscho.de/2012/css-langweilt-mich/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 08:07:49 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1824</guid>
		<description><![CDATA[Warum ich mich von CSS nicht mehr herausgefordert fühle: zu leicht, zu kitschig, zu konzeptlos. Ich kann es jetzt, und damit hat es sich.]]></description>
			<content:encoded><![CDATA[<p>1998 habe ich mich mal zwei Tage hingesetzt und die taufrische <a href="http://www.w3.org/TR/2008/REC-CSS2-20080411/">CSS-2.0-Spezifikation</a> durchgelesen. Vieles hat nirgendwo funktioniert. Ich fand’s trotzdem toll.</p>
<p><img src="http://toscho.de/wp-content/uploads/2012/01/valid-css-500.png" alt="" width="500" height="186" class="alignnone size-full wp-image-1826" /></p>
<p>Quälend langsam haben dann einzelne Browser ihre skurrilen Interpretationen der Regeln eingebaut. Da gab es eine Menge zu lernen und zu hacken. Jeder Browser hatte nicht nur Macken, die zu den Macken der anderen inkompatibel waren, sondern auch ein rasch wechselndes Set proprietärer Eigenschaften. Es hat Spaß gemacht, da herumzukurven, im Usenet oder auf Mailinglisten mit anderen Leuten zu tüfteln und zu testen.</p>
<p>Heute ist das weg. Mit den superkaputten Browsern ist auch das Gefühl verschwunden, beim Umgang mit CSS den Kopf zu brauchen. Klar, es gibt immer noch kleine Hacks und vorläufige proprietäre Implementationen. Meistens laufen die nur auf ein weiteres Snippet in der IDE hinaus. Aber früher, als man nicht einmal <code>width</code> schreiben konnte, ohne von mindestens drei Browsern eins in die Fresse zu kriegen, war das irgendwie … spannender.</p>
<p>CSS3 hat uns viele neue Eigenschaften gebracht aber kaum neue Konzepte. Viele Module sind nicht einmal kompatibel <em>zueinander</em>, und das Entwicklungstempo ist – so wirkt es auf mich – deutlich gesunken. Kein Wunder, ich verlöre angesichts dieses Wustes auch die Lust.</p>
<p>Manches nervt sogar. Ich habe die Nase voll von Schättchen und Verläufen, von abgelutscht aussehenden Ecken und Schrift mit Pseudo-Prägeeffekt. Kitsch. Hier wird das alles demnächst verschwinden.</p>
<p>Der Grund für das <a href="http://toscho.de/2011/fefe-theme/">Fefe-Theme</a> war nicht Fefe. Der Grund waren all die anderen Layouts, die ich in den letzten Jahren verfaßt habe. Bei denen ich zu viel Zeit mit zu leichtem Code verbringen mußte.</p>
<p>Ich bin, wie Aristoteles einst so schön gesagt hat, ein krummes Holz, das mal in die andere Richtung gebogen werden muß. Von mir selbst.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2012/css-langweilt-mich/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Das Fefe-Theme</title>
		<link>http://toscho.de/2011/fefe-theme/</link>
		<comments>http://toscho.de/2011/fefe-theme/#comments</comments>
		<pubDate>Sun, 25 Dec 2011 19:33:03 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1816</guid>
		<description><![CDATA[Ihr wart hoffentlich alle hübsch unartig? Dann habe ich das passende Geschenk: Ein WordPress-Theme zu Ehren <a href="http://blog.fefe.de">Fefes Blogs</a>.]]></description>
			<content:encoded><![CDATA[<p><a href="http://toscho.de/wp-content/uploads/2011/12/screenshot.png"><img src="http://toscho.de/wp-content/uploads/2011/12/screenshot-150x150.png" alt="" width="150" height="150" class="alignright size-thumbnail wp-image-1817" /></a>Ihr wart hoffentlich alle hübsch unartig? Dann habe ich das passende Geschenk: Ein WordPress-Theme zu Ehren <a href="http://blog.fefe.de">Fefes Blogs</a>. Ich weiß zwar, was er von WordPress hält, aber das ist mir egal. Ich hatte mal Lust auf CSS-Verzicht.</p>
<p>Das Theme verwendet kein Stylesheet, keine Tags oder Kategorien, keine Post-Titel, und mit Bildern kann man auch nicht viel anfangen. Es gibt zwei Widgetflächen – oben und unten – da kann man Text hineinsetzen, wenn man möchte. Einen Shortcode für den Einbau des Suchformulars habe ich auch erstellt: <code>[searchform]</code>. Damit kann man die Maske auf einer beliebigen Seite mitten im Text plazieren.</p>
<div id="attachment_1818" class="wp-caption alignnone" style="width: 460px"><img src="http://toscho.de/wp-content/uploads/2011/12/vergleich-fefe.png" alt="" width="450" height="400" class="size-full wp-image-1818" /><p class="wp-caption-text">Vergleich Original und Theme</p></div>
<p>Die Sprache ist Englisch, es liegt aber eine deutsche Sprachdatei bei, und <a href="http://www.rarst.net">Andrey Savchenko</a>, den einige sicher als <a href="http://wordpress.stackexchange.com/users/847/rarst">Rarst von WordPress Answers</a> kennen, hat die Übersetzung ins Russische besorgt. Cool.</p>
<p>Das Repository liegt natürlich auf GitHub: <a href="https://github.com/toscho/Fefe-Tribute-Theme">https://github.com/toscho/Fefe-Tribute-Theme</a></p>
<p>Die <a href="https://github.com/downloads/toscho/Fefe-Tribute-Theme/fefe-theme.1.0.zip">Version 1.0 herunterladen</a> könnt ihr dort auch.</p>
<p>Verbesserungsvorschläge und Feature-Requests packt bitte in den <a href="https://github.com/toscho/Fefe-Tribute-Theme/issues">Issue-Tracker</a>, damit ich den Überblick behalte. Danke!</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2011/fefe-theme/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>WordPress: Headergrafik per Plugin ausblenden</title>
		<link>http://toscho.de/2011/wordpress-headergrafik-per-plugin-ausblenden/</link>
		<comments>http://toscho.de/2011/wordpress-headergrafik-per-plugin-ausblenden/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 05:02:18 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1805</guid>
		<description><![CDATA[Ein Header-Image aus einem bestehendem Theme entfernen: Hier zeige ich den Weg über ein Plugin als Alternative zum Child-Theme.]]></description>
			<content:encoded><![CDATA[<p>Seit Version 2.9 kann man in <a href="http://toscho.de/angebote/wordpress/themes/">WordPress-Themes</a> die internen Funktionen für eine eigene Kopfgrafik nutzen mit der Funktion <code><a href="http://codex.wordpress.org/Function_Reference/add_custom_image_header">add_custom_image_header()</a></code>. Jetzt bekommt der Nutzer des Themes im Backend unter <em>Design/Kopfzeile</em> eine nette kleine Bildverwaltung. Leider fehlt dort die Option, das Bild komplett wegzulassen.</p>
<p>Gute Themes bieten dafür eine Option an, TwentyTen und auch TwentyEleven leider nicht. Die nachträgliche Entfernung ist umständlich, wenn man kein Child-Theme erstellen möchte.</p>
<p>Deshalb habe ich ein kleines Plugin geschrieben, das sowohl das Bild im Frontend entfernt als auch den Menu-Eintrag im Backend.</p>
<p class="downloadlink"><a href="https://gist.github.com/1115203">Plugin Remove Header Image</a></p>
<p>Wie üblich – es gibt ein mindestens zwei Haken: Wenn im Theme nicht geprüft wird, ob überhaupt ein Bild vorhanden ist, ehe der Container dafür ausgegeben wird, bekommt man eine leere Fläche. Das ist dann eben ein Schrott-Theme. Davon gibt es leider zu viele.<br />
Und die Seite im Backend ist immer noch erreichbar, wenn man die URL dahin kennt. Bilder kann man aber nicht mehr hochladen.</p>
<p>Als Beispiel für den Einsatz in der Praxis sei das <a href="http://drehlog.de/">Videoblog Drehlog</a> genannt. Dort blogge ich mit ein paar Freunden ab und zu … tja … Videos.</p>
<p><a href="http://drehlog.de/"><img src="http://toscho.de/wp-content/uploads/2011/07/drehlog-300x300.png" alt="Screenshot Drehlog" width="300" height="300" class="aligncenter size-medium wp-image-1806" /></a></p>
<p>Irgendwie werde ich das Gefühl nicht los, einen leichteren Weg übersehen zu haben … sei’s drum.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2011/wordpress-headergrafik-per-plugin-ausblenden/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>WordPress: Ein Plugin ist ein Plugin</title>
		<link>http://toscho.de/2011/wordpress-ein-plugin-ist-ein-plugin/</link>
		<comments>http://toscho.de/2011/wordpress-ein-plugin-ist-ein-plugin/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 13:25:16 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[URL]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1793</guid>
		<description><![CDATA[Welcher Code gehört wohin? Wie mache ich es meinen Nutzern leicht – und mir selbst? Ein Blick auf meine Arbeitsweise und vielleicht sogar eine Entscheidungshilfe.]]></description>
			<content:encoded><![CDATA[<p>Ich will die Frage nicht mehr lesen: <i>Warum ist <a href="http://toscho.de/2010/wordpress-plugin-germanix/">Germanix</a> ein Plugin und keine <a href="https://github.com/bueltge/de_DE.php">de_DE.php</a> wie bei Frank Bültge?</i></p>
<p>Die erste Antwort darauf sieht ganz pragmatisch aus: Ungeachtet des schlecht gewählten Namens eignet sich Germanix für <strong>viele Sprachen:</strong> Dänisch, Türkisch, Französisch oder Spanisch zum Beispiel.<br />
Als <code>de_DE.php</code> wäre der Nutzen ohne Not reduziert, denn die benutzt WordPress ja nur, wenn in der <code>wp-config.php</code> eben diese Sprache angegeben wurde.</p>
<p>Die zweite – und mir wichtigere – Antwort fällt vielleicht eher unter <strong>Meinung,</strong> deshalb möchte ich vorausschicken, wie meine Sicht gefärbt ist: Ich schreibe pro Woche mindestens ein <a href="http://toscho.de/angebote/wordpress/plugins/">Plugin</a>, oft zwei, manchmal drei. Pro Monat schreibe ich zwei bis drei <a href="http://toscho.de/angebote/wordpress/themes/">Themes</a>. Ich weiß also ein wenig, was wo am besten funktioniert. Oder ich bin eingefahren, wie immer man das sehen möchte.</p>
<p>Was ich nicht bin: perfekt. Ich mache Fehler, schreibe <strong>Bugs</strong> in meinen Code, die ich dann wieder repariere. Bei einem komplexen System, dessen Bestandteile (Core, Themes und Plugins) separat aktualisiert oder ersetzt werden, kann sich so ein Bug recht gut verstecken. Manchmal entsteht so ein Fehler auch durch fremden Code, der nicht sauber geschrieben wurde, oder durch das Aufeinandertreffen zweier an sich ganz harmloser Codes.</p>
<p>Beispiel: Ein Beitrag wird plötzlich ganz anders ausgegeben, als er geschrieben wurde. Oder der Permalink dafür leitet auf die Fehlerseite.<br />
In solchen Fällen gehe ich wissenschaftlich vor: Ich ändere immer nur eine Variable, Schritt für Schritt, bis ich alle notwendigen Faktoren ermittelt habe. Dann weiß ich, wo ich suchen und flicken muß.</p>
<p><strong>Programmieren ist zu 80% Debuggen, also muß das einfach sein.</strong></p>
<p>Das heißt: Ich muß Code schnell und möglichst granular abschalten können. Als <code>de_DE.php</code> müßte ich zum Debuggen die Datei umbenennen, denn allein das Ändern der Sprache in der <code>wp-config.php</code> erfaßt zu viele weitere Faktoren. Das ist mir zu umständlich, obendrein vergesse ich es vielleicht.</p>
<p class="wideimg"><a href="http://www.flickr.com/photos/publicenergy/3325641526/"><img src="http://toscho.de/wp-content/uploads/2011/04/messy2.jpg" alt="" title="Messy! von publicenergy" width="560" height="420" class="aligncenter size-full wp-image-1796" /></a></p>
<p>Und für die Nutzer meines Plugins ist es noch umständlicher. Wer hat schon immer das FTP-Programm oder eine SSH-Shell geöffnet, wenn er an WordPress sitzt?</p>
<p>Als klassisches Plugin kann ich Germanix jederzeit einfach und isoliert abschalten.</p>
<p>Gleiches gilt auch für viele Hacks, die für die <code>functions.php</code> <a href="http://wordpress.stackexchange.com/questions/1567/best-collection-of-code-for-your-functions-php-file">empfohlen werden</a>. Wenn der eingebaute Code im Stylesheet oder in einer Template-Datei nicht berücksichtigt werden muß, dann gehört er in ein Plugin.<br />
Dabei entsteht keine zusätzliche Last, nur die Liste der aktiven Plugins wird um einen Eintrag erweitert. Und wenn diese paar Zeichen dein System schon in Not bringen, dann ist das System kaputt.</p>
<p>Wenn dir jemand sagt, er habe Plugin-Funktionalität <em>ohne ein Plugin</em>, dann glaub es nicht. Nicht der Ort des Codes entscheidet darüber, ob er ein Plugin ist, sondern das, was er tut. Auch ich habe diesen Fehler <a href="http://toscho.de/2009/no-no-no-nofollow/">schon begangen</a>. <strong>Sorry.</strong><br />
Mein <a class='piwik_download' href="https://github.com/toscho/Toscho-Dofollow">Dofollow-Code ist jetzt ein Plugin</a>, der Code zur <a href="http://toscho.de/2009/wordpress-umbruch-titel-steuern/">Kontrolle des Umbruchs</a> im Titel <a class='piwik_download' href="https://github.com/toscho/Prevent-Title-Widows">auch</a>.</p>
<p>Warum ist also Germanix ein Plugin? Weil es ein Plugin <em>ist</em>. Der Code benutzt die Plugin-API, er kann vom Theme komplett ignoriert werden, und er muß abschaltbar sein.</p>
<h2>Weitere Lektüre</h2>
<ul>
<li><a href="http://toscho.de/2010/wordpress-plugin-germanix/">WordPress-Plugin: Germanix</a></li>
<li><a href="http://toscho.de/2010/wordpress-cms-plugins/">WordPress als CMS: Hilfreiche Plugins</a></li>
<li><a href="http://toscho.de/2010/wordpress-tutorial-ein-framebreaker-plugin-schreiben/">WordPress-Tutorial: Ein Framebreaker-Plugin schreiben</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2011/wordpress-ein-plugin-ist-ein-plugin/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>WordPress: Adminbar in Systemfarben</title>
		<link>http://toscho.de/2011/wordpress-adminbar-in-systemfarben/</link>
		<comments>http://toscho.de/2011/wordpress-adminbar-in-systemfarben/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 20:38:19 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1788</guid>
		<description><![CDATA[Ein WordPress-Plugin für eine angenehm bedienbare Adminbar. Screenshots und Download.]]></description>
			<content:encoded><![CDATA[<p>Ich finde die neue Adminbar recht praktisch, zumindest mit der <a href="http://wordpress.org/extend/plugins/debug-bar/">Debug-Bar</a>.</p>
<p>Leider sieht sie dämlich aus: Hellgrau auf Mittelgrau, zeitgemäß verhunzt mit Schatten und abgerundeten Ecken. Kinkerlitzchen, CSS3 vom Schlimmsten.</p>
<p>Ich habe diesen Quatsch mal aufgeräumt, die Farben auf die des Betriebssystems umgestellt und ein Plugin daraus gemacht:</p>
<p class="downloadlink"><a class='piwik_download' href="https://github.com/toscho/Admin-Bar-In-System-Colors">Admin Bar In System Colors</a></p>
<p class="wideimg"><a href="http://toscho.de/wp-content/uploads/2011/04/admin-system-compare.png"><img src="http://toscho.de/wp-content/uploads/2011/04/admin-system-compare.png" alt="Vergleich der Adminbar mit und ohne Plugin" width="650" height="400" class="alignnone size-full wp-image-1789" /></a></p>
<p>Das kann hoffentlich jede und jeder gut lesen.</p>
<p>Forks, Fragen oder <del datetime="2011-04-06T20:15:54+00:00">Fer</del> Verbesserungsvorschläge?</p>
<p>Umfangreiche Browsertests habe ich noch nicht gemacht – keine Zeit! – und vielleicht sollte ich das Standardstylesheet komplett ersetzen, statt es zu überschreiben. Auch über die feste Höhe samt Pixelschriftgröße werde ich sicher nochmal nachdenken. Und die kleine Grafik für aufklappbare Menus kann man kaum noch erkennen …</p>
<h2>Weiterlesen</h2>
<ul>
<li><a href="http://toscho.de/2010/wordpress-plugin-backend-style-enhancements/">WordPress-Plugin: Backend Style Enhancements</a></li>
<li><a href="http://toscho.de/2010/wordpress-grundeinstellungen-per-plugin-setzen/">WordPress: Grundeinstellungen per Plugin setzen</a></li>
<li><a href="http://toscho.de/2009/wordpress-administrator-php-herausfinden/">WordPress: Administrator mit PHP herausfinden</a></li>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2011/wordpress-adminbar-in-systemfarben/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Database Caching using disk: basic
Object Caching 604/737 objects using disk: basic

Served from: toscho.de @ 2012-05-21 16:05:33 -->
