<?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; Trickkiste</title>
	<atom:link href="http://toscho.de/thema/trickkiste/feed/" rel="self" type="application/rss+xml" />
	<link>http://toscho.de</link>
	<description>Redaktion, Druck- und Webdesign aus Halle (Saale)</description>
	<lastBuildDate>Wed, 11 Aug 2010 09:20:27 +0000</lastBuildDate>
	<language>de-DE-1901</language>
	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>4</sy:updateFrequency>
	
		<item>
		<title>jQuery: Interne Sprungziele anbieten</title>
		<link>http://toscho.de/2010/jquery-interne-sprungziele-anbieten/</link>
		<comments>http://toscho.de/2010/jquery-interne-sprungziele-anbieten/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 00:24:58 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Interna]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Trickkiste]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1647</guid>
		<description><![CDATA[Wie man interne Anker mittels jQuery herausstellt und anklickbar macht.]]></description>
			<content:encoded><![CDATA[<!--TOC-->
<p>Meine Leidenschaft gilt dem Subtilen, dem unaufdringlichen Detail. Deshalb fange ich leere Suchanfragen ab, oder ich vergrößere die Eingabefelder im Kommentarformular, sobald sie fokussiert werden.</p>
<p>Heute habe noch so ein Detail nachgerüstet. Wenn ich einen Artikel mittels Überschriften in mehrere Abschnitte eingeteilt habe, dann lasse ich per <a href="http://scott.yang.id.au/code/toc-generator/" title="WordPress-Plugin: Table of Contents Generator" hreflang="en">Plugin</a> ein Inhaltsverzeichnis erstellen. Dabei werden alle Überschriften mit einer <code>id</code> versehen, die dann als Sprungziel dient. Bis hierhin nichts Neues; so verfahre ich schon lange. Heute aber habe ich den Nutzwert der <code>id</code>-Attribute erhöht.</p>
<p class="wideimg"><a href="http://www.flickr.com/photos/rakfb/2421927874/"><img src="http://toscho.de/wp-content/uploads/2010/04/anchor-rakfb-500.jpg" alt="Anker" title="Anker von rafk" width="500" height="188" class="size-full wp-image-1648" /></a></p>
<h2>CSS pur – nur für Auserwählte</h2>
<p>In <a href="http://toscho.de/2010/css-mein-userstylesheet/">meinem Userstylesheet</a> lasse ich mir interne Anker gerne zeigen:</p>
<pre class="notranslate">h1[id]:hover:after,
h2[id]:hover:after,
h3[id]:hover:after,
h4[id]:hover:after,
h5[id]:hover:after,
h6[id]:hover:after
    { <i>/* Findet interne Links, falls ich mal auf
       einen Abschnitt in einer Seite linken will. */</i>
        content:            " #" attr(id);
        font:               bold 14px/1 Consolas;
    }</pre>
<p>Das könnte ich hier auch einbauen. Leider hat aber Mozilla an dieser Stelle einen <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=12460" title="Bug 12460 - Cannot select or edit or search generated content and alt text" hreflang="en">unangenehmen Bug</a>, der erst zehneinhalb Jahre alt ist und deshalb noch nicht repariert wurde: <i lang="en">Generated Content</i> kann nicht kopiert werden. Ihr sähet also einen Text, den ihr nicht erreichen könnt. So etwas biete ich nicht an.</p>
<h2>Javascript macht’s möglich</h2>
<p>Zu den vielen <a href="http://molily.de/js/bibliotheken.html#vorteile-nachteile">Vorteilen eines Javascript-Frameworks</a> gehört, daß ich mich um die Bugs und Besonderheiten der einzelnen Browser kaum noch kümmern muß. Seit dem letzten <a href="http://toscho.de/2010/interna-layout-4-0/">kleinen Redesign</a> setze ich hier <a href="http://jquery.com/">jQuery</a> ein, und damit läßt sich das Problem sehr elegant lösen.</p>
<p>Man kann in jQuery meistens ganz normale CSS-Selektoren benutzen, um Elemente auszuwählen. Beispielsweise füllt <code>jQuery('<code class="string">h2[id], h3[id]</code>')</code> einen Array mit allen Überschriften zweiter und dritter Ordnung, die ein Attribut <code>id</code> besitzen.</p>
<p>Mit <a href="http://api.jquery.com/each/"><code>each()</code></a> schlendert man dann gemütlich jeden Treffer ab und löscht, ersetzt oder bearbeitet ihn, bis die Finger bluten. Und das mache ich jetzt auch:</p>
<pre class="notranslate">&lt;script defer&gt;
jQuery(document).<a href="http://api.jquery.com/ready/">ready</a>(function hpoint()
{
    jQuery('<code class="string">h2[id], h3[id]</code>').<a href="http://api.jquery.com/each/">each</a>(function jumplink()
    {
        <i>// Klasse setzen</i>
        jQuery(this).<a href="http://api.jquery.com/addClass/">addClass</a>('haslink');
        <i>// Link ankleben</i>
        jQuery(this).<a href="http://api.jquery.com/append/">append</a>(
            '&amp;#160;&lt;a class="hpoint noprint" href="#'
            + jQuery(this).<a href="http://api.jquery.com/attr/">attr</a>("id")
            + '" title="Direkter Link auf diese Position"&gt;#&lt;/a&gt;'
        );
    });
});
&lt;/script&gt;</pre>
<p>Jetzt haben also alle anspringbaren Überschriften einen Link, mit dem jeder etwas anfangen kann.</p>
<h2>CSS zur Feinarbeit</h2>
<pre class="notranslate">.hpoint:link,
.hpoint:visited
    {
        color:              #ccc;
        text-decoration:    none;
    }
.haslink:hover .hpoint,
.haslink:focus .hpoint,
.haslink:target .hpoint
    {
        color:              #059;
    }</pre>
<p>Das Script sollte irgendwo am Ende der Seite stehen oder ausgelagert werden. jQuery selbst muß natürlich vorher eingebunden werden.</p>
<p>Wie findet ihr das? Lästig, nützlich, oder verbesserungsbedürftig?</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2010/jquery-interne-sprungziele-anbieten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress: Länge der Artikelliste im Backend anpassen</title>
		<link>http://toscho.de/2010/wordpress-laenge-artikelliste-backend-anpassen/</link>
		<comments>http://toscho.de/2010/wordpress-laenge-artikelliste-backend-anpassen/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 18:02:39 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Trickkiste]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1631</guid>
		<description><![CDATA[Wie man die Zahl der angezeigten Artikel unter ›Artikel/Bearbeiten‹ beeinflußt.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.im-tal.net/">Markus</a> gab heute im WP-Forum mal wieder einen <a href="http://forum.wordpress-deutschland.org/allgemeines/66168-artikel-pro-seite-800-im-backend.html">guten Tipp</a>: Die Menge der Artikel pro Seite im Backend wird über den Meta-Key <code>edit_per_page</code> in der Tabelle <code>wp_usermeta</code> gesteuert.<br />
Abgefragt wird sie in der Datei <code>/wp-admin/includes/post.php</code> mit:</p>
<pre class="notranslate"><var>$posts_per_page</var> = (int) get_user_option( '<code class="string">edit_per_page</code>', 0, false );</pre>
<p>Die Funktion <code>get_user_option()</code> wiederum bietet einen Filter an:</p>
<pre class="notranslate">apply_filters("<code class="string">get_user_option_{<var>$option</var>}</code>", <var>$result</var>, <var>$option</var>, <var>$user</var>);</pre>
<p>Und <em>daraus</em> folgt dieser kleine Eintrag in der <code>functions.php</code>, mit dem ich künftig 100 Artikel sehe, ohne die Datenbank anzufassen:</p>
<pre class="notranslate">add_filter('<code class="string">get_user_option_edit_per_page</code>',
    create_function('','<code class="string">return 100;</code>'));</pre>
<p>Das kann man noch an eine <a href="http://codex.wordpress.org/Roles_and_Capabilities" hreflang="en" title="Roles and Capabilities">Abfrage des Userlevels</a> binden, wenn man möchte. Mir reicht es so.</p>
<p>Strenggenommen gehört so eine Modifikation natürlich nicht ins Theme, sondern in ein Plugin. Andererseits möchte ich dafür nicht extra ein zusätzliches Plugin laden. Kompromisse, wohin man sieht …</p>
<p>Und noch strenger gesehen ist diese Option bereits vorhanden: In den Optionen der Artikelansicht. Dort findet sie aber kaum jemand, deshalb setze ich sie global.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2010/wordpress-laenge-artikelliste-backend-anpassen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress-Dashboard: ›Approved‹ nicht ›Genehmigt‹</title>
		<link>http://toscho.de/2010/wordpress-dashboard-approved-nicht-genehmigt/</link>
		<comments>http://toscho.de/2010/wordpress-dashboard-approved-nicht-genehmigt/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 12:34:03 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Sprache]]></category>
		<category><![CDATA[Trickkiste]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1628</guid>
		<description><![CDATA[Wie man nicht übersetzte Zeichenketten per <code>functions.php</code> repariert.]]></description>
			<content:encoded><![CDATA[<p>Dank einer <a href="http://forum.wordpress-deutschland.org/sprachdatei/63073-sprachdatei-fuer-2-9-1-zum-testen.html#post293301">kleinen Schlamperei</a> seitens der WordPress-Entwickler kann das <i lang="en">Approved</i> im Dashboard derzeit nicht per Sprachdatei ins Deutsche übersetzt werden.</p>
<p>Mich stört es nicht, einige Kunden aber schon.</p>
<p>Bis das behoben ist, kann man sich mit einem kleinen Workaround in der <code>functions.php</code> des Themes aushelfen:</p>
<pre class="notranslate">add_filter(
    '<code class="string">ngettext</code>',
    create_function(
        '<code class="string"><var>$t</var>,<var>$s</var>,<var>$p</var></code>',
        '<code class="string">return "Approved"== <var>$p</var>?"Genehmigte":<var>$t</var>;</code>'),
    10, 3);</pre>
<p>Keine Schlamperei, sondern <a href="http://forum.wordpress-deutschland.org/sprachdatei/31178-anmerkung-zum-tellerrand.html">Absicht</a>: <i lang="en">Dashboard</i> wird weiterhin nicht ins Deutsche übersetzt. Auch diesen <i lang="en">Bug</i> kann man leicht reparieren, ohne die Sprachdatei anzufassen, wie auch das <i lang="en">Submitted on</i>:</p>
<pre class="notranslate">if ( ! function_exists('<code class="string">toscho_translations</code>') )
{
    function toscho_translations(<var>$str</var>)
    {
        <i>// Diesen Array bei Bedarf um weitere Übersetzungen erweitern.</i>
        <var>$trans</var> = array (
            '<code class="string">Dashboard</code>'     =&gt; '<code class="string">Übersicht</code>',
            '<code class="string">Submitted on</code>'  =&gt; '<code class="string">Eingereicht am</code>'
        );

        foreach ( <var>$trans</var> as <var>$original</var> =&gt; <var>$translation</var> )
        {
            <var>$str</var> = str_replace(<var>$original</var>, <var>$translation</var>, <var>$str</var>);
        }

        return <var>$str</var>;
    }
    add_filter('<code class="string">gettext</code>', '<code class="string">toscho_translations</code>');
}</pre>
<p>Und so sieht das Ergebnis aus:</p>
<p><img src="http://toscho.de/wp-content/uploads/2010/02/dashboard-uebersetzt.png" alt="Dashboard übersetzt" width="529" height="229" class="alignnone size-full wp-image-1629 border" /></p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2010/wordpress-dashboard-approved-nicht-genehmigt/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WordPress: Grundeinstellungen per Plugin setzen</title>
		<link>http://toscho.de/2010/wordpress-grundeinstellungen-per-plugin-setzen/</link>
		<comments>http://toscho.de/2010/wordpress-grundeinstellungen-per-plugin-setzen/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 19:23:06 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Trickkiste]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1621</guid>
		<description><![CDATA[Wie man den Weg durch die vielen Einstellungsseiten abkürzt. Code zur Ansicht und ein Plugin zum Download.]]></description>
			<content:encoded><![CDATA[<p>Wer öfter mal ein WordPress-Blog installiert, weiß die vielen Einstellungsseiten nicht unbedingt zu goutieren. Ich habe mir dafür ein kleines Plugin geschrieben, das die wichtigsten Optionen auf einen Schlag setzt, die Blogroll (Linkliste) leert und die Dummytexte löscht:</p>
<p class="downloadlink"><a class='piwik_download' lang="en" href="http://f.toscho.de/php-skripte/toscho_basic_settings.zip">Download Toschos Basic Settings</a>.</p>
<pre class="notranslate">&lt;?php
<i>/*
Plugin Name: Toscho's basic settings
Plugin URI: http://toscho.de/2010/wordpress-grundeinstellungen-per-plugin-setzen/
Description: Some useful default configuration settings. See 'wp-admin/options.php' for more options.
Version: 0.3
Author: Thomas Scholz
Author URI: <a href="http://toscho.de/">http://toscho.de</a>
*/</i>

function set_toscho_defaults()
{
    global <var>$wpdb</var>;
    <var>$o</var> = array(
        '<code class="string">avatar_default</code>'            =&gt; '<code class="string">blank</code>',
        '<code class="string">avatar_rating</code>'             =&gt; '<code class="string">G</code>',
        '<code class="string">category_base</code>'             =&gt; '<code class="string">/thema</code>',
        '<code class="string">comment_max_links</code>'         =&gt; 0,
        '<code class="string">comments_per_page</code>'         =&gt; 0,
        '<code class="string">date_format</code>'               =&gt; '<code class="string">d.m.Y</code>',
        '<code class="string">default_ping_status</code>'       =&gt; '<code class="string">closed</code>',
        '<code class="string">default_post_edit_rows</code>'    =&gt; 30,
        '<code class="string">links_updated_date_format</code>' =&gt; '<code class="string">j. F Y, H:i</code>',
        '<code class="string">permalink_structure</code>'       =&gt; '<code class="string">/%year%/%postname%/</code>',
        '<code class="string">rss_language</code>'              =&gt; '<code class="string">de</code>',
        '<code class="string">timezone_string</code>'           =&gt; '<code class="string">Etc/GMT-1</code>',
        '<code class="string">use_smilies</code>'               =&gt; 0,
        '<code class="string">start_of_week</code>'             =&gt; 1
    );

    foreach ( <var>$o</var> as <var>$k</var> =&gt; <var>$v</var> )
    {
        update_option(<var>$k</var>, <var>$v</var>);
    }

    <i>// Delete dummy post and comment.</i>
    wp_delete_post(1, TRUE);
    wp_delete_comment(1);

    <i>// empty blogroll</i>
    <var>$wpdb</var>->query("<code class="string">DELETE FROM <var>$wpdb</var>->links WHERE link_id != ''</code>");

    return;
}
register_activation_hook(__FILE__, '<code class="string">set_toscho_defaults</code>');</pre>
<p>Dieses Plugin aktivieren, deaktivieren und löschen. Fertig.</p>
<p><strong>Nachtrag:</strong> Dieses kleine Plugin hat jetzt auch seine eigene GitHub-Adresse: <a href="http://github.com/toscho/WordPress-Basic-Settings">http://github.com/toscho/WordPress-Basic-Settings</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2010/wordpress-grundeinstellungen-per-plugin-setzen/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Opera: Wie man sich selbst aus der eigenen Statistik heraushält</title>
		<link>http://toscho.de/2010/opera-sich-selbst-aus-statistik-heraushalten/</link>
		<comments>http://toscho.de/2010/opera-sich-selbst-aus-statistik-heraushalten/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 20:04:32 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[Interna]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Trickkiste]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1577</guid>
		<description><![CDATA[Wie man sich für die eigene Statistik unsichtbar macht: Man paßt den User-Agent-String an und das Script für den Tracking-Code.]]></description>
			<content:encoded><![CDATA[<p>Zu den wenigen Daten, die ich nicht in <a href="http://toscho.de/2009/piwik-ueberblick-installation/" title="Piwik: Überblick und Installation">Piwik</a> sehen möchte, gehören meine eigenen Aufrufe. </p>
<p>Zum Glück – und weil ich auf bequeme Technik abfahre – benutze ich Opera. Und WordPress. Also habe ich in den Einstellungen unter <a href="opera:config#ISP|Id">opera:config#ISP|Id</a> ein paar Zeichen in die User-Agent-Kennung eingetragen, mit denen ich mich im PHP-Skript wiedererkenne.</p>
<p>Diese Zeichenkette benutze ich in meinem Theme und auch im Labor, wo man <a href="http://labs.toscho.de/selbst/">den eigenen User-Agent-String ansehen</a> kann, um den Piwik-Code auszublenden.</p>
<p>Angenommen, die Zeichen wären <samp>ABC123DEF</samp>, dann sähe der Code so aus:</p>
<pre class="notranslate">function piwik_code()
{
    <i>// Das bin ich!</i>
    if ( strpos(<var>$_SERVER</var>['<code class="string">HTTP_USER_AGENT</code>'], '<strong><code class="string">ABC123DEF</code></strong>' ) )
    {
        return;
    }

    <var>$url</var> = '<code class="string">http</code>' . (empty(<var>$_SERVER</var>['<code class="string">HTTPS</code>']) ? '' : '<code class="string">s</code>') . '<code class="string">://p.toscho.de/</code>';
    ?&gt;
&lt;script type="<code class="string">text/javascript</code>" src="&lt;?php echo <var>$url</var>; ?&gt;<code class="string">piwik.js</code>"&gt;&lt;/script&gt;
&lt;script type="<code class="string">text/javascript</code>"&gt;
try {
var <var>piwikTracker</var> = Piwik.getTracker("&lt;?php echo <var>$url</var>; ?&gt;<code class="string">piwik.php</code>", 1);
<var>piwikTracker</var>.trackPageView();
<var>piwikTracker</var>.enableLinkTracking();
} catch( err ) {}
&lt;/script&gt;
&lt;noscript&gt;&lt;p&gt;&lt;img src="&lt;?php echo <var>$url</var>;
?&gt;<code class="string">piwik.php?idsite=1</code>" alt=""&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;?php
    return;
}</pre>
<p>Die Funktion <code class="notranslate">piwik_code()</code> rufe ich dann in der <code class="notranslate">footer.php</code> an passender Stelle auf. Und schon bin ich weg.</p>
<p><strong>Nachtrag:</strong> Einen anderen Weg zeigt der Folgeartikel: <a href="http://toscho.de/2010/per-cookie-aus-der-statistik/">Per Cookie aus der Statistik</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2010/opera-sich-selbst-aus-statistik-heraushalten/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>WordPress: Administrator mit PHP herausfinden</title>
		<link>http://toscho.de/2009/wordpress-administrator-php-herausfinden/</link>
		<comments>http://toscho.de/2009/wordpress-administrator-php-herausfinden/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 01:26:37 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Trickkiste]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1504</guid>
		<description><![CDATA[Die Funktion is_boss() offenbart den Chef.]]></description>
			<content:encoded><![CDATA[<p>Will man bestimmte Inhalte – etwa bei der Fehlersuche – nur dem Administrator ausgeben, so möchte man zunächst nach der Funktion <code><a href="http://codex.wordpress.org/Function_Reference/is_admin">is_admin()</a></code> greifen, die WordPress schon mitbringt. Die liefert aber nur dann <code>TRUE</code> zurück, wenn man eine Seite des Backends aufruft und hätte besser <code>is_backend()</code> geheißen …</p>
<p>Ich benutze einen Schnipsel, den ich aus dem WordPress-Forum gepult und in eine Funktion gegossen habe:</p>
<pre class="notranslate"><i>/**
 * Prüft, ob der Administrator die Seite ansieht.
 * @author »Kafkaesqui« &lt;<a href="http://guff.szub.net/">http://guff.szub.net/</a>&gt;
 * @see <a href="http://wordpress.org/support/topic/153260#post-681600">http://wordpress.org/support/topic/153260#post-681600</a>
 * @return bool
 */</i>
function is_boss()
{
    global <var>$user_ID</var>;

    if ( ! <var>$user_ID</var> or ! current_user_can(&#039;<code class="string">level_10</code>&#039;) )
    {
        return FALSE;
    }
    return TRUE;
}</pre>
<p><i lang="en">Level 10</i> hat nur der Adminstrator. Man kann diese Abfrage aber anpassen und auch die niederen Ränge mit speziellen Inhalten beglücken.<br />
Lektüre: <a href="http://codex.wordpress.org/Roles_and_Capabilities">Roles and Capabilities</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2009/wordpress-administrator-php-herausfinden/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Vereinfachte Mausgesten für Opera</title>
		<link>http://toscho.de/2009/vereinfachte-mausgesten-fuer-opera/</link>
		<comments>http://toscho.de/2009/vereinfachte-mausgesten-fuer-opera/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 12:23:00 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[Trickkiste]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1493</guid>
		<description><![CDATA[Mausgesten in Opera, meine eigene Konfiguration zum Download und mit genauer Beschreibung.]]></description>
			<content:encoded><![CDATA[<p>Seit <a href="http://www.opera.com/docs/history/">Version 5.1</a> reagiert Opera auf bestimmte Mausbewegungen mit vordefinierten Aktionen. Hält man beispielsweise die rechte Maustaste gedrückt und ruckt kurz nach links, dann geht man im Verlauf eine Seite zurück. Ein Backbutton, den man nicht suchen muß.</p>
<p>Außerdem kann man noch <i lang="en">FlipBack</i> und <i lang="en">FlipForward</i> benutzen. FlipBack heißt: Man hält die rechte Maustaste gedrückt und klickt kurz auf die linke. <i lang="en">FlipForward</i> mag sich jetzt jeder selbst austüfteln …</p>
<p>Die Aktionen können noch mit Tastatureingaben kombiniert werden; sie bieten leidenschaftlichen Fummlern eine Menge Zeitvertreib.</p>
<p>Wie die kleinen Beispiele zeigen, bringt Opera hier einige Redundanz mit. Die Standardkonfiguration kennt zwei Aktionen für das Schließen eines Fensters, drei für das einfache Vor- und Zurückspringen innerhalb des Verlaufs (eine Seite), drei für das schnelle Zurückblättern (Einstiegsseite einer Domain) und sechs für das schnelle Vorwärtsblättern (automatisches Finden der nächsten Seite).</p>
<p>Wer soll sich das merken?</p>
<p>Mich stört vor allem die Möglichkeit, durch eine »verirrte« Geste versehentlich das Fenster zu schließen; außerdem brauche ich oft ganz andere Befehle. Deshalb habe ich eine sehr einfache Konfiguration erstellt, die ich in jede Neuinstallation importiere.</p>
<p class="downloadlink"><a class='piwik_download' href="http://f.toscho.de/opera/mouse/toscho.mouse.ini">Download toscho.mouse.ini</a></p>
<p>Opera bietet eigenständig die Installation an. Das kann man jederzeit wieder aufheben; die Standardkonfiguration wird nicht überschrieben.</p>
<h2>Die Mausgesten im Überblick</h2>
<table>
<caption>Mausgesten im Browserfenster</caption>
<thead>
<tr>
<th>Geste</th>
<th>Aktion</th>
<th>Erklärung</th>
</tr>
</thead>
<tbody>
<tr>
<td>GestureLeft</td>
<td>Refresh display</td>
<td> Neuaufbau eine Seite <em>ohne Reload</em>. Hebt alle Aktionen auf, die man beispielsweise per Javascript auf der Seite ausgeführt hat.
      </td>
</tr>
<tr>
<td>GestureRight</td>
<td>Reload</td>
<td>Lädt die Seite komplett neu.</td>
</tr>
<tr>
<td>GestureRight shift</td>
<td>Reload stylesheets</td>
<td>
        Lädt nur Stylesheets nach. Hilfreich, wenn man gerade ein Userstylesheet anpaßt.
      </td>
</tr>
<tr>
<td>GestureUp</td>
<td>Go to start | Go to parent directory</td>
<td>
        Auf der Seite nach oben. Wenn man schon oben ist, springt man eine Verzeichnisebene höher. Funktioniert auch innerhalb einer Textarea.
      </td>
</tr>
<tr>
<td>GestureDown</td>
<td>Go to end</td>
<td>Zum Ende der Seite. Funktioniert auch innerhalb einer Textarea.</td>
</tr>
<tr>
<td>FlipBack</td>
<td>Back</td>
<td>Eine Seite zurück.</td>
</tr>
<tr>
<td>FlipBack shift</td>
<td>Rewind</td>
<td>
        Auf die erste Seite zurück, die man auf der aktuellen Domain angesehen hat.
      </td>
</tr>
<tr>
<td>FlipForward</td>
<td>Forward | Fast forward</td>
<td>
        Eine Seite vor. Entweder die nächste (wenn man gerade zurückgegangen ist) oder eine automatisch ermittelte. Welche das ist, weiß Opera oft sehr genau, etwa die nächste Seite einer Google-Suche.
      </td>
</tr>
<tr>
<td>FlipForward shift</td>
<td>Fast forward</td>
<td>Ignoriert den eigenen Verlauf und springt zum nächsten »automatischen« Ergebnis.</td>
</tr>
<tr>
<td>Button6</td>
<td>Back</td>
<td>Zurückbutton der Maus, so sie einen hat.</td>
</tr>
<tr>
<td>Button7</td>
<td>Forward</td>
<td>Na?</td>
</tr>
<tbody>
</table>
<table>
<caption>Mausgesten im Mailfenster und in Eingabefeldern</caption>
<thead>
<tr>
<th>Geste</th>
<th>Aktion</th>
<th>Erklärung</th>
</tr>
</thead>
<tbody>
<tr>
<td>FlipForward</td>
<td>Mark and select next unread</td>
<td>
        Markiert die aktuelle Mail als gelesen und springt zur nächsten ungelesenen.
      </td>
</tr>
<tr>
<td>FlipForward</td>
<td>Paste</td>
<td>Fügt den Inhalt der Zwischenablage in ein Eingabefeld ein.</td>
</tr>
<tr>
<td>FlipBack</td>
<td>Undo</td>
<td>Tja …</td>
</tr>
<tbody>
</table>
<p>Das versehentliche Schließen ist hiermit nicht mehr möglich. Wer jetzt Lust auf eine eigene INI bekommen hat: Im Opera-Wiki wartet eine umfangreiche, kommentierte <a href="http://operawiki.info/AllActionsListPlus">Liste aller verfügbaren Aktionen</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2009/vereinfachte-mausgesten-fuer-opera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blogdesign für Profis</title>
		<link>http://toscho.de/2009/blogdesign-fuer-profis/</link>
		<comments>http://toscho.de/2009/blogdesign-fuer-profis/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 19:09:27 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Trickkiste]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1479</guid>
		<description><![CDATA[Wie man sein Blog echt cool … ähm … verunstaltet.]]></description>
			<content:encoded><![CDATA[<p>Deinem Blog fehlt der Pfeffer? Du willst ihm einen professionellen Anstrich geben, weißt aber nicht wie? Hier sind sie: die geheimen Tricks der Profis.</p>
<ul>
<li>Mach die <strong>Schrift</strong> <small>ganz, <small>ganz <small><a href="http://toscho.de/2009/schriftgroesse-meine-praxis/">klein</a>.</small></small></small> Dann hast du mehr Platz für Werbung.<br />
Wer doch etwas lesen will, kann ja einfach ein bißchen näher heranrücken oder mit der Vergrößerungsfunktion seines Browsers herumfummeln. Macht jeder gerne.</li>
<li>Packe alles in den <strong><a href="http://toscho.de/2009/titel-voran/">Titel</a></strong>, das irgendwie wichtig sein könnte: Kategorien, wichtige Suchworte und ein bißchen Werbung.<br />
Wer ein Lesezeichen setzen will, kann ja selbst nacharbeiten, wenn ihm das nicht paßt. Oder darauf verzichten.</li>
<li>Du brauchst kein <strong>Druckstylesheet</strong>. Und wenn doch, dann zumindest keinen Umbruch vor den Kommentaren. Laß unbedingt die Werbung drin; die ist so schön bunt und lockert den schwarzen Hintergrund auf.</li>
<li><strong>Verlinke</strong> einfach alles. Überall. Auf jeder Seite jede Kategorie, jedes Schlagwort, die 100 »beliebtesten« Artikel, die 100 am häufigsten kommentierten, 50 Werbepartner, deine Lieblingslinks und deine letzten 20 Tweets. Und die Seite, die der Leser <a href="http://toscho.de/2009/deppenlink-entfernen/">gerade sieht</a>. Dann findet er sie schneller wieder. Insgesamt wirkt deine deine Seite dann bestimmt sehr (wert)voll.</li>
<li>Links sind zwar eine tolle Sache, sehen aber doof aus. Kein Problem: Per CSS kannst du Links prima in den Rest des Textes eingliedern. Bau einfach die <strong>Unterstriche</strong> aus, und gib besuchten Links die gleiche <strong>Farbe</strong> wie unbesuchten: die des Textes. Und schon sieht die Linkwüste ein bißchen freundlicher aus.</li>
<li>Links auf <strong>fremde Seiten</strong> lassen sich übrigens sehr einfach mit dem Attribut <code>target="_blank"</code> vergolden. Wir wollen doch klarstellen, wer hier das Sagen hat, oder?</li>
<li>Warum nur einen <strong>Statistikdienst</strong>? Der könnte irgendwann <a href="https://www.datenschutzzentrum.de/tracking/">verboten</a> werden, da ist es sicherer, gleich zehn zu benutzen – die können ja nicht alle rechtswidrig sein. Und wer dein Blog besucht, verzichtet doch automatisch auf seine Privatsphäre, denn es ist ja öffentlich. Ladezeit? Ach was. Heute hat doch jeder DSL.</li>
<li>Du bist ein Genie, deine Artikel zeitlos gültig. Wozu also die Leser mit der Information verwirren, <strong>wann</strong> du einen Artikel geschrieben hast?<br />
Wenn du doch ein <strong>Datum</strong> verrätst, dann verstecke es gut. Direkt neben oder unter der Überschrift ist ein sehr schlechter Platz, da lenkt man nur von der Werbung ab.</li>
<li>Teile deine Artikel in <strong>mehrere Seiten</strong>. Leser blättern gerne, denn das schafft so eine … literarische Atmosphäre. Außerdem verdienst du dann mehr Geld mit deiner Werbung.</li>
</ul>
<p>Nächste Woche in dieser Sendung: Wie man seine Kommentatoren züchtigt.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2009/blogdesign-fuer-profis/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>WordPress: Parallele Widgets</title>
		<link>http://toscho.de/2009/wordpress-parallele-widgets/</link>
		<comments>http://toscho.de/2009/wordpress-parallele-widgets/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 13:53:22 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Trickkiste]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1397</guid>
		<description><![CDATA[Wie man dem Nutzer mehr Spielraum beim Umgang mit Widgets gibt und dem Designer die Arbeit erleichtert.]]></description>
			<content:encoded><![CDATA[<p>Widgets sind Boxen in <a href="http://toscho.de/angebote/wordpress/themes/">WordPress-Themes</a>, die wir im Backend mit beliebigem Inhalt befüllen können. Vorteil: Wir können uns im Theme auf die reine Ausgabelogik konzentrieren es so in mehreren <a href="http://toscho.de/angebote/wordpress/installation/">Installationen</a> <a href="http://forum.wordpress-deutschland.org/design/56233-footer-mehrsprachig-realisieren.html">parallel benutzen</a>.</p>
<p>Wirklich cool finde ich aber mehrere Widgets <em>an derselben Stelle</em>. So möchte ich vielleicht auf der Startseite andere Inhalte in der Sidebar haben als auf den Unterseiten. Oder neben Artikeln sollen bestimmte Hinweise stehen, die neben »statischen« Seiten keinen Sinn ergäben.</p>
<p>Sehen wir uns das erste Beispiel an, den superspeziellen Spezialinhalt für die Startseite.<br />
Dazu registrieren wir zunächst zwei Widgets in der <code>functions.php</code> des Themes:</p>
<pre class="notranslate">register_sidebar(
    array(
            &#039;<code class="string">name</code>&#039;            =&gt; &#039;<code class="string">Right Sidebar Home</code>&#039;,
            &#039;<code class="string">before_widget</code>&#039;   =&gt; &#039;<code class="string">&lt;li id=&quot;%1$s&quot; class=&quot;widget %2$s&quot;&gt;</code>&#039;,
            &#039;<code class="string">after_widget</code>&#039;    =&gt; &#039;<code class="string">&lt;/li&gt;</code>&#039;,
            &#039;<code class="string">before_title</code>&#039;    =&gt; &#039;<code class="string">&lt;h2 class=&quot;widgettitle&quot;&gt;</code>&#039;,
            &#039;<code class="string">after_title</code>&#039;     =&gt; &#039;<code class="string">&lt;/h2&gt;</code>&#039;,
        )
);
register_sidebar(
    array(
            &#039;<code class="string">name</code>&#039;            =&gt; &#039;<code class="string">Right Sidebar General</code>&#039;,
            &#039;<code class="string">before_widget</code>&#039;   =&gt; &#039;<code class="string">&lt;li id=&quot;%1$s&quot; class=&quot;widget %2$s&quot;&gt;</code>&#039;,
            &#039;<code class="string">after_widget</code>&#039;    =&gt; &#039;<code class="string">&lt;/li&gt;</code>&#039;,
            &#039;<code class="string">before_title</code>&#039;    =&gt; &#039;<code class="string">&lt;h2 class=&quot;widgettitle&quot;&gt;</code>&#039;,
            &#039;<code class="string">after_title</code>&#039;     =&gt; &#039;<code class="string">&lt;/h2&gt;</code>&#039;,
        )
);</pre>
<p><img width="312" height="284" class="border alignright" src="http://img.toscho.de/screenshots/wordpress/wordpress-widgets-1.png" alt="Widget-Auswahl" /> Diese beiden Widgets sehen wir jetzt im Backend unter »Design/Widgets«.<br />
Mit <a href="http://toscho.de/2009/wordpress-kleine-fallen/">ein wenig Glück</a> können wir sie dort auch bearbeiten.</p>
<p>Jetzt müssen wir sie im Theme (<code>sidebar.php</code>) einbauen; dazu brauchen wir die internen <a href="http://codex.wordpress.org/Conditional_Tags">Conditional Tags</a>. Hier <code><a href="http://codex.wordpress.org/Function_Reference/is_front_page">is_front_page()</a></code>.</p>
<pre class="notranslate">&lt;ul&gt;
&lt;?php
if ( is_front_page() and !dynamic_sidebar(&#039;<code class="string">Right Sidebar Home</code>&#039;) )
{
    if( !dynamic_sidebar(&#039;<code class="string">Right Sidebar General</code>&#039;) )
    {
        wp_list_categories(&#039;<code class="string">show_count=0&amp;title_li=&lt;h2&gt;Themen&lt;/h2&gt;</code>&#039;);
        ?&gt;

        &lt;li&gt;
            &lt;h2&gt;Archiv&lt;/h2&gt;
            &lt;ul&gt;
                &lt;?php wp_get_archives(&#039;<code class="string">type=monthly</code>&#039;); ?&gt;

            &lt;/ul&gt;
        &lt;/li&gt;
        &lt;?php
    }
}
elseif ( !is_front_page() and !dynamic_sidebar(&#039;<code class="string">Right Sidebar General</code>&#039;) )
{
    wp_list_categories(&#039;<code class="string">show_count=0&amp;title_li=&lt;h2&gt;Themen&lt;/h2&gt;</code>&#039;);
    ?&gt;

    &lt;li&gt;
        &lt;h2&gt;Archiv&lt;/h2&gt;
        &lt;ul&gt;
            &lt;?php wp_get_archives(&#039;<code class="string">type=monthly</code>&#039;); ?&gt;

        &lt;/ul&gt;
    &lt;/li&gt;

    &lt;?php
}
?&gt;

&lt;/ul&gt;</pre>
<p>Was passiert jetzt? Erst fragen wir, ob wir gerade die Startseite ausgeben und ob das passende Widget ausgefüllt wurde. Trifft einer der beiden Punkte nicht zu, fragen wir nach dem Inhalt der allgemeinen Sidebar. Wurde auch die noch nicht ausgefüllt, geben wir »feste« Inhalte aus.</p>
<p>Dieses Prinzip können wir auf alle Ausgabetypen (Seiten, Archive, Suchergebnisse) ausdehnen; auch die »Verschachtelungstiefe« darf unbegrenzt tief wachsen. Das mag selten nötig werden; aber die <em>Möglichkeit</em> allein … rockt.</p>
<p>Der Themenutzer kann jetzt flexibler mit seiner Website umgehen, und wir sparen uns den schlimmsten Teil der Designarbeit: Das Justieren winziger, oft unbeständiger Details. Ein Gewinn für alle Seiten.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2009/wordpress-parallele-widgets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Opera unter OpenSuse als Standardbrowser</title>
		<link>http://toscho.de/2009/opera-unter-opensuse-als-standardbrowser/</link>
		<comments>http://toscho.de/2009/opera-unter-opensuse-als-standardbrowser/#comments</comments>
		<pubDate>Sun, 10 May 2009 14:53:28 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[Trickkiste]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1012</guid>
		<description><![CDATA[Anleitung in drei Schritten.]]></description>
			<content:encoded><![CDATA[<p>Dieser Artikel gilt für OpenSuse 11.1 mit KDE 4.1.</p>
<p><img src="http://toscho.de/wp-content/uploads/2009/05/opera-opensuse-150.png" alt="" title="Opera OpenSuse" width="150" height="150" class="alignright size-full wp-image-1691" />Opera ist installiert, aber wenn du eine URL anklickst, landet sie immer noch bei Firefox oder Konqueror? Das muß nicht sein.</p>
<ol>
<li>Im Startmenu »Arbeitsfläche einrichten« öffnen.</li>
<li>Unter »Standard-Komponenten« jeweils für »Email-Client« und »Web Browser« mit dem Auswahlbutton <kbd>[…]</kbd> Opera aus »Internet/Webbrowser« auswählen.</li>
<li>»Anwenden« klicken. Fertig.</li>
</ol>
<p>Ab jetzt landet jede angeklickte URL bei Opera; Linux macht wieder Spaß. Das funktioniert natürlich auch mit jedem anderen Browser und E-Mail-Programm wie Firefox, Thunderbird, SeaMonkey, Epiphany oder Konqueror.</p>
<p>Mir ist eben aufgefallen, daß die Googlesuche zu dieser Frage nur Anleitungen für KDE 3 ausspuckt; <a title="Opera Knowledge Base, englisch" href="http://www.opera.com/support/kb/">Operas Wissenssammlung</a> gar nichts.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2009/opera-unter-opensuse-als-standardbrowser/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
