<?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>dynamicinternet &#187; Tutorials</title>
	<atom:link href="http://dynamicinternet.eu/blog/category/tutorials/feed/" rel="self" type="application/rss+xml" />
	<link>http://dynamicinternet.eu</link>
	<description>Wir machen Ihr Web dynamisch!</description>
	<lastBuildDate>Mon, 30 Aug 2010 15:38:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Startseite und Blogseite in der Navigation anzeigen</title>
		<link>http://dynamicinternet.eu/blog/2008-02-14/startseite-und-blogseite-in-der-navigation-anzeigen/</link>
		<comments>http://dynamicinternet.eu/blog/2008-02-14/startseite-und-blogseite-in-der-navigation-anzeigen/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 20:21:44 +0000</pubDate>
		<dc:creator>Micha</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://dynamicinternet.eu/blog/2008-02-14/startseite-und-blogseite-in-der-navigation-anzeigen/</guid>
		<description><![CDATA[Mich fragte vor ein paar Tagen ein sehr netter Kollege, wie man den &#8220;Blogbereich&#8221; in eine Navigation zwischen statischen Seiten integriert. Da ich ja auch ein netter Kollege bin, hab ich ihm nat&#252;rlich geholfen. Damit nun in Deutschland wieder Wettbewerbsgleichheit herrscht, verrate ich es euch allen. Stellen wir uns vor, wir sollen einer Firma eine [...]]]></description>
			<content:encoded><![CDATA[<p>Mich fragte vor ein paar Tagen ein sehr netter Kollege, wie man den &#8220;Blogbereich&#8221; in eine Navigation zwischen statischen Seiten integriert. Da ich ja auch ein netter Kollege bin, hab ich ihm nat&#252;rlich geholfen.<br />
Damit nun in Deutschland wieder Wettbewerbsgleichheit herrscht, verrate ich es euch allen.</p>
<p><span id="more-275"></span></p>
<p>Stellen wir uns vor, wir sollen einer Firma eine Webseite mit WordPress bauen. Er m&#246;chte ein System, was ihn in die Lage versetzt, selbst Inhalte zu erstellen bzw. zu ver&#228;ndern. Weiterhin m&#246;chte er Neuigkeiten aus seiner Branche und besondere Angebote auf einer News-Seite gesondert darstellen und pflegen. Der Newsbereich ist also eigentlich der Blog. Die Seitenstruktur halten wir f&#252;r dieses Beispiel einfach:</p>
<ul>
<li>Home</li>
<li>News</li>
<li>Leistungen</li>
<li>Kontakt</li>
<li>Impressum</li>
</ul>
<p>Wie bekommen wir das nun hin? Die Punkte Leistungen, Kontakt und Impressum werden als statische Seiten realisiert. Also im Adminbereich auf Schreiben-&gt;Seite schreiben gehen und diese Seiten als Hauptseiten anlegen. Unter Reihenfolge kann man die Reihenfolge der Seiten in der Navigation festlegen.</p>
<p>F&#252;r die Topnavigation notieren wir im Quelltext:</p>
<pre>
<code>
&lt;ul&gt;
&lt;?php wp_list_pages('depth=1&amp;title_li=0&amp;sort_colunm=menu_order'); ?&gt;
&lt;/ul&gt;
</code></pre>
<p>und sehen die Men&#252;punkte Leistungen, Kontakt und Impressum. <strong>depth=1</strong> bedeutet, dass wir uns nur auf die Hauptseiten beschr&#228;nken, <strong>title_li=0</strong> bedeutet, dass eine Liste ohne &#220;berschrift ausgegeben werden soll und <strong>sort_colunm=menu_order</strong> sortiert nach der Reihenfolge, wie sie beim Schreiben der Seiten eingestellt worden ist.</p>
<p>Jetzt fehlt eine Startseite. Wir schreiben eine neue Seite mit dem Seitentitel Home und lassen den Inhalt leer. Wenn wir die Startseite nun anklicken, sehen wir die &#220;berschrift Home, eventuell noch Datum und Autor, je nachdem, wie unsere page.php aufgebaut ist. Das wollen wir nat&#252;rlich nicht. Wir legen eine neue Datei in unserem Theme an und nennen sie startseite.php (der Name ist egal, nur keine Namen verwenden, die WordPress verwendet.). Ganz an den Anfang der Datei kommt folgender Code:</p>
<pre>
<code>
&lt;?php
/*
Template Name:  Startseite
*/
?&gt;
</code></pre>
<p>WordPress erkennt an diesem Code, das es sich um ein spezielles Template handelt und stellt es beim Schreiben einer Seite unter Seiten-Template zur Verf&#252;gung. Dieses Template k&#246;nnen wir nach unseren Anforderungen gestalten. Wir k&#246;nnen die letzten News listen, normalen statischen HTML-Code verwenden, irgendwelche WordPress-Funktionen, was immer wir wollen.<br />
Jetzt m&#252;ssen wir lediglich die Seite Home noch einmal in den Editor laden und als Seiten-Template Startseite ausw&#228;hlen und speichern.</p>
<p><img src="http://dynamicinternet.eu/blog/wp-content/uploads/2008/02/template.jpg" alt="Screenshot der Seitentemplate" /></p>
<p>Damit die Home auch wirklich die Startseite ist, m&#252;ssen wir unter Einstellungen-&gt;Lesen die Seite Home als Startseite festlegen.</p>
<p><img src="http://dynamicinternet.eu/blog/wp-content/uploads/2008/02/seiteneinstellung-1.jpg" alt="Screenshot der Seiteneinstellungen" /></p>
<p>Jetzt haben wir eine sch&#246;ne Startseite, aber der Blogbereich, den wir als News nutzen wollen, ist weg. Wie k&#246;nnen wir den aufrufen? Ganz einfach. Wir legen eine neue Datei an, nennen sie news.php und kopieren folgenden Code hinein:</p>
<pre>
<code>
&lt;?php
/*
Template Name:  News
*/
load_template( TEMPLATEPATH . '/index.php' );
?&gt;
</code></pre>
<p>Dieses Template ist nichts weiter als eine Dummyseite, welche die index.php l&#228;d, nur das wir die Dummyseite &#8220;greifen&#8221; k&#246;nnen.</p>
<p>Jetzt schreiben wir eine neue Seite, nennen sie in der &#220;berschrift News, lassen den Inhalt leer und w&#228;hlen bei Seiten-Template News und ver&#246;ffentlichen die Seite. Danach gehen wir noch einmal in Einstellungen-&gt;Lesen und w&#228;hlen bei Beitragsseite News aus.</p>
<p><img src="http://dynamicinternet.eu/blog/wp-content/uploads/2008/02/seiteneinstellung-2.jpg" alt="Screenshot der Seiteneinstellungen" /></p>
<p>Wir k&#246;nnen jetzt noch in Einstellungen-&gt;Permalinks auf benutzerdefiniert klicken und ein <strong>/news</strong> vor <strong>/%year%/%monthnum%/%day%/%postname%/</strong> setzten. Damit stehen die Newsbeitr&#228;ge optisch unter der URL domain.de/news/ .</p>
<p>Damit haben wir alle Anforderungen erf&#252;llt und unser Kunde kann nun seine Seiten mit Inhalten versehen. Er freut sich bestimmt wie ein Schneek&#246;nig, das er kein Geld f&#252;r das &#196;ndern von HTML Seiten ausgeben mu&#223;. Was der Gute jedoch noch nicht wei&#223;&#8230; wir werden ihm alle 3 Monate eine Rechnung f&#252;r ein WordPress-Update schreiben <img src='http://dynamicinternet.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Noch ein Tipp. Man wei&#223; ja manchmal nie, an was die Kunden &#252;berall so rumschrauben, l&#246;schen und umbenennen. Um herauszufinden, welcher Art die &#8220;Frontpage&#8221; oder die &#8220;Blogpage&#8221; ist, ohne h&#228;ndisch eine ID einzutragen, kann man folgendes verwenden:</p>
<ul>
<li><strong>get_option(&#8216;show_on_front&#8217;)</strong> zeigt an , ob die Frontpage vom Typ <strong>page</strong> oder <strong>post</strong> ist</li>
<li><strong>get_option(&#8216;page_on_front&#8217;)</strong> liefert die <strong>ID</strong> der <strong>page</strong>, falls eine statische Seite die Frontpage ist.</li>
<li><strong>get_option(&#8216;page_for_posts&#8217;)</strong> liefert die <strong>ID</strong> der <strong>page</strong>, die die Artikel ausgibt.</li>
</ul>
<p>Im Code sieht das dann ungef&#228;hr so aus:</p>
<pre>
<code>
&lt;?php
if('page' == get_option('show_on_front')){
	$listpageotions = '&amp;exclude=' . get_option('page_on_front').'';
} elseif ('posts' == get_option('show_on_front')) {
	$listpageotions = '&amp;exclude=' . get_option('page_for_posts').'';
} else {
	$listpageotions = '';
}
&lt;ul&gt;
&lt;li&gt;"&gt;&lt;a href="&lt;?php bloginfo('url')?&gt;/"&gt;Startseite&lt;/a&gt;&lt;/li&gt;
&lt;?php wp_list_pages('depth=1&amp;title_li=0&amp;sort_column=menu_order'.$listpageotions); ?&gt;
&lt;/ul&gt;
?&gt;
</code></pre>
<p>Damit haben wir die Startseite, egal welche es ist, aus wp_list_pages ausgeschlossen, ohne eine ID zu kennen und k&#246;nnen mit bloginfo(&#8216;url&#8217;) die Startseite manuell notieren.</p>
<hr /><ul><li><a href="http://dynamicinternet.eu/blog/2008-10-01/probleme-erkennen/" rel="bookmark" title="Permanent Link: Probleme erkennen" class="liinternal">Probleme erkennen</a></li><li><a href="http://dynamicinternet.eu/blog/2008-09-14/wp_page_menu-in-wordpress-27/" rel="bookmark" title="Permanent Link: wp_page_menu in WordPress 2.7" class="liinternal">wp_page_menu in WordPress 2.7</a></li><li><a href="http://dynamicinternet.eu/blog/2009-05-13/seitenpagination-bei-get_posts/" rel="bookmark" title="Permanent Link: Seitenpagination bei get_posts" class="liinternal">Seitenpagination bei get_posts</a></li><li><a href="http://dynamicinternet.eu/blog/2009-01-03/wordpress-private-seite-navigation/" rel="bookmark" title="Permanent Link: WordPress: private Seite in der Navigation" class="liinternal">WordPress: private Seite in der Navigation</a></li><li><a href="http://dynamicinternet.eu/blog/2008-10-03/posts-als-hilfsmittel-fuer-pages/" rel="bookmark" title="Permanent Link: Posts als Hilfsmittel f&#252;r Pages" class="liinternal">Posts als Hilfsmittel f&#252;r Pages</a></li></ul><hr /><small>Copyright &copy; 2007-2010 dynamicinternet d9f9df690f8b5bb6036dfbdb77a9bd79</small>]]></content:encoded>
			<wfw:commentRss>http://dynamicinternet.eu/blog/2008-02-14/startseite-und-blogseite-in-der-navigation-anzeigen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ext JS 2.0 Grouping Grid</title>
		<link>http://dynamicinternet.eu/blog/2007-12-21/ext-js-20-grouping-grid/</link>
		<comments>http://dynamicinternet.eu/blog/2007-12-21/ext-js-20-grouping-grid/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 16:42:41 +0000</pubDate>
		<dc:creator>Micha</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[ext]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://dynamicinternet.eu/blog/2007-12-21/ext-js-20-grouping-grid/</guid>
		<description><![CDATA[Es wird mal wieder Zeit, etwas &#252;ber die Ext JS library zu schreiben. Dieses Framework fasziniert mich seit Version 0.3, als Jack Slocum alles noch allein programmierte. Schon damals konnte man sein Streben nach Desktop-&#228;hnlichen Anwendungen erkennen. Mit der aktuellen Version 2.0 ist ihm das auch wirklich sehr gut gelungen. Ich glaube, keine andere Ajax [...]]]></description>
			<content:encoded><![CDATA[<p>Es wird mal wieder Zeit, etwas &#252;ber die <a href="http://extjs.com" title="Ext JS Homepage" class="liexternal">Ext JS library</a> zu schreiben. Dieses Framework fasziniert mich seit Version 0.3, als Jack Slocum alles noch allein programmierte.<br />
Schon damals konnte man sein Streben nach Desktop-&#228;hnlichen Anwendungen erkennen. Mit der aktuellen Version 2.0 ist ihm das auch wirklich sehr gut gelungen. Ich glaube, keine andere Ajax Bibliothek ist f&#252;r Backends so hervorragend geeignet.</p>
<p>Von den zahlreichen neuen Widgets der Ext hat mir besonders das Grouping Grid gefallen. Damit lassen sich sehr &#252;bersichtliche Zusammenfassungen realisieren.</p>
<p><img src="http://dynamicinternet.eu/blog/wp-content/uploads/2007/12/ext-grouping-grid.jpg" alt="Screenshot Ext Grouping Grid Widget" /><br />
<span id="more-240"></span></p>
<p>Ich habe mir f&#252;r dieses Beispiel etwas mit Autos ausgedacht. Hier k&#246;nnen wir nach Hersteller, nach Motorart und nach Baujahr gruppieren. Der fiktive Autoh&#228;ndler hat mit den M&#246;glichkeiten des Grouping Grid eine super &#220;bersicht &#252;ber die Struktur seines Fahrzeugbestands.<br />
Also bauen wir dem Autoh&#228;ndler sein ultimatives Tool.</p>
<h3>Vorbereitungen</h3>
<p>Wir ben&#246;tigen einen lokalen Webserver (<a href="http://apachefriends.org" title="XAMPP Homepage" class="liexternal">XAMPP</a> oder &#228;hnliches) und erstellen in dem Verzeichnis htdocs ein neues Verzeichnis grouping-grid. In dieses Verzeichnis entpacken wir das komplette <a href="http://extjs.com/download" title="Download Ext" class="liexternal">Ext 2.0 Downloadpaket</a>. Dann erzeugen wir ein HTML Grundger&#252;st und speichern es mit dem Namen grouping-grid.php ab. Da wir das Grid direkt in den Body rendern, bruachen wir kein zus&#228;tzliches Markup. Wir binden lediglich die ben&#246;tigten Stylesheets und Scriptbibliotheken ein.</p>
<pre>
<code>
&lt;?php
$url = "http://localhost/grouping-grid";
?&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /&gt;
&lt;title&gt;A Ext JS 2.0 Grouping Grid&lt;/title&gt;
&lt;link rel="stylesheet" type="text/css" href="&lt;?php echo $url; ?&gt;/ext-2.0/resources/css/ext-all.css" /&gt;
&lt;script type="text/javascript" src="&lt;?php echo $url; ?&gt;/ext-2.0/adapter/ext/ext-base.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="&lt;?php echo $url; ?&gt;/ext-2.0/ext-all.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="grouping.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
	Ext.BLANK_IMAGE_URL = '&lt;?php echo $url; ?&gt;/ext-2.0/resources/images/default/s.gif';
&lt;/script&gt;
&lt;style type="text/css"&gt;
	.icon-grid {
		background-image:url(&lt;?php echo $url; ?&gt;/ext-2.0/examples/shared/icons/fam/grid.png) !important;
    }
	.x-panel {margin:40px}
&lt;/style&gt;
&lt;/head&gt;
</code></pre>
<p>Ich habe extra eine PHP Seite gew&#228;hlt, da ich das Beispiel anschlie&#223;end online stellen m&#246;chte. Damit ich nicht jeden einzelnen Pfad editieren mu&#223;, habe ich in der ersten Zeile des Dokuments die Variable $url definiert, die ich sp&#228;ter durch meine Blog-Url ersetzten werde. Ihr k&#246;nnt genauso gut eine HTML Datei benutzen und die Pfade manuell notieren.<br />
Wichtig ist nur die richtige Reihenfolge der Scripte. Die Datei grouping.js m&#252;ssen wir noch anlegen.<br />
Die Ext.BLANK_IMAGE_URL geh&#246;rt normalerweise in die Ext.onReady Funktion, da ich das Pfad-Problem umgehen m&#246;chte, habe ich sie hier im Dokumentkopf notiert. Es ist der Pfad zu einer 1&#215;1 Pixel transparenten GIF Datei. Diese wird in unserem Grid f&#252;r die automatisch erzeugten Grid-Menue-Icons ben&#246;tigt.<br />
Abschlie&#223;end habe ich noch ein Stylesheet mit den Klassen icon-grid und x-panel definiert. icon-grid l&#228;d ein kleines Hintergrundbild als Icon neben der Grid&#252;berschrift. Unser Grid wird sp&#228;ter in einem Div mit der Klasse x-panel erzeugt. Ich habe einen Abstand von 40px angegeben. Damit ist die Seite f&#252;r unser Grid fertig.</p>
<h3>Das Javascript</h3>
<p>Wir erzeugen eine leere Datei und speichern sie als grouping.js ab. Dann f&#252;gen wir folgenden Code ein:</p>
<pre>
<code>
Ext.onReady(function(){
	alert("Ext geladen....");
});
</code></pre>
<p>Jetzt rufen wir im Browser die Datei grouping-grid.php auf und es sollte die Meldung &#8220;Ext geladen&#8230;.&#8221; erscheinen. Falls nicht, bitte die Scriptpfade &#252;berpr&#252;fen.</p>
<p>Da ich online nicht extra eine Datenbank aufsetzten wollte, habe ich mich f&#252;r ein Array mit Daten entschieden. Dieses Array kommt unter die Ext.onReady Funktion.</p>
<pre>
<code>
Ext.grid.kfzData = [
	[1,'Volvo','S60','2002','69300','13800,- €','Diesel'],
	[2,'BMW','323i','1999','74700','14780,- €','Benzin'],
	[3,'BMW','316','2003','13600','18330,- €','Benzin'],
	[4,'BMW','525i Touring','2005','2500','54050,- €','Benzin'],
	[5,'Mercedes-Benz','E 270 CDI','2002','4520','27900,- €','Diesel'],
	[6,'Renault','Laguna 2.0','1999','75000','4950,- €','Benzin'],
	[7,'Renault','Modus','2004','1030','9999,- €','Benzin'],
	[8,'Mercedes-Benz','C 220 CDI','2001','79100','19900,- €','Diesel'],
	[9,'Mercedes-Benz','SLK 200','2002','65000','24900,- €','Benzin'],
	[10,'Mercedes-Benz','ML 55','2001','105000','29900,- €','Benzin'],
	[11,'Ferrari','360 Modena','2005','15000','119900,- €','Benzin']
];
</code></pre>
<p>Wir haben in dem Array pro Datensatz die Felder id, hersteller, modell, baujahr, kilometer, preis und motor. Um diese Daten einlesen zu k&#246;nnen, ben&#246;tigen wir den Ext-ArrayReader.</p>
<pre>
<code>
Ext.onReady(function(){

	Ext.QuickTips.init();

	var xg = Ext.grid;

	var reader = new Ext.data.ArrayReader({}, [
		{name: 'id'},
		{name: 'hersteller'},
		{name: 'modell'},
		{name: 'baujahr'},
		{name: 'kilometer'},
		{name: 'preis'},
		{name: 'motor'}
	]);

});
</code></pre>
<p>Wir m&#252;ssen dem ArrayReader die Felder exakt in der Reihenfolge zuweisen, wie sie im Array definiert sind, da ja kein Feld id oder hersteller existiert. Kommen wir nun zu dem Grid. Das Grid selbst ist eigentlich nichts weiter als eine Konfiguration von Parametern. Wir ben&#246;tigen nicht eine einzige selbstgeschriebene Funktion, um das Beispiel auszuf&#252;hren. Hier der Code:</p>
<pre>
<code>
var grid = new xg.GridPanel({
	store: new Ext.data.GroupingStore({
		reader: reader,
		data: xg.kfzData,
		sortInfo:{field: 'hersteller', direction: "ASC"},
		groupField:'hersteller'
	}),
	columns: [
		{id:'id',header: "Hersteller", width: 40, sortable: true, dataIndex: 'hersteller'},
	    {header: "Modell", width: 40, sortable: true, dataIndex: 'modell'},
		{header: "Motor", width: 20, sortable: true, dataIndex: 'motor'},
		{header: "Baujahr", width: 20, sortable: true, dataIndex: 'baujahr', align: 'right'},
		{header: "Kilometer", width: 20, sortable: true, dataIndex: 'kilometer', align: 'right'},
		{header: "Preis", width: 20, sortable: true, dataIndex: 'preis', align: 'right'}
	],
	view: new Ext.grid.GroupingView({
		forceFit:true,
		groupTextTpl: '{text} ({[values.rs.length]} {[values.rs.length &gt; 1 ? "Fahrzeuge" : "Fahrzeug"]})'
	}),
	frame:true,
	width: 700,
	height: 450,
	collapsible: true,
	animCollapse: false,
	title: 'Mein Fahrzeugbestand',
	iconCls: 'icon-grid',
	renderTo: document.body
});
</code></pre>
<p>Einfach, oder? Wir haben den GroupingStore definiert, die Spalten unseres Grids, einen GroupingView sowie ein paar Einstellungen zum Grid. Alles andere handelt die Ext. S&#228;mtliche Kofigurationsparameter findet ihr in der Ext API Dokumentation, welchhe dem Downloadpaket beliegt und wirklich sehr gut und ausf&#252;hrlich ist.</p>
<p>Wenn wir uns das Grid jetzt anschauen, sehen wir, das eine Menge Funktionalit&#228;t drin steckt. Wir k&#246;nnen das Grid auf- und zuklappen, die Spalten vergr&#246;&#223;ern/verkleinern. Wir k&#246;nnen jede Spalte auf- und absteigend sortieren. Die Gruppen k&#246;nnen auf- und eingeklappt werden. Ein Klick auf den rechten Pfeil im Spaltenkopf bringt ein Men&#252; zum Vorschein. Dort k&#246;nnen einzelne Spalten ein- btzw. ausgeblendet werden. Mit Show in Groups kann die Gruppierung aufgehoben bzw. erzeugt werden und mit Group this Field wird nach der gew&#228;hlten Spalte gruppiert. Einfach genial.</p>
<p><a href="http://dynamicinternet.eu/playpen/tutorials/grid/grouping-grid/grouping-grid.php" title="zur Onlinedemo" class="liinternal">Onlinedemo Ext 2.0 Grouping Grid</a></p>
<hr /><ul><li><a href="http://dynamicinternet.eu/blog/2007-09-06/ext-js-news-02/" rel="bookmark" title="Permanent Link: Ext JS News 02" class="liinternal">Ext JS News 02</a></li><li><a href="http://dynamicinternet.eu/blog/2007-03-26/ein-xml-grid-mit-der-ext-library/" rel="bookmark" title="Permanent Link: Ein XML Grid mit der Ext Library" class="liinternal">Ein XML Grid mit der Ext Library</a></li><li><a href="http://dynamicinternet.eu/blog/2009-05-01/960-gridder-bookmarklet/" rel="bookmark" title="Permanent Link: 960 Gridder Bookmarklet" class="liinternal">960 Gridder Bookmarklet</a></li><li><a href="http://dynamicinternet.eu/blog/2007-04-19/templates-mit-der-ext-library/" rel="bookmark" title="Permanent Link: Templates mit der Ext Library" class="liinternal">Templates mit der Ext Library</a></li><li><a href="http://dynamicinternet.eu/blog/2007-03-17/jack-slocums-ext-ajax-library/" rel="bookmark" title="Permanent Link: Jack Slocums Ext Ajax Library" class="liinternal">Jack Slocums Ext Ajax Library</a></li></ul><hr /><small>Copyright &copy; 2007-2010 dynamicinternet d9f9df690f8b5bb6036dfbdb77a9bd79</small>]]></content:encoded>
			<wfw:commentRss>http://dynamicinternet.eu/blog/2007-12-21/ext-js-20-grouping-grid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bilder f&#252;r statische WordPress Seiten</title>
		<link>http://dynamicinternet.eu/blog/2007-11-26/bilder-fuer-statische-wordpress-seiten/</link>
		<comments>http://dynamicinternet.eu/blog/2007-11-26/bilder-fuer-statische-wordpress-seiten/#comments</comments>
		<pubDate>Mon, 26 Nov 2007 17:54:07 +0000</pubDate>
		<dc:creator>Micha</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[custom fields]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://dynamicinternet.eu/blog/2007-11-26/bilder-fuer-statische-wordpress-seiten/</guid>
		<description><![CDATA[Jared fragt nach einer L&#246;sung, um statischen Seiten in WordPress ein Bild zuzuordnen und verweist auf ein Beitrag, wo Kategorien ein Bild zugeordnet wird. Ich habe meinen Tutorial- und WordPress Theme Seiten auch ein Bild und eine Seitenbeschreibung f&#252;r die &#220;bersicht zugeordnet, jedoch habe ich es mit benutzerdefinierten Feldern realisiert. Die Vorgehensweise ist recht einfach. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jared2.de/" class="liexternal">Jared</a> fragt nach einer <a href="http://dynamicinternet.eu/blog/2007-07-17/wordpress-seitennavigation/#comment-405" class="liinternal">L&#246;sung</a>, um statischen Seiten in WordPress ein Bild zuzuordnen und verweist auf ein <a href="http://www.nasendackel.de/2006/12/14/kategoriebild-update/" class="liexternal">Beitrag</a>, wo Kategorien ein Bild zugeordnet wird.<br />
Ich habe meinen <a href="http://dynamicinternet.eu/wordpress/wordpress-tipps-tricks/" title="WordPress Tutorials" class="liinternal">Tutorial-</a> und <a href="http://dynamicinternet.eu/wordpress/wordpress-themes/" title="WordPress Themes" class="liinternal">WordPress Theme Seiten</a> auch ein Bild und eine Seitenbeschreibung f&#252;r die &#220;bersicht zugeordnet, jedoch habe ich es mit benutzerdefinierten Feldern realisiert.<br />
<span id="more-231"></span><br />
Die Vorgehensweise ist recht einfach. Wir legen nach dem Schreiben der Seite ein benutzerdefiniertes Feld mit dem Schl&#252;ssel <strong>aufmacherbild</strong> an und tragen als Wert den Dateinamen des gew&#252;nschten Bildes ein.</p>
<p><img src="http://dynamicinternet.eu/blog/wp-content/uploads/2007/11/custom-fields.jpg" alt="Dialog Benutzerdefinierte Felder" /></p>
<p>In meinem Fall habe ich die Bilder in ein extra Verzeichnis hochgeladen, so spar ich mir den Uploaddialog, ein Eintrag in der Datenbank und habe ausserdem jederzeit die M&#246;glichkeit, ein Bild zu ver&#228;ndern, ohne in WordPress erneut den Uploaddialog zu starten. M&#246;chte man den WordPress eigenen Uploaddialog benutzen, mu&#223; man bei dem Wert nat&#252;rlich den vollen Pfad zum Bild hineinkopieren, zB. http://url.de/blog/wp-content/uploads/2007/11/deinbild.jpg.</p>
<p>Jetzt brauchen wir noch eine Funktion, die eben dieses Bild liefert. Die schreiben wir am besten in die functions.php, damit sie zentral zur Verf&#252;gung steht.</p>
<p>Hier die Variante mit einem extra Verzeichnis:</p>
<pre>
<code>
function getPageIcon($pageID){
	$picpath = get_bloginfo('url').'/deinverzeichnis/';
	$pageID = intval($pageID);
	$defaultIcon = 'default.jpg';
	$pageIcon = get_post_custom_values('aufmacherbild',$pageID);

	if (!$pageIcon [0] || empty($pageIcon [0])){
		$pageIcon [0] = $defaultIcon;
	}
	$myIcon = clean_url($picpath.$pageIcon [0]);
	return $myIcon;
}
</code></pre>
<p>An diese Funktion wird die Seiten-ID ($pageID) &#252;bergeben. $picpath ist der Pfad zum Bildverzeichnis. Das defaultIcon habe ich f&#252;r den Fall angelegt, das kein Bild vorhanden ist. Dann holen wir mit get_post_custom_values(&#8216;aufmacherbild&#8217;,$pageID) den Wert des benutzerdefinierten Felds &#8220;aufmacherbild&#8221;. Sollte der Wert leer sein, wird das defaulticon verwendet. Anschlie&#223;end wird der komplette Pfad von der Funktion zur&#252;ckgegeben. Wenn du den WordPress internen Uploaddialog f&#252;r Bilder benutzt, sieht der Code so aus:</p>
<pre>
<code>
function getPageIcon($pageID){
	$pageID = intval($pageID);
	$defaultIcon = 'default.jpg';
	$pageIcon = get_post_custom_values('aufmacherbild',$pageID);

	if (!$pageIcon [0] || empty($pageIcon [0])){
		$pageIcon [0] = $defaultIcon;
	}
	$myIcon = clean_url($pageIcon [0]);
	return $myIcon;
}
</code></pre>
<p>Jetzt mu&#223; die Funktion nur noch im Template innerhalb des Loops aufgerufen werden:</p>
<pre>
<code>
&lt;?php $pageID = get_the_ID(); ?&gt;
&lt;img src="&lt;?php echo getPageIcon($pageID); ?&gt;" alt="Aufmacherbild der Seite"/&gt;
</code></pre>
<p>Diese Vorgehensweise kann man ebenfalls f&#252;r eine Kurzbeschreibung einer Seite verwenden, da WordPress Pages ja keine optionale Kurzfassung (excerpt) haben. Der Code ist &#228;hnlich:</p>
<pre>
<code>
function getPageTeaser($pageID){
	$pageID = intval($pageID);
	$seitenteaser = get_post_custom_values('seitenbeschreibung', $pageID);

	$myTeaser = wp_specialchars($seitenteaser[0]);
	return $myTeaser;
}
</code></pre>
<p>So habe ich zB. meine <a href="http://dynamicinternet.eu/wordpress/wordpress-tipps-tricks/" title="WordPress Tutorials" class="liinternal">WordPress Tutorial &#220;bersicht</a> realisiert. Dazu habe ich aber ein eigenes Template angelegt.</p>
<hr /><ul><li><a href="http://dynamicinternet.eu/blog/2007-08-01/ferienwohnungs-projekt-mit-wordpress/" rel="bookmark" title="Permanent Link: Ferienwohnungs-Projekt mit WordPress" class="liinternal">Ferienwohnungs-Projekt mit WordPress</a></li><li><a href="http://dynamicinternet.eu/blog/2007-08-27/topartikel-besser-praesentieren/" rel="bookmark" title="Permanent Link: Topartikel besser pr&#228;sentieren" class="liinternal">Topartikel besser pr&#228;sentieren</a></li><li><a href="http://dynamicinternet.eu/blog/2009-04-21/ein-fuer-blogs/" rel="bookmark" title="Permanent Link: Ein ♥ f&#252;r Blogs" class="liinternal">Ein ♥ f&#252;r Blogs</a></li><li><a href="http://dynamicinternet.eu/blog/2008-02-11/bilder-freistellen/" rel="bookmark" title="Permanent Link: Bilder freistellen" class="liinternal">Bilder freistellen</a></li><li><a href="http://dynamicinternet.eu/blog/2007-08-14/blogupdate-vollzogen/" rel="bookmark" title="Permanent Link: Blogupdate vollzogen" class="liinternal">Blogupdate vollzogen</a></li></ul><hr /><small>Copyright &copy; 2007-2010 dynamicinternet d9f9df690f8b5bb6036dfbdb77a9bd79</small>]]></content:encoded>
			<wfw:commentRss>http://dynamicinternet.eu/blog/2007-11-26/bilder-fuer-statische-wordpress-seiten/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tags in WordPress 2.3</title>
		<link>http://dynamicinternet.eu/blog/2007-09-19/tags-in-wordpress-23/</link>
		<comments>http://dynamicinternet.eu/blog/2007-09-19/tags-in-wordpress-23/#comments</comments>
		<pubDate>Wed, 19 Sep 2007 10:54:14 +0000</pubDate>
		<dc:creator>Micha</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[template tags]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[widgets]]></category>

		<guid isPermaLink="false">http://dynamicinternet.eu/blog/2007-09-19/tags-in-wordpress-23/</guid>
		<description><![CDATA[Eine der wesentlichsten Neuerungen in WordPress 2.3 ist die Integration von Tags, welche bisher &#252;ber Plugins realisiert werden musste. Leider beschr&#228;nkt sich die Funktionalit&#228;t der neuen Tags auf die Darstellung der Tags im Template. Da haben die WordPress Entwickler noch eine Menge Arbeit vor sich. Um vorhandene Tags in WordPress 2.3 zu nutzen, bietet WordPress [...]]]></description>
			<content:encoded><![CDATA[<p>Eine der wesentlichsten Neuerungen in WordPress 2.3 ist die Integration von Tags, welche bisher &#252;ber Plugins realisiert werden musste. Leider beschr&#228;nkt sich die Funktionalit&#228;t der neuen Tags auf die Darstellung der Tags im Template. Da haben die WordPress Entwickler noch eine Menge Arbeit vor sich.</p>
<p>Um vorhandene Tags in WordPress 2.3 zu nutzen, bietet WordPress den Import von Bunny’s Technorati Tags, Jerome’s Keywords, Simple Tagging Tags sowie Ultimate Tag Warrior Tags. Ich habe den Simple Tagging Import getestet und es war nach 3 Schritten erledigt. Auf jeden Fall vorher ein Backup der Datenbank machen.</p>
<p><span id="more-193"></span></p>
<p>Es gibt zwei neue <a href="http://codex.wordpress.org/Template_Tags" title="Dokumentation Template Tags" class="liexternal">Template Tags</a> in WordPress 2.3, <strong>the_tags</strong> und <strong>wp_tag_cloud</strong>. Um die Tags zum jeweiligen Beitrag auszugeben, wird <strong>the_tags</strong> verwendet. <strong>wp_tag_cloud</strong> stellt eine Tagwolke dar. Schauen wir uns zuerst einmal <strong>the_tags</strong> genauer an.</p>
<h3>the_tags</h3>
<p> Die Anweisung im Template sieht so aus:</p>
<pre>
<code>
&lt;?php the_tags(); ?&gt;
</code>
</pre>
<p>Diese Defaultanweisung gibt die Tags kommagetrennt aus. Um die Ausgabe der Tags ein bischen zu individualisieren, stehen drei Parameter zur Verf&#252;gung:</p>
<pre>
<code>
&lt;?php the_tags('before', 'separator', 'after'); ?&gt;
</code>
</pre>
<ul>
<li><strong>before</strong> &#8211; Text, der vor den Tags dargestellt wird. Defaultwert <strong>Tags:</strong></li>
<li><strong>separator</strong> &#8211; Trenner, der zwischen den Tags dargestellt wird. Defaultwert <strong>Komma</strong></li>
<li><strong>after</strong> &#8211; Text, der nach den Tags dargestellt wird. Kein Defaultwert</li>
</ul>
<p>Um die Tags unterhalb des Beitrags darzustellen, f&#252;gt man in der index.php und/oder der single.php den Template Tag einfach an der entsprechende Stelle ein:</p>
<pre>
<code>
...
&lt;?php the_content(' weiterlesen ...'); ?&gt;
&lt;p&gt;&lt;?php the_tags(); ?&gt;&lt;/p&gt;
...
</code>
</pre>
<p>das Ergebnis sieht dann so aus:</p>
<p>Tags: blog, h&#246;ren, kaufen, lernen, lesen, reisen, sehen, testen, video, wordpress</p>
<pre>
<code>
&lt;p&gt;&lt;?php the_tags('Meine Tags: ', ' &amp;bull; ', '&lt;br /&gt;'); ?&gt;&lt;/p&gt;
</code>
</pre>
<p>ergibt</p>
<p>Meine Tags: blog &bull; css &bull; html &bull; php &bull; video &bull; wordpress</p>
<p>M&#246;chte man die Tags in einer Liste anzeigen, muss als Separator ein schliessendes und ein &#246;ffnendes Listenelement verwendet werden, da sonst alle Tags in einem Listenelement stehen:</p>
<pre>
<code>
&lt;ul&gt;&lt;?php the_tags('&lt;li&gt;', '&lt;/li&gt;&lt;li&gt;', '&lt;/li&gt;'); ?&gt;&lt;/ul&gt;
</code>
</pre>
<p>Kommen wir nun zur Tagwolke.</p>
<h3>wp_tag_cloud</h3>
<p>Es gibt viele M&#246;glichkeiten, eine Tagwolke im Theme zu platzieren. Manche m&#246;gen es in der Fussleiste oder in der Sidebar (f&#252;r die Sidebar ist in WordPress 2.3 ein Tag Cloud Widget verf&#252;gbar). Auch eine eigene Seite mit der Tagwolke ist m&#246;glich. Um eine Tagwolke zu erzeugen, schreiben wir</p>
<pre>
<code>
&lt;p&gt;&lt;?php wp_tag_cloud(); ?&gt;&lt;/p&gt;
</code>
</pre>
<p>an entsprechender Stelle in unser Template.</p>
<p><img src="http://dynamicinternet.eu/blog/wp-content/uploads/2007/09/tagcloud-default.jpg" alt="Tagwolke" /></p>
<p>Es stehen 9 Parameter zur Verf&#252;gung:</p>
<ul>
<li><strong>smallest</strong> &#8211; die kleinste Schriftgr&#246;sse. Defaultwert <strong>8pt</strong></li>
<li><strong>largest</strong> &#8211; die gr&#246;sste Schriftgr&#246;sse. Defaultwert <strong>22pt</strong></li>
<li><strong>unit</strong> &#8211; Ma&#223;einheit der Schriftgr&#246;sse. Defaultwert <strong>pt</strong></li>
<li><strong>number</strong> &#8211; Anzahl der anzuzeigenden Tags. Defaultwert <strong>45</strong></li>
<li><strong>format</strong> &#8211; Format der Tagwolke. Es gibt 3 Varianten. Defaultwert <strong>flat</strong>
<ul>
<li><strong>flat</strong> &#8211; Tags werden mit Leerzeichen getrennt hintereinander angezeigt</li>
<li><strong>list</strong> &#8211; Tags in einer ungeordneten Liste mit der Klasse &#8220;wp_tag_cloud&#8221;.</li>
<li><strong>array</strong> &#8211; Ausgabe der Tags in einem Array</li>
</ul>
</li>
<li><strong>orderby</strong> &#8211; Sortierung der Tags. Defaultwert <strong>name</strong>
<ul>
<li><strong>name</strong> &#8211; Sortierung nach dem Namen der Tags</li>
<li><strong>count</strong> &#8211; Sortierung nach der Anzahl der Artikel</li>
</ul>
</li>
<li><strong>order</strong> &#8211; Sortierung der Tags. Defaultwert <strong>ASC</strong>
<ul>
<li><strong>ASC</strong> &#8211; Sortierung aufsteigend</li>
<li><strong>DESC</strong> &#8211; Sortierung absteigend</li>
</ul>
</li>
<li><strong>exclude</strong> &#8211; auszuschliessende Tags. Mehrere kommagetrennt angeben. Kein Defaultwert</li>
<li><strong>include</strong> &#8211; einzuschliessende Tags. Mehrere kommagetrennt angeben. Kein Defaultwert</li>
</ul>
<p>Mehrere Parameter m&#252;ssen mit einem &amp; voneinander getrennt angegeben werden. Ein Beispiel:</p>
<pre>
<code>
&lt;?php wp_tag_cloud('smallest=8&amp;largest=22&amp;unit=pt&amp;number=30&amp;format=flat&amp;orderby=name&amp;order=asc'); ?&gt;
</code>
</pre>
<p>Das Ergebnis ist eine Tagwolke sortiert nach dem Tagnamen aufsteigend, angezeigte Anzahl der Tags sind 30. Die kleinste Schriftgr&#246;sse ist 8pt und die gr&#246;sste 22pt. Die Tags werden mit Leezeichen getrennt hintereinander ausgegeben.</p>
<p>Wer bisher das Simple Tagging Plugin verwendet hat, wird an dieser Stelle sehr schnell erkennen, das die WordPress Entwickler eine Menge Unfug getrieben haben.</p>
<h3>Das Dilemma</h3>
<p>Schauen wir uns einmal der erzeugten Quelltest der Tag Cloud an. Ich beschr&#228;nke mich auf eine Zeile:</p>
<pre>
<code>
&lt;a href='http://localhost/wordpress-23/wordpress/tag/reisen/' class='tag-link-13' title='2 topics' rel=&quot;tag&quot; style='font-size: 12.6666666667pt;'&gt;reisen&lt;/a&gt;
</code>
</pre>
<p>Das Tag &#8220;reisen&#8221; erh&#228;lt automatisch die Klasse &#8220;tag-link-13&#8243;. Was kann ich mit dieser Klasse im Stylesheet anfangen? Im Grunde genommen garnichts. Die 13 ist die ID von dem Tag &#8220;reisen&#8221;. Um die Tags unterschiedlich zu stylen, m&#252;sste man dazu immer die ID&#8217;s der Tags wissen. Macht &#252;berhaupt keinen Sinn.</p>
<p>Die Kr&#246;nung des Ganzen ist jedoch der Inline Style mit der Schriftgr&#246;sse. Diese wird von WordPress automatisch kalkuliert. Man kann zwar auch als Ma&#223;einheit % oder em statt pt angeben, das Ergebnis ist jedoch nicht vorhersehbar. Auch gibt es bei der Verwendung von wp_tag_cloud keine M&#246;glichkeit, die Schriftfarbe der Relevanz der Tags anzupassen. Warum wurden nicht einfach Klassen erzeugt, die die Relevanz eines Tags wiedergeben, so wie ich es von Simple Tagging gewohnt bin?</p>
<h3>Fazit</h3>
<p>Halbherzige Integration der Tags in WordPress 2.3, nicht ann&#228;hernd die Funktionalit&#228;t, die man von den Plugins gewohnt ist. Es fehlen grundlegende Sachen wie die Verwaltung von Tags. Die Integration der Tagwolke ist denkbar schlecht gel&#246;st.</p>
<p>Alle, die mit Erscheinen von WordPress 2.3 updaten wollen, haben hoffentlich mit diesem Beitrag eine kleine Hilfe erhalten, die Tags in das eigene Template zu integrieren.</p>
<hr /><ul><li><a href="http://dynamicinternet.eu/blog/2007-06-27/wordpress-23-alpha/" rel="bookmark" title="Permanent Link: WordPress 2.3 alpha" class="liinternal">WordPress 2.3 alpha</a></li><li><a href="http://dynamicinternet.eu/blog/2007-11-19/related-posts-im-feed/" rel="bookmark" title="Permanent Link: Related Posts im Feed" class="liinternal">Related Posts im Feed</a></li><li><a href="http://dynamicinternet.eu/blog/2009-01-20/mein-blog-mit-yaml-31/" rel="bookmark" title="Permanent Link: Mein Blog mit YAML 3.1" class="liinternal">Mein Blog mit YAML 3.1</a></li><li><a href="http://dynamicinternet.eu/blog/2007-07-07/tag-import-fuer-wordpress-23-alpha/" rel="bookmark" title="Permanent Link: Tag Import f&#252;r WordPress 2.3 Alpha" class="liinternal">Tag Import f&#252;r WordPress 2.3 Alpha</a></li><li><a href="http://dynamicinternet.eu/blog/2007-06-16/wordpress-the-loop-und-template-tags/" rel="bookmark" title="Permanent Link: WordPress The Loop und Template Tags" class="liinternal">WordPress The Loop und Template Tags</a></li></ul><hr /><small>Copyright &copy; 2007-2010 dynamicinternet d9f9df690f8b5bb6036dfbdb77a9bd79</small>]]></content:encoded>
			<wfw:commentRss>http://dynamicinternet.eu/blog/2007-09-19/tags-in-wordpress-23/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>WordPress Custom Fields in Action</title>
		<link>http://dynamicinternet.eu/blog/2007-07-28/wordpress-custom-fields-in-action/</link>
		<comments>http://dynamicinternet.eu/blog/2007-07-28/wordpress-custom-fields-in-action/#comments</comments>
		<pubDate>Sat, 28 Jul 2007 18:03:18 +0000</pubDate>
		<dc:creator>Micha</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[template tags]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://dynamicinternet.eu/blog/2007-07-28/wordpress-custom-fields-in-action/</guid>
		<description><![CDATA[WordPress Tutorial &#252;ber die Verwendung von Benutzerdefinierten Feldern (Custom Fields) in Verbindung mit statischen Seiten.]]></description>
			<content:encoded><![CDATA[<p>In meinem Tutorial <a href="http://dynamicinternet.eu/blog/2007-07-03/wordpress-custom-fields-nutzen/" title="zum Artikel" class="liinternal">WordPress Custom Fields nutzen</a> habe ich die Grundlagen der benutzerdefinierten Felder (Custom Fields) aufgezeigt. In einem aktuellen Projekt, &#252;ber das ich irgendwann hier ausf&#252;hrlich berichten werde, verwende ich die Custom Fields in Verbindung mit statischen Seiten.</p>
<p><span id="more-134"></span></p>
<p>Bei diesen Seiten handelt es sich um die Beschreibung von Baudenkmalen. Da es sehr viele Seiten werden (so locker &#252;ber 100), &#252;berlegte ich mir gleich zu Beginn, diese Objekte etwas zu strukturieren, obwohl ich noch nicht wu&#223;te, wie ich diese Struktur verwenden w&#252;rde. Ich habe also jedem Objekt 4 benutzerdefinierte Felder hinzugef&#252;gt:</p>
<ul>
<li>Objekt</li>
<li>Epoche</li>
<li>Baujahr</li>
<li>Lage</li>
</ul>
<p>Da man ja die Schl&#252;ssel der benutzerdefinierten Felder nur einmal anlegen braucht, kann man sie bei jeder neuen Seite einfach aus der Combobox ausw&#228;hlen und mu&#223; nur den Wert eintragen.
</p>
<p>Diese Metainformationen schreibe ich in dem Pagetemplate in eine Art Teaser zusammen mit der Seiten&#252;berschrift, dem Autor und der Erstellungs- bzw. Aktualisierungszeit. Damit hat der Leser gleich alle wichtigen Daten sch&#246;n &#252;bersichtlich angeordnet.</p>
<p>Die &#252;bergeodnete Seite dieser Baudenkmale listet alle Objekte auf. das ist sehr einfach zu realisieren:</p>
<pre>
<code>
&lt;ul&gt;
	&lt;?php wp_list_pages('child_of=7&amp;depth=1&amp;title_li=0&amp;sort_column=post_name'); ?&gt;
&lt;/ul&gt;
</code>
</pre>
<p>Jetzt wollte ich die Objekte auch nach Epoche sortieren, um dem Leser mehr Auswahlm&#246;glichkeiten zu geben. Es sollte die Epoche als &#220;berschrift erscheinen und die zugeh&#246;rigen Links zu den Objekten darunter. Also zuerst mal ein Query, um die verschiedenen Epochen auszulesen und mit wp_list_pages() ausgeben:</p>
<pre>
<code>
&lt;?php
$epochen = $wpdb-&gt;get_results(&quot;SELECT DISTINCT meta_value
	FROM $wpdb-&gt;postmeta
	WHERE meta_key ='Epoche'
	ORDER BY meta_value ASC&quot;);
foreach ($epochen as $epoche) { ?&gt;
	&lt;h4&gt;&lt;?php echo $epoche-&gt;meta_value; ?&gt;&lt;/h4&gt;
	&lt;ul&gt;
		&lt;?php wp_list_pages('child_of=7&amp;depth=1&amp;title_li=0&amp;meta_key=Epoche&amp;meta_value='.$epoche-&gt;meta_value.'&amp;sort_column=post_name'); ?&gt;
	&lt;/ul&gt;
&lt;?php } ?&gt;
</code>
</pre>
<p>Wie man sieht, hat man mit den benutzerdefinierten Feldern M&#246;glichkeiten ohne Ende, Inhalte aufzubereiten. Wer wei&#223;, was mir noch so alles einf&#228;llt &#8230;</p>
<p>Sollte jemand meiner werten Leser ebenfalls Erfahrungen mit den benutzerdefinierten Feldern gemacht haben, w&#252;rde ich mich &#252;ber ein Kommentar freuen.</p>
<hr /><ul><li><a href="http://dynamicinternet.eu/blog/2007-10-17/wordpress-pages-nach-meta_value-sortieren/" rel="bookmark" title="Permanent Link: WordPress Pages nach meta_value sortieren" class="liinternal">WordPress Pages nach meta_value sortieren</a></li><li><a href="http://dynamicinternet.eu/blog/2010-02-10/neu-in-wordpress-3-0-custom-background/" rel="bookmark" title="Permanent Link: Neu in WordPress 3.0: Custom Background" class="liinternal">Neu in WordPress 3.0: Custom Background</a></li><li><a href="http://dynamicinternet.eu/blog/2007-07-03/wordpress-custom-fields-nutzen/" rel="bookmark" title="Permanent Link: WordPress Custom Fields nutzen" class="liinternal">WordPress Custom Fields nutzen</a></li><li><a href="http://dynamicinternet.eu/blog/2007-05-07/wordpress-neue-xss-sicherheitsluecke-in-manchen-themes/" rel="bookmark" title="Permanent Link: WordPress Neue XSS Sicherheitsl&#252;cke in manchen Themes" class="liinternal">WordPress Neue XSS Sicherheitsl&#252;cke in manchen Themes</a></li><li><a href="http://dynamicinternet.eu/wordpress/wordpress-tipps-tricks/top-artikel-in-wordpress-hervorheben/" rel="bookmark" title="Permanent Link: Top Artikel in WordPress hervorheben" class="liinternal">Top Artikel in WordPress hervorheben</a></li></ul><hr /><small>Copyright &copy; 2007-2010 dynamicinternet d9f9df690f8b5bb6036dfbdb77a9bd79</small>]]></content:encoded>
			<wfw:commentRss>http://dynamicinternet.eu/blog/2007-07-28/wordpress-custom-fields-in-action/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>WordPress Seitennavigation</title>
		<link>http://dynamicinternet.eu/blog/2007-07-17/wordpress-seitennavigation/</link>
		<comments>http://dynamicinternet.eu/blog/2007-07-17/wordpress-seitennavigation/#comments</comments>
		<pubDate>Tue, 17 Jul 2007 21:00:11 +0000</pubDate>
		<dc:creator>Micha</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[conditional tags]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[template tags]]></category>

		<guid isPermaLink="false">http://dynamicinternet.eu/blog/2007-07-17/wordpress-seitennavigation/</guid>
		<description><![CDATA[In diesem Tutorial geht es um den Template Tag wp_lis_pages. Es wird erkl&#228;rt, wie mit Hilfe von Argumenten die Anzeige von Seiten in der Navigation beeinflusst werden kann.]]></description>
			<content:encoded><![CDATA[<p>In meinem neuen <a href="http://dynamicinternet.eu/blog/2007-07-15/projekt-mit-wordpress-und-yaml/" title="zum Artikel" class="liinternal">Projekt</a> habe ich vorwiegend mit Pages zu tun. Um diese vern&#252;nftig zu strukturieren und trotz aller Verschachtelungen anzuzeigen, sollte man sich n&#228;her mit dem <a href="http://wordpress.org" title="WordPress Homepage" class="liexternal">WordPress</a> Template Tag <a href="http://codex.wordpress.org/Template_Tags/wp_list_pages" title="WordPress Dokumentation: Template Tag wp_list_pages" class="liexternal"><strong>wp_list_pages</strong></a> auseinandersetzten.</p>
<p>Schauen wir uns einmal wp_list_pages im default_de Theme an:</p>
<p><span id="more-131"></span></p>
<p>Ihr findet wp_list_pages(&#8216;arguments&#8217;) in der sidebar.php so ziemlich in der Mitte.</p>
<pre>
<code>
&lt;?php wp_list_pages('title_li=&lt;h2&gt;Seiten&lt;/h2&gt;'); ?&gt;
</code></pre>
<p>Das Resultat ist eine Liste aller angelegten Seiten (Pages) unterhalb der &#220;berschrift &#8220;Seiten&#8221;. Manchem wird das reichen, da ein Blog meistens nur sehr wenige Pages hat. M&#246;chte man aber zum Beispiel eine horizontale Men&#252;leiste haben, mu&#223; man den Template Tag schon etwas anpassen.</p>
<pre>
<code>
&lt;div id="topnavigation"&gt;
 &lt;ul&gt;
 	&lt;?php wp_list_pages('title_li=&amp;sort_column=menu_order'); ?&gt;
 &lt;/ul&gt;
&lt;/div&gt;
</code></pre>
<p>Wir haben das Argument title_li leer gelassen, was uns die Pages in &lt;li&gt; Tags schreibt, sort_column=menu_order sortiert uns die Seiten in der Reihenfolge, wie wir sie beim Seite schreiben unter Reihenfolge definiert haben.<br />
 Die Sortierung ist m&#246;glich nach:</p>
<ul>
<li>post_title &#8211; Seitentitel</li>
<li>menu_order &#8211; Reihenfolge der Seiten</li>
<li>post_date &#8211; Erstellugsdatum der Seiten</li>
<li>menu_modified &#8211; Aktualisierungsdatum der Seiten</li>
<li>ID &#8211; nach der Seiten ID</li>
<li>post_author &#8211; nach Reihenfolge der Autoren ID&#8217;s</li>
<li>post_name &#8211; nach Titelform der Seiten</li>
</ul>
<p>Diese Liste k&#246;nnen wir mit CSS zu einem schicken Men&#252; verwandeln, was aber hier nicht Bestandteil ist.</p>
<p>WordPress f&#252;gt automatisch alle von uns angelegten Seiten in das Men&#252; ein. Was, wenn wir aber eine Seite als Unterseite einer Seite anlegen? Houston, we have a problem! Das sch&#246;ne Men&#252; wird zerissen, weil WordPress logischerweise die Liste so verschachtelt, wie wir die Seitenhierarchie erstellt haben.<br />
 Je nachdem, welche Anforderungen wir f&#252;r unser Men&#252; haben, k&#246;nnen wir per Argument die Tiefe der darzustellenden Seiten beeinflussen:</p>
<pre>
<code>
&lt;?php wp_list_pages('depth=1&amp;title_li=0&amp;sort_column=menu_order'); ?&gt;
</code></pre>
<p>Das Argument depth=1 teilt WordPress mit, das nur Seiten der obersten Hierarchiestufe angezeigt werden sollen. Der Wert kann je nach Tiefe der Seitenstruktur erh&#246;ht werden. depth=-1 Zeigt alle erstellten Seiten in einer Liste <strong>ohne</strong> die Hierarchie zu ber&#252;cksichtigen.</p>
<p>Wollen wir bestimmte Seiten von der Navigation ausschlie&#223;en, verwenden wir</p>
<pre>
<code>
&lt;?php wp_list_pages('depth=1&amp;exclude=4&amp;title_li=0&amp;sort_column=menu_order'); ?&gt;
</code></pre>
<p>wobei mit dem Argument exclude die ID der jeweiligen Seite angegeben werden mu&#223;. In diesem Beispiel ist es die Seite mit der ID 4, welche von der Navigation ausgeschlossen wird. Es k&#246;nnen auch mehrere ID&#8217;s kommagetrennt angegeben werden. Ebenfalls ist es m&#246;glich, nur bestimmte Seiten einzuschlie&#223;en, was man verwendet, ist Geschmackssache:</p>
<pre>
<code>
&lt;?php wp_list_pages('depth=1&amp;include=1,2,4&amp;title_li=0&amp;sort_column=menu_order'); ?&gt;
</code></pre>
<p>Ok, noch sind wir nicht am Ende. Mal angenommen, ihr habt euer Hauptmen&#252; mit Home, Blog und Kontakt. Die Seite Kontakt hat die Unterseiten Impressum und Datenschutzerl&#228;rung. Ihr wollt aber die Seiten Impressum und Datenschutzerkl&#228;rung nicht in der Navigationsleiste haben, sondern in der Sidebar und auch nur dann, wenn man auf Kontakt geklickt hat. Hier der Code:</p>
<pre>
<code>
&lt;div id="topnavigation"&gt;
 &lt;ul&gt;
 	&lt;?php wp_list_pages('depth=1&amp;title_li=&amp;sort_column=menu_order'); ?&gt;
 &lt;/ul&gt;
&lt;/div&gt;  

// in der sidebar.php
&lt;?php if (is_page('kontakt')) { ?&gt;
 &lt;ul&gt;
 	&lt;?php wp_list_pages('child_of=4&amp;depth=1&amp;title_li=&amp;sort_column=post_name');?&gt;
 &lt;/ul&gt;
&lt;?php } ?&gt;
</code></pre>
<p>In der Topnavigation wie gehabt nur die obersten Seiten. In der sidebar.php nutzen wir zuerst das <a href="http://codex.wordpress.org/Conditional_Tags" title="Wordpress Dokumentation: Conditional Tgas" class="liexternal">conditional Tag</a> is_page(&#8216;konatkt&#8217;), wo wir pr&#252;fen, ob es auch wirklich sie Seite Kontakt ist. Ihr m&#252;&#223;t aber in den Klammern die Titelform (post_slug) eintragen, nicht die &#220;berschrift der Seite. Wenn also die aufgerufene Seite die Kontaktseite ist, geben wir deren Unterseiten aus. Das geschieht mit <strong>child_of=4</strong>, wobei die Kontaktseite hier die ID 4 hat.<br />
 depth kann in diesem Beispiel weggelassen werden, da es keine Unterseiten von Impressum und Dateschutz gibt. Sollte jedoch so ein Fall eintreten, m&#252;&#223;t ihr bei depth aufpassen. Da wir durch child_of schon eine Ebene tiefer in der Seitenhierarchie sind, bezieht sich die 1 auf die aktuelle Ebene und 2 w&#228;ren dann die Unterseiten von Impressum und Datenschutz. Verstanden?</p>
<p>Ein weitere M&#246;glichkeit, die Auflistung von Seiten zu beinflussen, w&#228;ren meta_key(&#8216;argument&#8217;) und meta_value(&#8216;argument&#8217;). &#220;ber die Verwendung dieser benutzerdefinierten Felder (custom fields) habe ich ein <a href="http://dynamicinternet.eu/blog/2007-07-03/wordpress-custom-fields-nutzen/" title="zum Artikel" class="liinternal">Tutorial</a> geschrieben.</p>
<p>Eins ist bei der Navigation von Seiten und Unterseiten noch wichtig: WordPress erzeugt die li Tags mit entsprechenden CSS Klassennamen, welche f&#252;r das Aussehen der Navigation und die Kennzeichnung der aktuellen Seite n&#246;tig sind.</p>
<pre>
<code>
Standardklasse einer nicht angeklickten Seite
&lt;li class="page_item"&gt;  

Klasse der aktuell angeklickten Seite
&lt;li class="page_item current_page_item"&gt;  

Klasse der aktuellen Oberseite wenn eine
Unterseite angeklickt wird
&lt;li class="page_item current_page_parent"&gt;
</code></pre>
<p>Diese k&#246;nnen dann wie gewohnt im Stylesheet ausgezeichnet werden.</p>
<p>Sollte ich etwas vergessen haben, oder Fragen auftauchen, bitte das Kontaktformular strapazieren <img src='http://dynamicinternet.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<hr /><ul><li><a href="http://dynamicinternet.eu/blog/2010-01-27/flexi-pages-widget-fuer-wordpress/" rel="bookmark" title="Permanent Link: Flexi Pages Widget f&#252;r WordPress" class="liinternal">Flexi Pages Widget f&#252;r WordPress</a></li><li><a href="http://dynamicinternet.eu/blog/2008-09-14/wp_page_menu-in-wordpress-27/" rel="bookmark" title="Permanent Link: wp_page_menu in WordPress 2.7" class="liinternal">wp_page_menu in WordPress 2.7</a></li><li><a href="http://dynamicinternet.eu/blog/2009-08-31/yaml-coffee-theme-neue-version/" rel="bookmark" title="Permanent Link: YAML Coffee Theme neue Version" class="liinternal">YAML Coffee Theme neue Version</a></li><li><a href="http://dynamicinternet.eu/blog/2009-11-22/wordpress-mu-sprachabhaengige-templates-einbinden/" rel="bookmark" title="Permanent Link: WordPress MU sprachabh&#228;ngige Templates einbinden" class="liinternal">WordPress MU sprachabh&#228;ngige Templates einbinden</a></li><li><a href="http://dynamicinternet.eu/blog/2010-01-01/eine-seitennavigation-fuer-die-sidebar/" rel="bookmark" title="Permanent Link: Eine Seitennavigation f&#252;r die Sidebar" class="liinternal">Eine Seitennavigation f&#252;r die Sidebar</a></li></ul><hr /><small>Copyright &copy; 2007-2010 dynamicinternet d9f9df690f8b5bb6036dfbdb77a9bd79</small>]]></content:encoded>
			<wfw:commentRss>http://dynamicinternet.eu/blog/2007-07-17/wordpress-seitennavigation/feed/</wfw:commentRss>
		<slash:comments>63</slash:comments>
		</item>
		<item>
		<title>WordPress Custom Fields nutzen</title>
		<link>http://dynamicinternet.eu/blog/2007-07-03/wordpress-custom-fields-nutzen/</link>
		<comments>http://dynamicinternet.eu/blog/2007-07-03/wordpress-custom-fields-nutzen/#comments</comments>
		<pubDate>Tue, 03 Jul 2007 11:05:04 +0000</pubDate>
		<dc:creator>Micha</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[ext]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[template tags]]></category>
		<category><![CDATA[the loop]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://dynamicinternet.eu/blog/2007-07-03/wordpress-custom-fields-nutzen/</guid>
		<description><![CDATA[Die Idee war, f&#252;r meine Kateorie Tutorials ein Template zu bauen, wo neben der &#220;berschrift ein Logo den Inhalt visualisiert. Nach ein paar &#220;berlegungen bin ich auf die benutzendefinierten Felder (Custom Fields) gekommen, welche ich in Verbindung mit ein bischen CSS benutze. Los gehts. Was sind Custom Fields? Wenn Ihr einen Beitrag schreibt, seht ihr [...]]]></description>
			<content:encoded><![CDATA[<p>Die Idee war, f&#252;r meine Kateorie <a href="http://dynamicinternet.eu/blog/category/tutorials/" title="Tutorial Kategorie" class="liinternal">Tutorials</a> ein Template zu bauen, wo neben der &#220;berschrift ein Logo den Inhalt visualisiert.</p>
<p>Nach ein paar &#220;berlegungen bin ich auf die benutzendefinierten Felder (Custom Fields) gekommen, welche ich in Verbindung mit ein bischen CSS benutze. Los gehts.</p>
<p><span id="more-113"></span></p>
<h3>Was sind Custom Fields?</h3>
<p>Wenn Ihr einen Beitrag schreibt, seht ihr unter Trackbacks eine Leiste &#8220;Benutzerdefinierte Felder&#8221;, welche ihr aufklappen k&#246;nnt. Dort seht ihr Schl&#252;ssel und Wert.<br />
Custom Fields sind also nichts weiter als ein Schl&#252;ssel/Wert Paar (key/value). Diese werden in der Datenbanktabelle wp_postmeta gespeichert.<br />
Um diese Daten in eurem Blog darzustellen, gibt es den Template Tag <strong>the_meta()</strong>, der innerhalb des <a href="http://dynamicinternet.eu/blog/2007-06-16/wordpress-the-loop-und-template-tags/" title="Tutorial &#252;ber den Loop" class="liinternal">Loops</a> verwendet werden kann.</p>
<p>Tragt bei einem Beitrag einfach mal als Schl&#252;ssel &#8220;Hallo&#8221; und als Wert &#8220;Welt&#8221; ein und dr&#252;ckt benutzerdefiniertes Feld hinzuf&#252;gen. Wenn ihr das beim Bearbeiten eines Beitrages macht, braucht ihr den Beitrag nicht extra noch einmal speichern, der Wert wird bei hinzuf&#252;gen schon in die Datenbank geschrieben.<br />
Um nun unser tolles Schl&#252;ssel/Wert Paar unter dem Beitrag zu sehen, schreibt in die single.php unter the_content()</p>
<pre>
<code></code>&lt;?php the_meta(); ?&gt;</pre>
<p>Ihr seht nun eine Liste mit Hello und World. Klasse, oder? <img src='http://dynamicinternet.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Nun zu meinem speziellen Kategorie Template.</p>
<h3>Kategorie Template</h3>
<p>Da ich dieses Template nur f&#252;r meine Kategorie Tutorials haben m&#246;chte, schaue ich nach der ID der Kategorie &#8220;Tutorials&#8221; (Verwalten-&gt;Kategorien), welche bei mir die ID 5 hat.<br />
Die Datei nenne ich category-5.php, da WordPress diese Datei zuerst aufzurufen versucht, wenn nicht vorhanden nach category.php schaut, wenn die auch nicht da ist, nach archive.php und wenn die ebenfalls fehlt, die index.php aufruft.<br />
Das ist die <a href="http://codex.wordpress.org/Template_Hierarcy/" title="Template Hierarchie in WordPress" class="liexternal">Template Hierarchie</a> in WordPress.</p>
<p>Da ich alle Tutorials untereinander haben m&#246;chte und nicht die in WordPress voreingestellten 5 oder 10 Beitr&#228;ge, mu&#223; ich diese Einstellung mit einem custom query &#252;berschreiben:</p>
<pre>
<code></code>&lt;?php get_header(); ?&gt;

&lt;div class="Euer_div"&gt;

&lt;?php

 query_posts('cat=5&amp;showposts=-1');

 $catergorytitle = get_catname(5);

?&gt;

&lt;?php if (have_posts()) : ?&gt;

 &lt;h2&gt;Alle Beitr&#228;ge der Kategorie &lt;?php echo $catergorytitle; ?&gt;&lt;/h2&gt;

&lt;?php while (have_posts()) : the_post();?&gt;

 &lt;h3&gt;&lt;a href="&lt;?php the_permalink() ?&gt;" rel="bookmark" title="Permanenter Link zu diesem Artikel"&gt;&lt;?php the_time('d.m.Y'); ?&gt; - &lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h3&gt;

 &lt;?php the_excerpt(); ?&gt;

&lt;?php endwhile; ?&gt;

&lt;?php else : ?&gt;

// Suchtemplate oder was auch immer

&lt;?php endif; ?&gt;

&lt;/div&gt;

&lt;?php get_sidebar(); ?&gt;

&lt;?php get_footer(); ?&gt;</pre>
<p>Ihr m&#252;&#223;t naturlich schauen, welche HTML Elemente in eurem Template verwendet werden.</p>
<p>Wenn wir jetzt diese Seite aufrufen, indem wir im Blog auf Kategorie Tutorials klicken, sehen wir alle Tutorials mit &#220;berschrift und den ersten 55 W&#246;rtern. Jetzt kommen die custom fields ins Spiel.</p>
<p>Ich habe momentan Turorials &#252;ber die <a href="http://www.extjs.com" title="Ext Webseite" class="liexternal">Ext Library</a> und &#252;ber <a href="http://wordpress.org" title="Wordpress Webseite" class="liexternal">WordPress</a> geschrieben. Also bearbeite ich alle meine Beitr&#228;ge der Kategorie Tutorials und f&#252;ge allen als Schl&#252;ssel &#8220;tutorial&#8221; hinzu, bei den Ext Beitr&#228;gen als Wert ext und bei denen von WordPress als Wert wordpress.<br />
Mit diesen Informationen erstelle ich einfach ein DIV um jedes Tutorial und weise dem DIV einfach als Klasse den entprechenden Wert zu. Verstanden?</p>
<pre>
<code></code>&lt;?php while (have_posts()) : the_post();?&gt;

&lt;?php $metadata = get_post_custom_values('tutorial'); ?&gt;

 &lt;div class="artikel &lt;?php echo $metadata[0]; ?&gt;"&gt;

 	&lt;h3&gt;&lt;a href="&lt;?php the_permalink() ?&gt;" rel="bookmark" title="Permanenter Link zu diesem Artikel"&gt;&lt;?php the_time('d.m.Y'); ?&gt; - &lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h3&gt;

 	&lt;?php the_excerpt(); ?&gt;

 &lt;/div&gt;

&lt;?php endwhile; ?&gt;</pre>
<p>Mit get_post_custom_value(&#8216;tutorial&#8217;) holen wir uns den Wert, welcher als Array zur&#252;ckgeliefert wird. Diesen Wert setzten wir bei dem DIV als zweite Klasse ein. Nun m&#252;ssen wir noch ein paar Kleinigkeiten erledigen.</p>
<h3>Der CSS Teil</h3>
<p>Ich habe mir das Ext- und das WordPress Logo als 40&#215;40 Pixel JPG abgespeichert. Diese Logos nutzen wir jetzt in unserem Stylesheet.</p>
<pre>
<code></code>// die erste Klasse artikel

.artikel{

 margin:20px 0;

}

.artikel h3{

 margin:10px 0 0 60px;

 font-size:1.2em;

}

.artikel p{

 margin:5px 0 0 60px;

}

// die zweite Klasse mit dem Werten aus dem custom Field

.ext{

 background:url(../euerPfadzu/extlogo.jpg) top left no-repeat;

}

.wordpress{

 background:url(../euerPfadzu/wordpresslogo.jpg) top left no-repeat;

}</pre>
<p><img src="http://dynamicinternet.eu/blog/wp-content/uploads/2007/07/tutorial-template.jpg" alt="Tutorial template" /></p>
<p>Die &#220;berschrift und der Text haben einen linken Abstand von 60 Pixel zu dem Logo. Wenn ihr mal verge&#223;t, bei einem Tutorial die benutzerdefinierten Felder einzutragen, passiert nichts, die zweite Klasse ist dann leer, es erscheint kein Logo, aber der Abstand zum Rand bleibt erhalten.</p>
<p>Das war nur eine M&#246;glichkeit, die custom fields zu nutzen. Wem etwas anderes damit einf&#228;llt, der kann gerne einen Kommentar hinterlassen.</p>
<hr /><ul><li><a href="http://dynamicinternet.eu/blog/2007-07-28/wordpress-custom-fields-in-action/" rel="bookmark" title="Permanent Link: WordPress Custom Fields in Action" class="liinternal">WordPress Custom Fields in Action</a></li><li><a href="http://dynamicinternet.eu/blog/2010-02-10/neu-in-wordpress-3-0-custom-background/" rel="bookmark" title="Permanent Link: Neu in WordPress 3.0: Custom Background" class="liinternal">Neu in WordPress 3.0: Custom Background</a></li><li><a href="http://dynamicinternet.eu/blog/2007-10-17/wordpress-pages-nach-meta_value-sortieren/" rel="bookmark" title="Permanent Link: WordPress Pages nach meta_value sortieren" class="liinternal">WordPress Pages nach meta_value sortieren</a></li><li><a href="http://dynamicinternet.eu/wordpress/wordpress-tipps-tricks/top-artikel-in-wordpress-hervorheben/" rel="bookmark" title="Permanent Link: Top Artikel in WordPress hervorheben" class="liinternal">Top Artikel in WordPress hervorheben</a></li><li><a href="http://dynamicinternet.eu/blog/2009-12-16/user-conatct-info-in-wordpress-2-9-erweitern/" rel="bookmark" title="Permanent Link: User Contact Info in WordPress 2.9 erweitern" class="liinternal">User Contact Info in WordPress 2.9 erweitern</a></li></ul><hr /><small>Copyright &copy; 2007-2010 dynamicinternet d9f9df690f8b5bb6036dfbdb77a9bd79</small>]]></content:encoded>
			<wfw:commentRss>http://dynamicinternet.eu/blog/2007-07-03/wordpress-custom-fields-nutzen/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Ext Tree Drag and Drop</title>
		<link>http://dynamicinternet.eu/blog/2007-06-28/ext-tree-drag-and-drop/</link>
		<comments>http://dynamicinternet.eu/blog/2007-06-28/ext-tree-drag-and-drop/#comments</comments>
		<pubDate>Thu, 28 Jun 2007 19:54:23 +0000</pubDate>
		<dc:creator>Micha</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[ext]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tree]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[widgets]]></category>
		<category><![CDATA[yui]]></category>

		<guid isPermaLink="false">http://dynamicinternet.eu/blog/2007-06-28/ext-tree-drag-and-drop/</guid>
		<description><![CDATA[Drag &#038; Drop erm&#246;glicht Interaktivit&#228;t, die moderne Webanwendungen auszeichnet. Selbstverst&#228;ndlich bietet die Ext Library Drag &#038; Drop in vielen Widgets an. Heute wollen wir Drag &#038; Drop mit dem Ext Tree lernen. In meinem Tutorial Ext Tree Basics haben wir die Grundlagen der Programmierung eines Ext Trees gelernt. Wenn du dieses Tutorial noch nicht gelesen [...]]]></description>
			<content:encoded><![CDATA[<p>Drag &#038; Drop erm&#246;glicht Interaktivit&#228;t, die moderne Webanwendungen auszeichnet. Selbstverst&#228;ndlich bietet die <a href="http://www.extjs.com/" title="Webseite der Ext Library" class="liexternal">Ext Library</a> Drag &#038; Drop in vielen Widgets an.<br />
 Heute wollen wir Drag &#038; Drop mit dem Ext Tree lernen.</p>
<p>In meinem Tutorial <a href="http://dynamicinternet.eu/blog/2007-05-16/ext-tree-basics/" title="Tutorial Ext Tree Basics" class="liinternal">Ext Tree Basics</a> haben wir die Grundlagen der Programmierung eines Ext Trees gelernt. Wenn du dieses Tutorial noch nicht gelesen hast, hole es schnell nach, da das heutige Tutorial darauf aufbaut und den selben Code verwenden wird.</p>
<p><strong>Voraussetzungen:</strong> Grundkenntnisse in HTML, CSS und Javascript.</p>
<p>Dieses Tutorial basiert auf der Version <strong>Ext-1.0</strong>, die aktuelle Version kann <a href="http://www.extjs.com/download/" title="Ext downloaden" class="liexternal">hier</a> heruntergeladen werden.</p>
<p><span id="more-110"></span></p>
<h3>Vorbereitung</h3>
<p>Am besten ihr kopiert das basic-tree.js und die basic-tree.html und speichert beide Dateien unter anderem Namen ab.</p>
<p>Ein paar &#196;nderungen m&#252;ssen wir trotzdem durchf&#252;hren. Wir l&#246;schen aus der Javascript Datei die Zeile <strong>myTree.on(&#8216;click&#8217;, alertID);</strong> und ebenfalls die komplette Funktion <strong>function alertID(node)</strong>.<br />
 In der HTML Datei m&#252;ssen wir auch ein paar kleine &#196;nderungen durchf&#252;hren. Wir brauchen ein zweites Div f&#252;r den Drop Tree:</p>
<pre>
<code>

&lt;div id=&quot;wrapper&quot;&gt;
	&lt;div id=&quot;tree-div&quot;&gt;&lt;/div&gt;
	&lt;div id=&quot;drop-div&quot;&gt;&lt;/div&gt;
&lt;/div&gt;

// zum style hinzuf&#252;gen
#tree-div{float:left;width: 300px; height: 300px;border:2px solid #B2D0F7;overflow:auto;}
#drop-div{float:right;width: 300px; height: 300px;border:2px solid #B2D0F7;overflow:auto;}
#wrapper{width:650px;}

</code>
</pre>
<p>Asserdem wollen wir in diesem Beispiel nicht, da&#223; komplette Gruppen verschoben werden, sondern nur einzelne Musiker. Dazu f&#252;gen wir bei Pink Floyd und den Rolling Stones hinter der id <strong>allowDrag:false,</strong> ein.<br />
 Ihr seht, wie einfach es ist, solche grundlegenden Sachen per config festzulegen.</p>
<h3>Der Drop Tree</h3>
<p>Wir haben in der HTML den Container drop-div angelegt, in den wir den Drop Tree, also das Ziel, hineinpacken.<br />
 In der Javascript Datei f&#252;gen wir unter den Zeilen von myTree den Drop Tree ein:</p>
<pre>
<code>

var dropTree = new Tree.TreePanel('drop-div', {
	animate:true,
	enableDD:true,
	containerScroll: true,
	lines:false,
	rootVisible:true
});

var dropRoot = new Tree.TreeNode({
	allowDrag:false,
	allowDrop:true,
	id:'dRoot',
	text:'Meine liebsten Musiker'
});

dropTree.setRootNode(dropRoot);
dropTree.render();
dropRoot.expand(false, false);

</code>
</pre>
<p>Der Drop Tree sieht fast genau so aus wie der myTree, nur mit dem Unterschied, da&#223; wir dem TreePanel mit <strong>enableDD</strong> Drag&#038;Drop einschalten und der dropRoot mit <strong>allowDrop:true</strong> das Ablegen von Treenodes erlauben. Das war schon alles. Den Rest macht die Ext Library.<br />
  Wenn ihr nun die HTML Datei ausf&#252;hrt, k&#246;nnt ihr Shakira oder die anderen Musiker in den Drop Tree ziehen.</p>
<h3>Ein Tree Node kopieren</h3>
<p>Es kann je nach Anwendung der Fall sein, da&#223; ihr beim Einf&#252;gen in den Drop Tree keine Verschiebung des Tree Nodes haben m&#246;chtet, sondern eine Kopie. Um das zu realisieren, brauchen wir nichts weiter als eine Funktion schreiben, die das gew&#252;nschte Node mit samt seinen Attributen kopiert.<br />
 Damit die Funktion auch klappt, mu&#223; es nat&#252;rlich passieren, bevor das Node losgelassen wird. Daf&#252;r gibt es das <strong>beforenodedrop Event</strong>.</p>
<pre>
<code>

dropTree.on('beforenodedrop', function(e){
	var n = e.dropNode;
	var copy = new Tree.TreeNode(Ext.apply({}, n.attributes));
	e.dropNode = copy;
	return true;
});

</code>
</pre>
<p>Jetzt k&#246;nnt ihr einzelne Musiker in den anderen Tree ziehen und habt eine Kopie. Auch die Attribute, wie der QuickTip, wurden &#252;bergeben. Bei Davis Gilmour k&#246;nnt ihr es sehen, es wird ebenfalls wieder Gitarre,Gesang angezeigt.</p>
<p>Hier der komplette Javascript Code aus diesem Tutorial:</p>
<pre>
<code>

Ext.onReady(function(){
	Ext.BLANK_IMAGE_URL = "yourPathTo/ext-1.0/resources/images/default/s.gif";
	Ext.QuickTips.init();
	var Tree = Ext.tree;

	var myTree = new Tree.TreePanel('tree-div', {
		loader: new Tree.TreeLoader(),
		containerScroll: true,
		animate:true,
		enableDrag:true,
		rootVisible:true
	});

	var Rroot = new Tree.AsyncTreeNode({
		text: 'Rockstars',
		id:'rockstars',
		draggable:false,
		children: [
			{text: 'Pink Floyd', id:'rock-1', allowDrag:false ,children: [
				{text: 'David Gilmour', id:'floyd-1', qtip:'Gitarre, Gesang', leaf:true, allowDelete:true},
				{text: 'Nick Mason', id:'floyd-2', qtip:'Schlagzeug', leaf:true, allowDelete:true},
				{text: 'Richard Wright', id:'floyd-2', qtip:'Keyboards', leaf:true, allowDelete:true}
			]},
			{text: 'Rolling Stones', id:'rock-2',allowDrag:false, children: [
				{text: 'Mick Jagger', id:'stones-1', leaf:true, allowDelete:true},
				{text: 'Keith Richard', id:'stones-2', leaf:true, allowDelete:true},
				{text: 'Ron Wood', id:'stones-3', leaf:true, allowDelete:true},
				{text: 'Charlie Watts', id:'stones-4', leaf:true, allowDelete:true}
			]},
			{text: 'Shakira', id:'shakira', leaf:true, allowDelete:true},
			{text: 'Madonna', id:'madonna', leaf:true, allowDelete:true}
		]
	});
	myTree.setRootNode(Rroot);
	myTree.render();
	myTree.expandAll();
	myTree.on('contextmenu', prepareMenu);

	var dropTree = new Tree.TreePanel('drop-div', {
        animate:true,
        enableDD:true,
        containerScroll: true,
        lines:false,
        rootVisible:true
    });

    var dropRoot = new Tree.TreeNode({
        allowDrag:false,
        allowDrop:true,
        id:'dRoot',
        text:'Meine liebsten Musiker'
    });

    dropTree.setRootNode(dropRoot);
    dropTree.render();
    dropRoot.expand(false, false);

	dropTree.on('beforenodedrop', function(e){
		var n = e.dropNode;
		var copy = new Tree.TreeNode(Ext.apply({}, n.attributes));
		e.dropNode = copy;
		return true;
	});

	var sm = myTree.getSelectionModel();

	var Menu = new Ext.menu.Menu({
        id:'menu',
        items: [{
                id:'expand',
                handler:expandAll,
                cls:'expand',
                text:'ausklappen/expand'
            },{
                id:'collapse',
                handler:collapseAll,
                cls:'collapse',
                text:'einklappen/collapse'
            },'-',{
                id:'remove',
                handler:removeNode,
                cls:'remove',
                text: 'l&#246;schen/delete'
        }]
    });
	function prepareMenu(node, e){
        node.select();
        Menu.items.get('remove')[node.attributes.allowDelete ? 'enable' : 'disable']();
        Menu.showAt(e.getXY());
    }
	function collapseAll(){
        Menu.hide();
        setTimeout(function(){
            Rroot.eachChild(function(n){
               n.collapse(false, false);
            });
        }, 10);
    }
    function expandAll(){
        Menu.hide();
        setTimeout(function(){
            Rroot.eachChild(function(n){
               n.expand(false, false);
            });
        }, 10);
    }
	function removeNode(){
        var n = sm.getSelectedNode();
        if(n &#038;&#038; n.attributes.allowDelete){
            myTree.getSelectionModel().selectPrevious();
            n.parentNode.removeChild(n);
        }
    }
});

</code>
</pre>
<p>Den fertigen <a href="http://dynamicinternet.eu/playpen/tutorials/tree/dragdrop-tree.html" title="Drag &#038; Drop Tree" class="liinternal">Tree k&#246;nnt ihr euch hier</a> anschauen.</p>
<hr /><ul><li><a href="http://dynamicinternet.eu/blog/2007-07-16/ext-js-news-01/" rel="bookmark" title="Permanent Link: Ext JS News 01" class="liinternal">Ext JS News 01</a></li><li><a href="http://dynamicinternet.eu/blog/2007-05-16/ext-tree-basics/" rel="bookmark" title="Permanent Link: Ext Tree Basics" class="liinternal">Ext Tree Basics</a></li><li><a href="http://dynamicinternet.eu/blog/2007-04-22/update-blogarchive/" rel="bookmark" title="Permanent Link: Update Blogarchive" class="liinternal">Update Blogarchive</a></li><li><a href="http://dynamicinternet.eu/blog/2007-10-16/ext-20-beta-1-und-yaml/" rel="bookmark" title="Permanent Link: Ext 2.0 beta 1 und YAML" class="liinternal">Ext 2.0 beta 1 und YAML</a></li><li><a href="http://dynamicinternet.eu/blog/2007-03-23/blogarchive-mit-der-ext-ajax-library/" rel="bookmark" title="Permanent Link: Blogarchive mit der Ext Ajax Library" class="liinternal">Blogarchive mit der Ext Ajax Library</a></li></ul><hr /><small>Copyright &copy; 2007-2010 dynamicinternet d9f9df690f8b5bb6036dfbdb77a9bd79</small>]]></content:encoded>
			<wfw:commentRss>http://dynamicinternet.eu/blog/2007-06-28/ext-tree-drag-and-drop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress The Loop und Template Tags</title>
		<link>http://dynamicinternet.eu/blog/2007-06-16/wordpress-the-loop-und-template-tags/</link>
		<comments>http://dynamicinternet.eu/blog/2007-06-16/wordpress-the-loop-und-template-tags/#comments</comments>
		<pubDate>Fri, 15 Jun 2007 22:02:11 +0000</pubDate>
		<dc:creator>Micha</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[template tags]]></category>
		<category><![CDATA[the loop]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://dynamicinternet.eu/blog/2007-06-16/wordpress-the-loop-und-template-tags/</guid>
		<description><![CDATA[In meinen Semmelstatz werden immer die neuesten 20 Suchbegriffe angezeigt. In letzter Zeit kamen vermehrt Anfragen zu &#8220;The Loop&#8221;, obwohl ich den Loop h&#246;chstens 2-3 mal erw&#228;hnt habe. Damit der geneigte Sucher nun auch bei mir etwas &#252;ber den Loop erf&#228;hrt, werde ich erkl&#228;ren, was &#8220;The Loop&#8221; ist und was man damit tun kann. Der [...]]]></description>
			<content:encoded><![CDATA[<p>In meinen <a href="http://www.kopfhoch-studio.de/blog/?p=2765" title="zur Plugin Homepage" class="liexternal">Semmelstatz</a> werden immer die neuesten 20 Suchbegriffe angezeigt. In letzter Zeit kamen vermehrt Anfragen zu &#8220;The Loop&#8221;, obwohl ich den Loop h&#246;chstens 2-3 mal erw&#228;hnt habe. Damit der geneigte Sucher nun auch bei mir etwas &#252;ber den Loop erf&#228;hrt, werde ich erkl&#228;ren, was <a href="http://codex.wordpress.org/The_Loop" title="The Loop" class="liexternal">&#8220;The Loop&#8221;</a> ist und was man damit tun kann.</p>
<p><span id="more-94"></span></p>
<h3>Der einfache Loop</h3>
<p>WordPress benutzt den Loop, um Blogposts darzustellen und entsprechend der eingesetzten Tags zu formatieren. Und so sieht The Loop aus:</p>
<pre>
<code>

&lt;?php
if (have_posts()) :
	while (have_posts()) : the_post();
	//irgendwelcher code
	endwhile;
else :
//code falls keine post da ist
endif;
?&gt;

</code>
</pre>
<p>Auf deutsch hei&#223;t das etwa: Wenn wir Beitr&#228;ge haben, zeige die Beitr&#228;ge, wenn keine Beitr&#228;ge da sind, mach das, was hinter else: steht.</p>
<h3>Template Tags</h3>
<p>Um dem Nutzer M&#246;glichkeiten zu geben, in seinem Template Beitr&#228;ge und Seiten individuell darzustellen, wurden von WordPress sogenannte <a href="http://codex.wordpress.org/Template_Tags" title="Template Tags" class="liexternal">&#8220;Template Tags&#8221;</a> eingef&#252;hrt, die innerhalb von The Loop verwendet werden. Template Tags sind nichts weiter als Worpress Funktionen, die bestimmte Informationen ausgeben. Eine vollst&#228;ndige Liste aller Template Tags findet ihr auf<br />
 <a href="http://codex.wordpress.org/Template_Tags" title="Template Tags" class="liexternal">http://codex.wordpress.org/Template_Tags</a>. Um nun auf der Blogstartseite Beitr&#228;ge darzustellen, m&#252;ssen wir den Loop um Template Tags und eigenen HTML Code erweitern.</p>
<h3>Der Beitragstitel</h3>
<p>F&#252;r die Beitrags&#252;berschrift verwenden wir gleich zwei Template Tags: the_permalink() und the_title().</p>
<pre>
<code>
...
&lt;?php while (have_posts()) : the_post(); ?&gt;

	&lt;h2&gt;&lt;a href=&quot;&lt;?php the_permalink() ?&gt;&quot; rel=&quot;bookmark&quot; title=&quot;Permanenter Link zu diesem Artikel&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h2&gt;
....
</code>
</pre>
<p>Der Beitragstitel wird nun in einer &#220;berschrift 2. Grades angezeigt, the_permalink() schreibt den Link zu dem Beitrag und the_title() gibt den Titel aus.</p>
<h3>Beitragsinformationen</h3>
<p>Wir m&#246;chten nat&#252;rlich Informationen ausgeben, von wem und wann der Beitrag geschrieben wurde. Daf&#252;r stehen uns eine Menge Template Tags zur Verf&#252;gung. Ich verwende hier mal eine ungeordnete Liste, um die Infos auszugeben. Den Code unter die &#220;berschrift einf&#252;gen.</p>
<pre>
<code>

&lt;ul&gt;
	&lt;li&gt;&lt;?php the_time('d. F Y'); ?&gt;&lt;/li&gt;
	&lt;li&gt; &lt;?php the_author() ?&gt;&lt;/li&gt;
	&lt;li&gt; &lt;?php the_category(', ')?&gt;&lt;/li&gt;
	&lt;li&gt; &lt;?php comments_popup_link('0 Kommentare', '1 Kommentar', '% Kommentare'); ?&gt;&lt;/li&gt;
	&lt;?php edit_post_link('bearbeiten','&lt;li&gt;','&lt;/li&gt;'); ?&gt;
&lt;/ul&gt;

</code>
</pre>
<p>Was bedeutet das nun im Einzelnen? the_time(&#8216;d. F Y&#8217;) gibt uns das Datum (und auch die Uhrzeit wenn man will) des Beitrags aus. Wie ihr seht, hat man die M&#246;glichkeit, mit Parametern innerhalb der Klammern sich die Template Tags anzupassen. In diesem Fall gibt the_time(&#8216;d. F Y&#8217;) das Datum als 14. Mai 2007 aus. Mehr Informationen zum Datums- und Zeitformat findet ihr <a href="http://de.php.net/manual/de/function.date.php" title="PHP Manual Datums und Zeitformatirung" class="liexternal">hier.</a><br />
 the_author() gibt Namen des Autors aus, the_category(&#8216;, &#8216;) listet die Kategorie(n), in die der Beitrag eigeordnet wurde. Der Parameter in den Klammern steht f&#252;r den Trenner bei mehreren Kategorien. comments_popup_link() f&#252;gt einen Link mit der Anzahl der Kommentare ein, bei dem beim Klicken die comments-popup.php (oder wenn die nicht da ist, die single.php) aufruft und direkt zur &#220;berschrift &#8220;Ein Kommentar schreiben&#8221; springt (&lt;h3 id=&quot;respond&quot;&gt;). Der edit_post_link(&#8216;bearbeiten&#8217;,'&lt;li&gt;&#8217;,'&lt;/li&gt;&#8217;)<br />
 f&#252;gt ein link &#8220;bearbeiten&#8221; ein, wenn man selber angemeldet ist. Hier sind die Parameter Text, der ausgegeben werden soll, &#246;ffendes Tag und schie&#223;endes Tag.</p>
<h3>Der Beitrag</h3>
<p>Um den Beitrag auszugeben, haben wir zwei M&#246;glichkeiten. Wir k&#246;nnen</p>
<pre>
<code>

&lt;?php the_content('Den ganzen Beitrag lesen ...'); ?&gt;

</code>
</pre>
<p>benutzen. Das gibt uns den Inhalt aus. Wenn der &lt;!&#8211;more&#8211;&gt; Quicktag benutzt wurde, wird der Inhalt bis zum &lt;!&#8211;more&#8211;&gt; ausgegeben und ein Link mit dem angegebenen Text zur Einzelansicht des Beitrags eingef&#252;gt. Wir k&#246;nnen aber auch</p>
<pre>
<code>

&lt;?php the_excerpt(); ?&gt;

</code>
</pre>
<p>verwenden. the_excerpt() gibt die ersten 55 W&#246;rter des Beitrags aus. Parameter gibt es daf&#252;r keine.</p>
<p>Zum Abschlu&#223; noch die beiden Template Tags zur Seitennaviation und der Code, der ausgef&#252;hrt wird, falls kein Beitrag gefunden wurde:</p>
<pre>
<code>

...
&lt;?php endwhile; ?&gt;
&lt;div class=&quot;navigation&quot;&gt;
&lt;div class=&quot;alignleft&quot;&gt;&lt;?php next_posts_link('&amp;laquo; Vorherige Eintr&amp;auml;ge') ?&gt;&lt;/div&gt;
&lt;div class=&quot;alignright&quot;&gt;&lt;?php previous_posts_link('N&amp;auml;chste Eintr&amp;auml;ge &amp;raquo;') ?&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;?php else : ?&gt;
		&lt;h2 class=&quot;center&quot;&gt;Nicht gefunden&lt;/h2&gt;
		&lt;p class=&quot;center&quot;&gt;Sorry, aber du suchst gerade nach etwas, was hier nicht ist.&lt;/p&gt;
		&lt;?php include (TEMPLATEPATH . &quot;/searchform.php&quot;); ?&gt;

&lt;?php endif; ?&gt;
...

</code>
</pre>
<p>Nun sollte jeder die Funktionsweise von The Loop und den Template Tags verstanden haben. Nat&#252;rlich kann man sich den Loop auch seinen eigenen Bed&#252;rfnissen anpassen. Um das zu erreichen, verwendet man die sogenannten <a href="http://codex.wordpress.org/Conditional_Tags" title="Conditional Tags" class="liexternal">Conditional Tags</a>. Aber um das zu erkl&#228;ren, m&#252;&#223;te ich erstmal in meinen Semmelstatz Suchergebnisse zu Conditional Tags finden <img src='http://dynamicinternet.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<hr /><ul><li><a href="http://dynamicinternet.eu/blog/2007-09-06/3-teil-des-wordpress-theme-tutorials/" rel="bookmark" title="Permanent Link: 3 Teil des WordPress Theme Tutorials" class="liinternal">3 Teil des WordPress Theme Tutorials</a></li><li><a href="http://dynamicinternet.eu/blog/2008-09-16/wordpress-snippets-fuer-aptana-studio/" rel="bookmark" title="Permanent Link: WordPress Snippets f&#252;r Aptana Studio" class="liinternal">WordPress Snippets f&#252;r Aptana Studio</a></li><li><a href="http://dynamicinternet.eu/blog/2007-05-26/wordpress-archiv-template-erstellen/" rel="bookmark" title="Permanent Link: WordPress Archiv Template erstellen" class="liinternal">WordPress Archiv Template erstellen</a></li><li><a href="http://dynamicinternet.eu/blog/2008-09-29/kategorien-ausschliessen-in-wordpr/" rel="bookmark" title="Permanent Link: Bestimmte Kategorien ausschlie&#223;en in WordPress" class="liinternal">Bestimmte Kategorien ausschlie&#223;en in WordPress</a></li><li><a href="http://dynamicinternet.eu/blog/2008-06-17/ein-zweiter-loop-in-wordpress/" rel="bookmark" title="Permanent Link: Ein zweiter Loop in WordPress" class="liinternal">Ein zweiter Loop in WordPress</a></li></ul><hr /><small>Copyright &copy; 2007-2010 dynamicinternet d9f9df690f8b5bb6036dfbdb77a9bd79</small>]]></content:encoded>
			<wfw:commentRss>http://dynamicinternet.eu/blog/2007-06-16/wordpress-the-loop-und-template-tags/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress Archiv Template erstellen</title>
		<link>http://dynamicinternet.eu/blog/2007-05-26/wordpress-archiv-template-erstellen/</link>
		<comments>http://dynamicinternet.eu/blog/2007-05-26/wordpress-archiv-template-erstellen/#comments</comments>
		<pubDate>Sat, 26 May 2007 17:50:30 +0000</pubDate>
		<dc:creator>Micha</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://dynamicinternet.eu/blog/2007-05-26/wordpress-archiv-template-erstellen/</guid>
		<description><![CDATA[In der letzten Zeit gab es ja so einige Diskussionen (hier und hier zum Thema Doppelter Content in WordPress. Ein gro&#223;er Teil doppelter Content wird durch das Archiv und die Kategorien erzeugt. Ich habe mal nach meinem Tutorial Ein XML Grid mit der Ext Library gegoogelt. Es ist insgesamt 11x im Google Index enthalten. Hinzu [...]]]></description>
			<content:encoded><![CDATA[<p>In der letzten Zeit gab es ja so einige Diskussionen (<a href="http://sw-guide.de/2007-05/doppelten-content-in-wordpress-vermeiden/" title="Beitrag auf SW-Guide" class="liexternal">hier</a> und <a href="http://www.basicthinking.de/blog/2007/05/21/blogs-schlechtes-verhaeltnis-von-besucher-zu-pis-wie-beihommen/" title="Beitrag auf Baisc Thinking" class="liexternal">hier</a> zum Thema Doppelter Content in WordPress.<br />
Ein gro&#223;er Teil doppelter Content wird durch das Archiv und die Kategorien erzeugt. Ich habe mal nach meinem Tutorial <a href="http://dynamicinternet.eu/blog/2007-03-26/ein-xml-grid-mit-der-ext-library/" title="mein tutorial" class="liinternal">Ein XML Grid mit der Ext Library</a> gegoogelt. Es ist insgesamt 11x im Google Index enthalten.</p>
<p>Hinzu kommt, das es mir pers&#246;nlich nicht gef&#228;llt, in Blogs mit gro&#223;en Archiven immer 10 komplette Artikel anzeigt zu bekommen, um dann zu den n&#228;chsten 10 weiterzubl&#228;ttern. Das ist un&#252;bersichtlich und es gehen dem Leser mit Sicherheit interessante Beitr&#228;ge verloren, weil er entnervt aufgibt.</p>
<p>Also hab ich mich mal aufgemacht und habe mir ein Template f&#252;r die Kategorien und das Monatsarchiv gebaut. Inspiriert wurde ich durch <a href="http://blog.suchmaschinen-optimierungen.info" title="Netprofit Blog" class="liexternal">Robert Hartl&#8217;s Jahresarchiv</a>.</p>
<p><span id="more-71"></span></p>
<h3>Vor&#252;berlegungen</h3>
<p>Das Template soll f&#252;r die Kategorien und f&#252;r das Archiv (Monats- oder Jahresarchiv) zugleich sein und soll nur eine Liste der jeweils vorhandenen Artikel mit Datum und Permalink darstellen. Es soll in der &#220;berschrift zu sehen sein, was der Leser gerade f&#252;r ein Archiv/Kategorie anschaut. Ausserdem m&#252;ssen wir den Loop &#252;berlisten, da er nur soviel Beitr&#228;ge darstellt, wie im Admin Modul unter Lesen eingestellt ist.</p>
<h3>Das Template</h3>
<p>WordPress schaut bei Kategorien immer zuerst, ob eine category.php da ist, wenn nicht, nach archive.php und wenn die nicht da ist, nach index.php. Beim Archiv genauso, zuerst nach archive.php, dann nach index.php. Also legen wir eine archive.php in unserem Template Verzeichnis an.<br />
Wir f&#252;gen den Header, den Loop sowie Sidebar und Footer ein:</p>
<pre>
<code> 

&lt;?php get_header(); ?&gt;
//the Loop
&lt;?php if (have_posts()) <img src='http://dynamicinternet.eu/blog/wp-includes/images/smilies/icon_confused.gif' alt=':?' class='wp-smiley' /> &gt;
&lt;div class="beitrag"&gt;
	&lt;ul class="archivelist"&gt;
&lt;?php while (have_posts()) : the_post(); ?&gt;
		&lt;li&gt;&lt;a href="&lt;?php the_permalink() ?&gt;" rel="bookmark" title="Permanenter Link zu diesem Artikel"&gt;&lt;?php the_time('d.m.Y'); ?&gt; - &lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/li&gt;
&lt;?php endwhile; ?&gt;
	&lt;/ul&gt;
&lt;/div&gt; 

&lt;?php endwhile; ?&gt; 

&lt;?php else : ?&gt;
// Tu hier was du willst, zB. Fehlermeldung, wenn nichts da ist.
&lt;?php endif; ?&gt;
//End the Loop
&lt;?php  get_sidebar(); ?&gt;
&lt;?php get_footer(); ?&gt;
</code></pre>
<p>Nun haben wir unser Grundger&#252;st. Ihr m&#252;&#223;t nat&#252;rlich eure HTML Elemente anpassen. Jetzt m&#252;ssen wir unterscheiden, ob wir von einer Kategorie- oder Archiveseite kommen und ob das Archiv monatlich oder j&#228;hrlich dargestellt ist. Weiterhin wollen wir alle Posts anzeigen lassen und wir brauchen unsere &#220;berschriften.<br />
Wir f&#252;gen &#252;ber dem Loop folgenden Code ein:</p>
<pre>
<code> 

if (is_category()){
	$category = get_query_var('cat');
	query_posts('cat='.$category.'&amp;showposts=-1');
	$catergorytitle = get_catname($category);
	$headline="&lt;h2&gt;Alle Beitr&#228;ge der Kategorie ".$catergorytitle."&lt;/h2&gt;n";
}
if (is_month()){
	$month = get_query_var('monthnum');
	$year = get_query_var('year');
	query_posts('year='.$year.'&amp;monthnum='.$month.'&amp;showposts=-1');
	$localmonth = $wp_locale-&gt;get_month($month);
	$headline="&lt;h2&gt;Archiv ".$localmonth." ".$year."&lt;/h2&gt;n";
}
if (is_year()){
	$year = get_query_var('year');
	query_posts('year='.$year.'&amp;showposts=-1');
	$headline="&lt;h2&gt;Archiv ".$year."&lt;/h2&gt;n";
} 

</code></pre>
<p>Die &#220;berschrift f&#252;gen wir unterhalb von if (have_posts()) : ein.</p>
<pre>
<code> 

if (have_posts()) :
echo $headline; ?&gt; 

</code></pre>
<p>Jetzt sollte eurer Archiv genauso aussehen wie meins <img src='http://dynamicinternet.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Die Liste k&#246;nnt ihr mit CSS euren Bed&#252;rfnissen anpassen.</p>
<p>Ich hatte gedacht, das ich das Template ebenfalls f&#252;r die Tags benutzen kann, leider bekomme ich eine Fehlermeldung von der Datenbank. Mal sehen, ob ich das hinbekomme.</p>
<hr /><ul><li><a href="http://dynamicinternet.eu/blog/2007-05-31/pagebar-plugin-mit-nofollow/" rel="bookmark" title="Permanent Link: Pagebar Plugin mit nofollow" class="liinternal">Pagebar Plugin mit nofollow</a></li><li><a href="http://dynamicinternet.eu/blog/2007-06-26/mein-ext-blog-archiv-geht-wieder/" rel="bookmark" title="Permanent Link: Mein Ext Blog Archiv geht wieder" class="liinternal">Mein Ext Blog Archiv geht wieder</a></li><li><a href="http://dynamicinternet.eu/blog/2008-09-23/portfolioseite-mit-wordpress/" rel="bookmark" title="Permanent Link: Portfolioseite mit WordPress" class="liinternal">Portfolioseite mit WordPress</a></li><li><a href="http://dynamicinternet.eu/blog/2007-04-19/templates-mit-der-ext-library/" rel="bookmark" title="Permanent Link: Templates mit der Ext Library" class="liinternal">Templates mit der Ext Library</a></li><li><a href="http://dynamicinternet.eu/blog/2007-03-23/blogarchive-mit-der-ext-ajax-library/" rel="bookmark" title="Permanent Link: Blogarchive mit der Ext Ajax Library" class="liinternal">Blogarchive mit der Ext Ajax Library</a></li></ul><hr /><small>Copyright &copy; 2007-2010 dynamicinternet d9f9df690f8b5bb6036dfbdb77a9bd79</small>]]></content:encoded>
			<wfw:commentRss>http://dynamicinternet.eu/blog/2007-05-26/wordpress-archiv-template-erstellen/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
