<?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>Sat, 07 Jan 2012 14:55:02 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>4</sy:updateFrequency>
	
		<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>15</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>19</slash:comments>
		</item>
		<item>
		<title>WordPress: Permanente Umleitung auf upgrade.php beheben</title>
		<link>http://toscho.de/2011/wordpress-umleitung-upgrade-php-beheben/</link>
		<comments>http://toscho.de/2011/wordpress-umleitung-upgrade-php-beheben/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 07:30:58 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[URL]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1784</guid>
		<description><![CDATA[Wie man eine überflüssige Umleitung behebt.]]></description>
			<content:encoded><![CDATA[<p>Eben habe ich ein Blog auf Version 3.1 aktualisiert. Danach wurde ich immer auf <code>wp-admin/upgrade.php?_wp_http_referer=%2Fwp-admin%2Findex.php</code> umgeleitet, wenn ich auf den Link zum Dashboard – <code>/wp-admin/index.php</code> – geklickt habe.<br />
Ein direkter Aufruf der Adresse <code>/wp-admin/</code> (ohne <code>index.php</code>) hingegen klappte problemlos.</p>
<p>Eine kurze Suche im Quellcode ergab den Auslöser: In der <code>/wp-admin/admin.php</code> steht eine Abfrage, ob die Datenbank aktualisiert wurde. Steht der Wert <code>db_upgraded</code> in der Optionstabelle nicht auf <code>FALSE</code>, so wird die Umleitung erzeugt, die dann eigentlich den Wert nach dem ersten Aufruf korrekt setzen sollte. Warum das nicht klappt, kann ich noch nicht sagen, aber die Lösung liegt jetzt auf der Hand:</p>
<ol>
<li>Rufe <code>/wp-admin/options.php</code> auf. Diese URL mußt du vermutlich per Hand eingeben.</li>
<li>Suche nach dem Eintrag <code>db_upgraded</code> und setze eine <code>0</code> (Null) hinein.</li>
<li>Drücke auf »Änderungen übernehmen«. Fertig.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2011/wordpress-umleitung-upgrade-php-beheben/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>WordPress-Plugin: Magische Widgets</title>
		<link>http://toscho.de/2011/wordpress-plugin-magische-widgets/</link>
		<comments>http://toscho.de/2011/wordpress-plugin-magische-widgets/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 14:19:56 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Markup]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1768</guid>
		<description><![CDATA[Wie man Widgets auch in die heikelsten Stellen schiebt. Download und ausführliche Dokumentation inklusive.]]></description>
			<content:encoded><![CDATA[<p class="downloadlink"><a href="http://wordpress.org/extend/plugins/magic-widgets/">Download auf wordpress.org</a></p>
<p>Neulich stand ich vor einem spannenden Problem: Ein Freund wollte eine Zeile JavaScript und einen Link auf ein Stylesheet in den Header seines <a href="http://toscho.de/angebote/wordpress/themes/" title="Ich baue auch eigene!">Themes</a> bringen. Dieses Theme stammt aus dem <a href="http://wordpress.org/extend/themes/">Verzeichnis auf wordpress.org</a>, und es sollte weiterhin automatisch aktualisiert werden. Ich konnte also nicht direkt hineinschreiben.<br />
Nun hätte ich ein <a href="http://codex.wordpress.org/Child_Themes">Child-Theme</a> anlegen können, aber das fand ich dann etwas zu umständlich. Obendrein wäre das eine Speziallösung gewesen, und ich bin nun einmal Generalist.<br />
Ich wollte eine Lösung, die ich wiederverwenden kann. Und ihr vielleicht auch.</p>
<p>Zeit für einen kleinen Zaubertrick.</p>
<h2>Das Konzept</h2>
<p>Im Kopfteil eines jeden Themes, das auf wordpress.org zugelassen wird, finden wir die Funktion <a href="http://codex.wordpress.org/Plugin_API/Action_Reference/wp_head">wp_head</a>. Diese löst eine gleichnamige Aktion aus. Wenn wir uns in diese Aktion einklinken, können wir tun, was immer uns beliebt. Zum Beispiel Text ausgeben.</p>
<p>Als Plugin wäre das ein Vierzeiler:</p>
<pre class="notranslate">&lt;?php
<i>/* Plugin Name: Simple Head Insert */</i>
add_action( <code class="string">'wp_head'</code>, <code class="string">'simple_head_insert'</code> );
function simple_head_insert() { echo <code class="string">'&lt;!-- Buh! --&gt;'</code>; }</pre>
<p>Ganz nett, aber irgendwie … nicht gut genug. Es ist immer noch zu speziell, weil die Ausgabe fest im PHP-Code steht. Wenn die Ausgabe oder die Position geändert werden soll, muß das Plugin umgeschrieben werden. Das ist sehr fehleranfällig.</p>
<p>Jemand anderes möchte vielleicht Code im Backend einfügen. Der muß sich das Plugin im Grunde selbst neu schreiben.</p>
<p>Also habe ich mir gedacht: Dann hänge ich doch einfach an die Aktion <code>widgets_init</code> eine Funktion, die eine Instanz einer Klasse erzeugt, die für die Aktionen <code>wp_head</code>, <code>wp_footer</code>, <code>admin_head</code> und <code>admin_footer</code> eine weitere Funktion registriert, die wiederum den Inhalt einer ebenfalls registrierten Sidebar ausgibt, die man frei mit einem Widget befüllen kann, das ich in eine weiteren Klasse gepackt habe.</p>
<p>Klarsoweit?</p>
<p>Nicht? Dann kannst du dir den <strong><a href="https://github.com/toscho/WP-Magic-Widgets">Code auf GitHub ansehen und herunterladen</a></strong>. Für die Eingabe des HTML-Codes habe ich eine einfachere Variante des nativen Text-Widgets geschrieben; sie heißt <strong>Unfiltered Text Widget</strong>.</p>
<p>150 Zeilen mehr als die erste Version, dafür um so mächtiger. Frank wird mich sicher noch ermahnen, daß ich doch eine Sprachdatei einarbeiten sollte. Keine Lust. Insgesamt finde ich den Code immer noch angenehm einfach und enorm flexibel zugleich. Ich bin ausnahmsweise und sicher nur für kurze Zeit mal zufrieden damit.</p>
<h2>Einsatz</h2>
<p>Jetzt wollen wir uns noch ansehen, wie man das verdammte Ding benutzt.</p>
<p>Zunächst laden wir es herunter, packen es ins Pluginverzeichnis und aktivieren es. Ja, sehr spannend.</p>
<p><img src="http://toscho.de/wp-content/uploads/2011/01/activate.png" alt="" title="Plugin aktivieren" width="588" height="109" class="alignnone size-full wp-image-1774 border" /></p>
<p>Jetzt gehen wir auf »Design/Widgets«, und da haben wir vier neue Sidebars und ein neues Widget namens »Unfiltered Text«.</p>
<p><img src="http://toscho.de/wp-content/uploads/2011/01/sidebars-backend.png" alt="" title="Sidebars im Backend" width="309" height="281" class="alignnone size-full wp-image-1775 border" /><img src="http://toscho.de/wp-content/uploads/2011/01/unfiltered-text-widget.png" alt="" title="Widget Unfiltered Text" width="274" height="71" class="alignnone size-full wp-image-1776 border" /></p>
<p>Wir klappen zur Probe mal die Box für den »Front End Header« auf und ziehen das neue Widget hinein. Das können wir übrigens überall benutzen, auch in anderen Sidebars.</p>
<p>In das Eingabefeld schreiben wir ein Script:</p>
<pre class="notranslate">&lt;script&gt;alert('Buh!');&lt;/script&gt;</pre>
<p><img src="http://toscho.de/wp-content/uploads/2011/01/unfiltered-text-widget-edit.png" alt="" title="Widget-Editor" width="375" height="339" class="alignnone size-full wp-image-1773 border" /></p>
<p>Und dann rufen wir das Frontend unserer Website auf:</p>
<p><img src="http://toscho.de/wp-content/uploads/2011/01/script-test.png" alt="" title="Script-Test" width="347" height="129" class="alignnone size-full wp-image-1777" /></p>
<p>Faaaantastisch! Jetzt kann uns nichts mehr bremsen.</p>
<ul>
<li>In den Footer des Frontends können wir den Tracking-Code des <a href="http://toscho.de/2009/piwik-ueberblick-installation/">Analyse-Tools unserer Wahl</a> eingeben – und schon geht das Gezähle los.</li>
<li>In den Header des Backends können wir schreiben:
<pre class="notranslate">&lt;style&gt;#footer{display:none}&lt;/style&gt;</pre>
<p>Und – zack! – ist der Footer weg.</li>
<li>Wir können den JavaScript-Code des <a href="http://toscho.de/2010/wordpress-plugin-icon-to-link/">Plugins Icon to Link</a> einbauen.</li>
<li>Wer so richtig Spaß haben will, schreibt sich dies in beide Header:
<pre class="notranslate">&lt;style&gt;body{display:none}&lt;/style&gt;</pre>
</li>
</ul>
<p>Für weitere kreative Ideen und die obligatorischen … Verbesserungsvorschläge stehen euch die Kommentare offen.</p>
<h2>Anpassen</h2>
<p>Für Hacker habe ich zwei Filter eingebaut, die eine Kombination des Plugins mit dem eigenen Theme erlauben:</p>
<ol>
<li><code class="string">'magic_widgets_actions'</code> übergibt einen Array mit den Aktionen. Den können wir per Filter in der <code>functions.php</code> frei ändern:
<pre class="notranslate">add_filter( <code class="string">'magic_widgets_actions'</code>, <code class="string">'change_magic_widget_actions'</code>, 10, 1 );
function change_magic_widget_actions( <var>$arr</var> )
{
    <i>// Add</i>
    <var>$arr</var>[<code class="string">'loop_start'</code>] = <code class="string">'Post List Start'</code>;
    <i>// Remove</i>
    unset( <var>$arr</var>[<code class="string">'admin_footer'</code>] );
    <i>// Rename</i>
    <var>$arr</var>[<code class="string">'admin_head'</code>] = <code class="string">'HTML-Kopf Administration'</code>;
    return <var>$arr</var>;
}</pre>
<p>Mehr Aktionen findet ihr im <a href="http://codex.wordpress.org/Plugin_API/Action_Reference">Codex</a>, bei <a href="http://adambrown.info/p/wp_hooks">Adam R Brown</a> und auf <a href="http://docs.der-design.com/wp-actions-filters/">der-design.com</a>.</p>
<p>Ich habe mich auf die vier oben genannten Aktionen beschränkt, um die Widgetliste im Backend übersichtlich zu halten. Im Prinzip können wir aber auch 40 oder 400 Aktionen ansprechen.
</li>
<li>Den Namen <strong>Unfiltered Text</strong> können wir über den Filter <code class="string">'magic_widgets_name'</code> ändern (I18n für Arme!).</li>
</ol>
<p>Fehlt was? Funktioniert alles?</p>
<h2>Weitere Artikel dazu hier im Blog</h2>
<ul>
<li><a href="http://toscho.de/2010/wordpress-tutorial-ein-framebreaker-plugin-schreiben/">WordPress-Tutorial: Ein Framebreaker-Plugin schreiben</a></li>
<li><a href="http://toscho.de/2010/wordpress-tutorial-eigenes-widget-schreiben/">WordPress-Tutorial: Eigenes Widget schreiben</a></li>
<li><a href="http://toscho.de/2009/wordpress-parallele-widgets/">WordPress: Parallele Widgets</a></li>
<li><a href="http://toscho.de/2010/wordpress-plugin-backend-style-enhancements/">WordPress-Plugin: Backend Style Enhancements</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2011/wordpress-plugin-magische-widgets/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>WordPress-Plugin: Icon to Link</title>
		<link>http://toscho.de/2010/wordpress-plugin-icon-to-link/</link>
		<comments>http://toscho.de/2010/wordpress-plugin-icon-to-link/#comments</comments>
		<pubDate>Tue, 28 Dec 2010 17:39:07 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[icon]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1759</guid>
		<description><![CDATA[Ein kleines Plugin, das den Editor verständlicher gestaltet.]]></description>
			<content:encoded><![CDATA[<p>Die Icons über dem Editor in WordPress sparen zwar Platz, verstanden werden sie leider nicht immer. Müde dieser Art Support habe ich kleines Plugin verzapft, das aus den Icons klassische Textlinks macht: <a href="https://github.com/toscho/Icon-to-link">Plugin Icon to Link auf GitHub</a>.</p>
<p>So wirkt es:<br />
<img src="http://toscho.de/wp-content/uploads/2010/12/icon-to-link.png" alt="" title="Icon to Link" width="293" height="199" class="alignnone size-full wp-image-1762" /></p>
<p>Und das ist der <del datetime="2010-12-29T21:04:09+00:00">gegenwärtige</del> <ins datetime="2010-12-29T21:04:09+00:00">alte</ins> Code, den man <a href="https://github.com/toscho/Icon-to-link/blob/176b91b8c3812c11c0abe40b44a8926b6dde92cd/icon-to-link.php">im Archiv herunterladen</a> kann:</p>
<pre class="notranslate php">&lt;?php
<i>/*
Plugin Name: Icon to Link
Plugin URI: http://toscho.de/2010/wordpress-plugin-icon-to-link/
Description: Changes upload icons in the edit screen into text links.
Version: 0.3
Author: Thomas Scholz
Author URI: http://toscho.de
*/</i>

add_action( <code class="string">'admin_head'</code>, <code class="string">'itb_change'</code> );
function itb_change()
{   ?&gt;
&lt;script type=<code class="string">"text/javascript"</code>&gt;jQuery(document).ready(function($){
    $(<code class="string">'a#add_image'</code>).text( '&lt;?php _e(<code class="string">'Image'</code>); ?&gt;' );
    $(<code class="string">'a#add_video'</code>).text( '&lt;?php _e(<code class="string">'Video'</code>); ?&gt;' );
    $(<code class="string">'a#add_audio'</code>).text( '&lt;?php _e(<code class="string">'Audio'</code>); ?&gt;' );
    $(<code class="string">'a#add_media'</code>).text( '&lt;?php _ex(<code class="string">'File'</code>, <code class="string">'column name'</code> ); ?&gt;' );
});&lt;/script&gt;
    &lt;?php
}</pre>
<p>Auf zwei Details sei hingewiesen: Dazu braucht man kein jQuery. Aber da es ohnehin geladen wird, habe ich es um der Kürze gleich verwendet.<br />
<del datetime="2010-12-28T19:47:08+00:00">Und der Text <i lang="en">File</i> wird seltsamerweise nicht übersetzt, obwohl er genau so in der Sprachdatei steht. Das finde ich noch heraus …</del><br />
<i lang="en">File</i> wird nur ersetzt, wenn man den passenden Kontext angibt, hier <code>column name</code>.</p>
<h2>Update 29.12.</h2>
<p>Ich habe das Javascript jetzt in eine separate Datei ausgelagert, einen Filter für die Namen eingebaut und sichergestellt, daß der Code nur auf Seiten mit einem Editor und dort erst am Seitenende geladen wird.</p>
<h3>PHP-Code</h3>
<div class="php-code">
<pre class="notranslate php-code"><span class='openclose'>&lt;?php
</span><i class='comment'>/*
Plugin Name: Icon to Link
Plugin URI: <a href="http://toscho.de/2010/wordpress-plugin-icon-to-link/">http://toscho.de/2010/wordpress-plugin-icon-to-link/</a>
Description: Changes upload icons in the edit screen into text links.
Version: 0.4
Author: Thomas Scholz
Author URI: <a href="http://toscho.de">http://toscho.de</a>
*/</i>

add_action( <span class='string'>&#039;admin_init&#039;</span>, <span class='string'>&#039;itb_change&#039;</span> );
<span class='internal'>function</span> itb_change()
{
    <i class='comment'>// Load the script on editor pages only.
</i>    <span class='internal'>if</span> ( <span class='internal'>empty</span> ( <var>$GLOBALS</var>[<span class='string'>&#039;pagenow&#039;</span>] )
        <span class='internal'>or</span> <span class='operator'>!</span> ( <span class='string'>&#039;post.php&#039;</span> <span class='operator'>==</span> <var>$GLOBALS</var>[<span class='string'>&#039;pagenow&#039;</span>]
            <span class='internal'>or</span> <span class='string'>&#039;post-new.php&#039;</span> <span class='operator'>==</span> <var>$GLOBALS</var>[<span class='string'>&#039;pagenow&#039;</span>] )
    )
    {
        <span class='internal'>return</span>;
    }

    <var>$handle</var>  <span class='operator'>=</span> <span class='string'>&#039;icon-to-links&#039;</span>;

    wp_register_script( <var>$handle</var>, plugins_url( <span class='string'>&#039;itl.js&#039;</span>, <span class='constant'>__FILE__</span> ), <span class='string'>&#039;jquery&#039;</span>, <span class='string'>&#039;0.4&#039;</span>, <span class='internal'>TRUE</span> );
    wp_enqueue_script( <var>$handle</var> );

    <i class='comment'>// Localize
</i>    <var>$text</var> <span class='operator'>=</span> <span class='internal'>array</span> (
        <span class='string'>&#039;image&#039;</span> <span class='operator'>=&gt;</span> __( <span class='string'>&#039;Image&#039;</span> )
    ,   <span class='string'>&#039;video&#039;</span> <span class='operator'>=&gt;</span> __( <span class='string'>&#039;Video&#039;</span> )
    ,   <span class='string'>&#039;audio&#039;</span> <span class='operator'>=&gt;</span> __( <span class='string'>&#039;Audio&#039;</span> )
    ,   <span class='string'>&#039;file&#039;</span>  <span class='operator'>=&gt;</span> _x( <span class='string'>&#039;File&#039;</span>, <span class='string'>&#039;column name&#039;</span> )
    );
    <i class='comment'>// To change the names, add a filter for &#039;itl_names&#039;.
</i>    <var>$text</var> <span class='operator'>=</span> apply_filters( <span class='string'>&#039;itl_names&#039;</span>, <var>$text</var> );
    wp_localize_script( <var>$handle</var>, <span class='string'>&#039;i2l&#039;</span>, <var>$text</var> );

    <span class='internal'>return</span>;
}

<i class='comment'>/**
 * Sample filter:

add_filter( &#039;itl_names&#039;, &#039;change_itl_names&#039;, 10, 1 );
function change_itl_names( $names )
{
    $names[&#039;image&#039;] = &#039;Foto&#039;;
    return $names;
}

*/</i></pre>
</div>
<h3>Javascript (itl.js)</h3>
<pre class="notranslate">jQuery(document).ready(function(<var>$</var>){
    $(<code class="string">'a#add_image'</code>).text( <var>i2l.image</var> );
    $(<code class="string">'a#add_video'</code>).text( <var>i2l.video</var> );
    $(<code class="string">'a#add_audio'</code>).text( <var>i2l.audio</var> );
    $(<code class="string">'a#add_media'</code>).text( <var>i2l.file</var>  );
});</pre>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2010/wordpress-plugin-icon-to-link/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Apache: Fehlerseiten testen</title>
		<link>http://toscho.de/2010/apache-fehlerseiten-testen/</link>
		<comments>http://toscho.de/2010/apache-fehlerseiten-testen/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 08:00:59 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Trickkiste]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1756</guid>
		<description><![CDATA[Kleiner Trick mit mod_rewrite, der den Test erleichtert. Beispiele und Bookmarklets inklusive.]]></description>
			<content:encoded><![CDATA[<p>Mit der <a href="http://httpd.apache.org/docs/2.2/mod/core.html#errordocument">Direktive ErrorDocument</a> können wir dem Apachen sagen, welche Datei oder Nachricht er bei welchem <a href="http://toscho.de/2010/logfiles-analysieren/#toc-statuscode" title="Übersicht der wichtigsten Statuscodes">Statuscode</a> ausgeben soll. </p>
<pre class="notranslate">ErrorDocument 403 /403.php
ErrorDocument 401 /401.php
ErrorDocument 410 <code class="string">"&lt;h1&gt;Wech! Pech!&lt;/h1&gt;"</code></pre>
<p>Aber wie testen wir die? Den Status 404 können wir einfach durch eine falsche Adresse auslösen; 401 kommt aber erst, wenn wir an einer <a href="http://toscho.de/2009/authentifizierung-php-utf-8/" title="Authentifizierung mit PHP und UTF-8">Authentifizierung</a> gescheitert sind. Ganz bestimmt wollen wir nicht für jeden Fehler einen separaten Test bauen, das dauert viel zu lange.</p>
<p>Die Antwort: mit <a href="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html">mod_rewrite</a>.</p>
<pre class="notranslate">RewriteCond <var>%{QUERY_STRING}</var> ^status=401$
RewriteRule ^ - [L,R=401]
RewriteCond <var>%{QUERY_STRING}</var> ^status=403$
RewriteRule ^ - [L,R=403]
RewriteCond <var>%{QUERY_STRING}</var> ^status=404$
RewriteRule ^ - [L,R=404]
RewriteCond <var>%{QUERY_STRING}</var> ^status=410$
RewriteRule ^ - [L,R=410]
RewriteCond <var>%{QUERY_STRING}</var> ^status=500$
RewriteRule ^ - [L,R=500]
</pre>
<p style="max-width:none"><img src="http://toscho.de/wp-content/uploads/2010/12/statuscodes.png" alt="" title="Statuscodes" width="150" height="150" class="aligncenter size-full wp-image-1799" /></p>
<p>Rufen wir jetzt eine beliebige Adresse auf und hängen den gewünschten Statuscode an, so liefert der Server brav unsere Fehlerseite.</p>
<ul>
<li><code>example.com/?status=403</code> gibt uns also die 403.php,</li>
<li><code>example.com/?status=410</code> den Text <samp>Wech! Pech!</samp> und</li>
<li><code>example.com/?status=500</code> den Serverfehler.</li>
</ul>
<p>Mit zwei kleinen Bookmarklets, die wir als Lesezeichen speichern, können wir jetzt fröhlich unsere Testcodes abklettern:</p>
<p><a href='javascript:(function(){var c,b;IB=1;function a(d){return("0"&lt;=d&amp;&amp;d&lt;="9")}L=location.href;LL=L.length;for(c=LL-1;c&gt;=0;--c){if(a(L.charAt(c))){for(b=c-1;b&gt;=0;--b){if(!a(L.charAt(b))){break}}break}}++b;if(c&lt;0){return}oldNum=L.substring(b,c+1);newNum=""+(parseInt(oldNum,10)+IB);while(newNum.length&lt;oldNum.length){newNum="0"+newNum}location.href=L.substring(0,b)+newNum+L.slice(c+1)})();'>Letzte Ziffer + 1</a> · <a href='javascript:(function(){var c,b;IB=-1;function a(d){return("0"&lt;=d&amp;&amp;d&lt;="9")}L=location.href;LL=L.length;for(c=LL-1;c&gt;=0;--c){if(a(L.charAt(c))){for(b=c-1;b&gt;=0;--b){if(!a(L.charAt(b))){break}}break}}++b;if(c&lt;0){return}oldNum=L.substring(b,c+1);newNum=""+(parseInt(oldNum,10)+IB);while(newNum.length&lt;oldNum.length){newNum="0"+newNum}location.href=L.substring(0,b)+newNum+L.slice(c+1)})();'>Letzte Ziffer - 1</a></p>
<p>Wenn alles so aussieht wie gewünscht, sollten wir die Regeln natürlich wieder entfernen. Es genügt völlig, wenn nur <em>wir</em> testen.</p>
<h2>Weitere Lektüre</h2>
<ul>
<li><a href="http://toscho.de/2010/logfiles-analysieren/">Logfiles analysieren</a></li>
<li><a href="http://toscho.de/2010/wordpress-htaccess-request-saeubern/">WordPress und .htaccess: Request säubern</a></li>
<li><a href="http://toscho.de/2010/skripte-gegen-http-aufrufe-sperren/">Zugriff verboten: Wie man Skripte gegen HTTP-Aufrufe sperrt</a></li>
<li><a href="http://toscho.de/2009/authentifizierung-php-utf-8/">Authentifizierung mit PHP und UTF-8</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2010/apache-fehlerseiten-testen/feed/</wfw:commentRss>
		<slash:comments>2</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 599/735 objects using disk: basic

Served from: toscho.de @ 2012-02-04 11:26:00 -->
