neontrauma.de » WordPress
Hier siehst du alle Artikel mit dem Schlagwort WordPress
11. April 2010

Da diese Erklärung den Umfang der Shoutbox ein wenig sprengen würde, hier ein Tutorial dazu: Ziel ist es, die letzten beiden Artikel eines WordPress-Blogs so nebeneinander anzeigen zu lassen, dass in der linken Box der zweitneueste Artikel steht und rechts der aktuellste.

Für dieses Beispiel habe ich mir die home.php geschnappt – das ist das Template, das für die Startseite des Blogs zuständig ist (natürlich könnt ihr auch die index.php, category.php etc. nehmen – je nachdem, wo ihr diese zweispaltige Anzeige realisieren wollt).

Wir legen ein Div der Klasse artikelbox an, das wiederum zwei weitere, nebeneinander stehende Divs mit den beiden Artikel enthalten soll. Das linke Div zeigt hierbei den vorletzten Artikel an und gehört der Klasse boxlinks an; das rechte Div mit dem neusten Artikel hat dementsprechend die Klasse boxrechts.

Zunächst legen wir das umfassende Div artikelbox an und weisen der Variable $box den Wert rechts zu.
Die dritte Zeile – <?php query_posts(‘showposts=2′); ?> – ist dafür zuständig, dass auf dieser Seite nur zwei Artikel ausgegeben werden sollen (diesen Wert könnt ihr natürlich variieren, und wenn auf dieser Seite ebenso viele Artikel angezeigt werden sollen wie auf allen anderen Seiten, dann könnt ihr die Zeile auch ganz weglassen, weil dann der im Dashboard eingestellte Wert greift).
Nun beginnt der Loop: wenn unsere Variable den Wert rechts hat, dann bekommt das Div die Klasse boxrechts zugewiesen. Im Div enthalten sind die Artikelüberschrift sowie der Auszug des Beitrags.
Anschließend endet der Ausgabeteil des ersten Beitrags, und mt Hilfe von PHP wird dem nächsten Div die Klasse boxlinks zugewiesen.
Der Fall, dass der Besucher eine nichtexistente Adresse angibt, wird am Ende mit einer entsprechenden Fehlermeldung abgefangen.

<div class="artikelbox">
<?php $box = rechts; ?>
<?php query_posts('showposts=2'); ?>
<?php if (have_posts()) : while (have_posts()) : the_post();  ?>
<?php if ($box == rechts) ?>
<div class="post box<?php echo $box;?>" id="post-<?php the_ID(); ?>">
<h2 id="post-<?php the_ID(); ?>"><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
</div>
<?php if (($box==rechts) ? $box=links : $box=rechts); endwhile; ?>
<?php else: ?>
Sorry, diese Seite existiert nicht.
<?php endif; ?>
</div>

Nun zum Stylesheet – hier haben die beiden Klassen boxlinks und boxrechts die gleiche Formatierung, aber der neuere Artikel könnte zum Beispiel durch eine kräftigere Farbgebung hervorgehoben werden. Das float: right; lässt den neueren Artikel rechts statt links stehen; ein float: left; kehrt diese Anzeige um.

.artikelbox { clear: both; }
.boxlinks, .boxrechts { width: 39%; float: right; padding: 0 10px; }

Ein Danke geht an das Tutorial “Artikel in Spalten aufteilen” von Monika auf texto.de, deren Vorgehensweise ich hier als Grundlage verwendet und etwas umgebaut habe.

6. April 2010

Hier auf neontrauma.de wird euch an mehreren Stellen angezeigt, wie viele Beiträge es beispielsweise in einer Kategorie gibt oder wie viele Treffer eine Suchabfrage lieferte.
In diesem Tutorial erkläre ich euch, wie man diese verschiedenen Informationen über die Artikelanzahl ausgeben lässt.

Sidebar: Anzahl der Artikel in einer Kategorie

Wenn ihr eure Kategorien in der Sidebar über das entsprechende Widget auflisten lasst, das bei WordPress standardmäßig mitgeliefert wird, dann müsst ihr dort einfach das Häkchen bei “Zeige Artikel-Zähler” setzen. Das Gleiche gilt für das von dem Plugin My Category Order (das euch eine beliebige Anzeigereihenfolge der Kategorien ermöglicht) stammende Widget.

Sofern ihr auf Widgets verzichtet und die Kategorie-Anzeige via Code in einem eurer Templates steuert, also so:
<?php wp_list_categories(); ?>
… verwendet den entsprechenden Parameter show_count:
<?php wp_list_categories('show_count=1'); ?>
1 bedeutet, dass die Anzahl der Artikel angezeigt wird; 0 (der Standardwert) unterdrückt dies.

Kategorieseite: Anzahl der enthaltenen Artikel

Um auch auf der Übersichtsseite der jeweiligen Kategorie anzuzeigen, wie viele Artikel in ihr enthalten sind, schnappt euch eure category.php. Sofern ihr diese Seite noch nicht haben solltet, kopiert einfach die index.php und benennt sie um in category.php. Ab sofort ist für die Anzeige der Kategorien dieses Template zuständig.
Fügt zwischen der Seitenüberschrift und dem Loop Folgendes ein:
Die Kategorie <?php echo single_cat_title(); ?> enthält <?php $this_category = get_category($cat); echo $this_category->category_count." Artikel"; ?>
Hier wird auch gleich noch einmal der Name der betreffenden Kategorie mit ausgegeben.

Anzahl der Suchergebnisse

Auch hierfür verwenden wir wieder eine spezifische Templatedatei, die search.php. Solltet ihr in eurem Theme über diese noch nicht verfügen, legt sie analog zur oben beschriebenen Vorgehensweise an.
Zwischen Seitenüberschrift und Loop fügt ihr nun ein:
<?php $NumResults = $wp_query->found_posts; echo $NumResults; ?> Treffer für die Suche nach <?php the_search_query(); ?>.

Zusätzlich zu der Zahl der Suchergebnisse wird auch der Suchterm angezeigt.

Anzahl der Artikel eines Autors

Um auszugeben, wie viele Artikel ein Autor bereits verfasst hat, nehmen wir passenderweise die Datei author.php (sofern nicht vorhanden, siehe oben ;) ). Aufrufen könnt ihr diese Autorenseite übrigens über http://domain.de/author/autorenname (domain und autorenname müsst ihr natürlich an eure Seite anpassen :) ).

Zunächst müssen wir bestimmen, von welchem Autoren die Artikel gezählt werden sollen.
<?php
if(isset($_GET['author_name'])) :
$curauth = get_userdatabylogin($author_name);
else :
$curauth = get_userdata(intval($author));
endif;
?>

Jetzt erfolgt die Ausgabe:
<?php echo $curauth->display_name; ?> hat <?php the_author_posts(); ?> Artikel verfasst.

Sofern ihr diese Informationen nicht auf einer alleinstehenden Seite ausgeben wollt, sondern innerhalb des Loops (also zum Beispiel bei den Beitragsinformationen unterhalb eines Artikels), braucht ihr $curauth nicht. Hier wird der betreffende Autor automatisch durch den Loop des jeweiligen Artikels ausgewählt. Es reicht also:
<?php the_author(); ?> hat <?php the_author_posts(); ?> Artikel verfasst

Anzahl sämtlicher Artikel

Mit einer weiteren Prise PHP könnt ihr auch ausgeben, wie viele Postings euer Blog insgesamt enthält. Für den Fall, dass ihr diese Information nicht via Template anzeigen lassen wollt, sondern in einer über das Dashboard verwalteten statischen Seite, in einem Artikel oder Textwidget, benötigt ihr ein Plugin wie Exex-PHP, was die Ausführung von PHP dort erlaubt.
<?php
$count_posts = wp_count_posts( 'post' );
echo 'Mein Blog enthält ' . $count_posts->publish . ' Postings.';
?>:

Viel Spaß damit!

24. September 2009

Vor rund anderthalb Jahren hatte ich ein kurzes Tutorial geschrieben, wie man die Blogfunktion von WordPress in eine “normale” Seite einbinden kann. Damals hätte ich nicht damit gerechnet, dass der Artikel so viele Leser und Kommentatoren findet, und angesichts von über fünfzig Kommentaren und Rückfragen folgt hier nun die angekündigte überarbeitete Version des Tutorials. :o)

Ausgangsposition

Du hast eine “normale” Webseite – sprich, ohne WordPress, geschrieben in HTML. Nun möchtest du deine Homepage um eine Blogfunktion erweitern und dafür WordPress nutzen – aber deine bisherigen Inhalte möchtest du aus irgendwelchen Gründen nicht über die Seitenfunktion in WordPress einpflegen, sondern weiterhin direkt als HTML-Dateien verwalten.

Damit du WordPress verwenden kannst, benötigst du eine MySQL-Datenbank und einen PHP-fähigen Server. WordPress hast du bereits installiert – eine Anleitung zur Installation von WordPress findest du hier.

unser Vorgehen

Anders als in der ersten Version dieses Tutorials werden wir das Pferd nun quasi von hinten aufzäumen: anstatt uns die Dateien der bisherigen Webseite zu schnappen und dort mühsam den WordPress-Code hineinzufrickeln (was gerne für kunterbunte Fehlermeldungen sorgt), nehmen wir eine saubere WordPress-Installation als Grundlage und bauen dort unsere bisherigen Inhalte hinein. Somit sparen wir uns jede Menge Arbeit und Fehlerquellen.

Exkurs: WordPress-Themes verstehen

Das Aussehen einer WordPress-Seite und die Ausgabe des Inhalts wird von den Theme-Dateien bestimmt. Diese enthalten das HTML-Gerüst, in das via PHP die Blogeinträge usw. eingebaut werden. Die Dateien der einzelnen Themes befinden sich im Verzeichnis wp-content/themes/deinthemename – in diesem Tutorial gehen wir davon aus, dass du noch kein eigenes WordPress-Theme angelegt hast. Also schnappen wir uns das mitgelieferte classic-Theme, aktivieren es über das Dashboard und werfen einen Blick in das Verzeichnis und die darin enthaltenen Dateien.

Du siehst hier diverse PHP-Dateien und ein Stylesheet (style.css). Das Stylesheet enthält die Formatierungsangaben wie Farbe, Schriftgröße usw. In der Datei header.php steht alles, was vor dem eigentlichen Inhalt kommt und sich auf jeder Unterseite gleicht (also den head-Bereich des HTML, die Headergrafik, …). Analog dazu enthält die footer.php alles, was nach dem Inhalt kommt. Beide werden mit <?php get_header(); ?> bzw. <?php get_footer(); ?> in diejenigen Dateien eingebunden, die den eigentlichen Inhalt – also etwa die Blogeinträge – ausgeben. Die Datei index.php ist für die Ausgabe der Blogeinträge zuständig. Die anderen Dateien interessieren uns erst einmal nicht.

den Blog stylen

Als erstes kümmern wir uns darum, dass der Blog so aussieht wie auch die “normale” Webseite.
Dafür ersetzt du die Datei style.css im Theme-Verzeichnis mit dem Stylesheet deiner normalen Seite – ich gehe einfach mal davon aus, dass du vorbildlich mit Stylesheets arbeitest und nicht all deine Formatierungsangaben direkt im HTML machst. ;-) Andernfalls musst du das eben von Hand in die Blogdateien eintragen.

Neben dem CSS ist natürlich auch das HTML für das Aussehen der Seite verantwortlich. Du musst nun also deine Div-Container oder Tabellen – je nachdem, wie dein Layout aufgebaut ist – in die Blogseiten übertragen. Keine Angst, das ist nicht schwer.

Öffne die Datei wp-content/themes/classic/header.php und ersetze den folgenden letzten Teil dieser Datei:

<body <?php body_class(); ?>>
<div id="rap">
<h1 id="header"><a href="<?php bloginfo('url'); ?>/"><?php bloginfo('name'); ?></a></h1>

<div id="content">
<!-- end header -->

einfach durch <body>

Falls du eine Headergrafik oder Ähnliches verwendest, was auf jeder Seite oberhalb des Contents angezeigt wird, kannst du den dafür zuständigen Code hier in die header.php enfügen.

Öffne die Datei index.php und baue das HTML so um, wie es deinem Layoutgerüst entspricht. Da, wo sonst dein Inhaltstext steht und wo die Blogeinträge hingeladen werden sollen, befindet sich hier der sogenannte Loop – das ist alles zwischen <?php if (have_posts()) : ?> und  <?php endif; ?>. Das lässt du einfach so stehen.

Damit die Div-Verschachtelung stimmt, musst du dir jetzt noch die footer.php schnappen und an dein Layout anpassen. Das heißt, es bleibt entweder nur das hier stehen:

<?php wp_footer(); ?>
</body>
</html>

… oder eben auch noch der Footer-Bereich deiner Webseite, etwa ein Div mit einem Copyright-Hinweis.

deine Inhalte einbauen

Jetzt kommen wir zu deinen Inhalten.
Kopiere die Datei index.php aus deinem Theme-Verzeichnis und benenne sie in ueber-mich.php um (oder wie auch immer diese Unterseite heißen soll). Öffne deine entsprechende “normale” Unterseite und kopiere den Codeteil, der zwischen den beiden <body>-Tags  steht (ggf. natürlich ohne die Headergrafik, sofern du das bereits in die header.php eingebaut hast), in die ueber-mich.php zwischen das <?php get_header(); ?> und das <?php get_sidebar(); ?>.

Ganz zu Beginn dieser Datei, vor das <?php get_header(); ?>, fügst du noch ein:
<?php require('../../../wp-blog-header.php'); ?>

Deine Navigation werden wir später noch genauer betrachten – die wird nämlich in die Datei sidebar.php ausgelagert und über das <?php get_sidebar(); ?> eingebunden. Wenn in deinem Layout die Navigation also vor dem Inhalt steht, musst du das <?php get_sidebar(); ?> entsprechend unterhalb des <?php get_header(); ?> einfügen. Den Code deiner Navigation fügst du also nicht hier ein, um den kümmern wir uns später!

Du hast also:
<?php require('../../../wp-blog-header.php'); ?>
<?php get_header(); ?>

<!-- ab hier kommt dein Inhalt -->
<div id="content">
<h2>ueber mich</h2>
<p>blah...</p>
</div>
<!-- Ende deines Inhalts -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

So verfährst du mit all deinen “alten” Unterseiten: Du bettest sie in das WordPress-Layout ein und ersetzt den Teil, wo WordPress normalerweise den Inhalt aus der Datenbank abruft, einfach direkt mit deinem HTML-Inhalt.

Wenn du jetzt http://deineseite.de/wp-content/themes/classic/ueber-mich.php aufrufst – siehst du deine entsprechende Unterseite. :-)

die Navigation

Ganz fertig sind wir noch nicht. Denn was wäre eine Webseite ohne Menü?
Wie gesagt, steht die Navigation in der sidebar.php und wird über <?php get_sidebar(); ?> eingebunden. Öffne also die sidebar.php und lass dich nicht von dem ganzen Code dort erschlagen. ;-) Der Einfachheit halber ersetzen wir ihn mit einer abgespeckten Version:

<div id="sidebar">
<ul>
<?php     /* Widget-Sidebar  */ if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?>
<?php endif; ?>
</ul>

<ul>
<li><h2><?php _e('Blog-Archiv'); ?></h2>
<ul><?php wp_get_archives('type=monthly'); ?></ul>
</li>

<?php wp_list_categories('show_count=1&title_li=<h2>' . __('Blog-Kategorien') . '</h2>'); ?>
</ul>
</div>

Hier wird zunächst ein Platzhalter für die Widgets gelassen. Widgets sind Inhalte der Sidebar, die du im Dashboard von WordPress ganz einfach per Drag&Drop einfügen oder verändern kannst – mehr dazu habe ich hier erklärt.
Darunter wird das Archiv deiner Blogeinträge angezeigt, gruppiert nach Monaten. Als nächstes wird dann eine Liste deiner Blogkategorien generiert, in die du deine Einträge eingeordnet hast. Wenn du beispielweise das Archiv nicht haben möchtest, kannst du den Codeteil natürlich einfach löschen. Weitere Elemente, wie etwa die Tagcloud, kannst du als Widget einfügen.

So. Das ist der Menüteil, der dein Blog betrifft – jetzt wollen aber natürlich auch die eben eingebauten Unterseiten verlinkt werden. Das machen wir als “normales” HTML hier in der sidebar.php. Dein Code könnte beispielsweise so aussehen:

<div id="sidebar">
<ul>
<?php     /* Widget-Sidebar  */ if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?>
<?php endif; ?>
</ul>

<ul>
<li><h2><?php _e('Blog-Archiv'); ?></h2>
<ul><?php wp_get_archives('type=monthly'); ?></ul>
</li>

<?php wp_list_categories('show_count=1&title_li=<h2>' . __('Blog-Kategorien') . '</h2>'); ?>
</ul>


<h2>Seiten</h2>
<ul>
<li><a href="<?php bloginfo('
template_directory'); ?>/ueber-mich.php" title="&uuml;ber mich">&uuml;ber mich</a></li>
<li><a href="<?php bloginfo('template_directory'); ?>/meine-haustiere.php" title="meine Haustiere">meine Haustiere</a></li>
<li><a href="<?php bloginfo('template_directory'); ?>/impressum.php" title="Impressum">Impressum</a></li>
</ul>
</div>

… okay, das war ein langes Tutorial, aber ich hoffe, ich habe alles verständlich erklärt! :-)
Wenn ihr noch Fragen habt, könnt ihr sie hier natürlich wie immer gerne stellen.

19. September 2009

Das Problem dürfte jedem deutschsprachigen WordPress-Blogger begegnet sein: von Hause kann WordPress nicht mit Umlauten (ä, ö, ü) in den Permalinks umgehen. Aus einem Artikel namens “Braunbär” wird dann blog.de/braunbar.php – doof, weil Suchmaschinen wie Google schließlich die Wörter in URLs berücksichtigen.

Abhilfe schafft da das Plugin o42-clean-umlauts – einfach ins Plugin-Verzeichnis kopieren, aktivieren, fertig.

Aber es geht auch cleverer und ohne Plugin, wie codestyling in seinem Artikel zeigt. :-)
Auf diese Lösung bin ich übrigens durch ein Posting von Robert gestoßen – danke dafür!

4. August 2009

Nur kurze Zeit nach dem Release des Sicherheitsupdates 2.8.2 ist gestern mit der Version 2.8.3 ein weiterer Bugfix erschienen. Diesmal wurde ein schwerwiegendes Rechteproblem behoben, sodass ihr unbedingt upgraden solltet.

Die it-republik erläutert:

Das Problem tritt auf, sobald man als User registriert ist. Über einen modifizierten URL können bereits mit dem Status “Abonnent” diverse Einstellungsseiten wie zum Beispiel die Bereiche für Plug-ins und Themes aufgerufen und geändert werden.

Wie immer findet ihr das Upgradepaket sowie die deutsche Sprachdatei auf wordpress-deutschland.org.

2. August 2009

Der ein oder andere von euch setzt vielleicht auch WordPress MU ein oder plant zumindest, dies zu tun. Auch ich arbeite gerade an einem Projekt, bei dem WordPress MU zum Einsatz kommt. Da ich ein anscheinend relativ häufiges Problem zu lösen hatte, für das man im WWW nicht unbedingt direkt eine Lösung findet, hier ein kurzes Tutorial. Vielleicht bewahrt es ja jemanden vor dem Verzweifeln. :o)

Aufgabe: die URL einer WPMU-Installation soll geändert werden. Installiert hatte ich WPMU in das Verzeichnis domain.de/wpmu – jetzt soll es aber über wpmu.domain.de erreichbar sein. Umzüge von domain-a.de zu domain-b.de funktionieren analog dazu.
Klingt nicht schwer, aber relativ schnell sitzt man dann vor einer Umleitung, die nicht aufgelöst werden kann, oder dem beliebten 500 – Internal Server Error. :o)

was ist zu ändern?

  • Im Adminbereich von WPMU auf Admin → Blogs gehen und dort die neue URL eintragen.
  • In der Datenbank den Eintrag in der Tabelle wp_site ändern.
  • In der wp-config.php die Blogadresse ändern.
  • In der .htaccess ggf. die Umleitung auf das Unterverzeichnis entfernen

Das war’s auch schon! :)

20. Juli 2009

Vor wenigen Stunden ist mit WordPress 2.8.2 ein wichtiger Sicherheitsfix veröffentlicht worden.
Das Update von 2.8 auf 2.8.1 erschien ja schon recht zügig, und mit 2.8.2 wird nun eine weitere Sicherheitslücke geschlossen.

Diese ermöglichte es Angreifern, über die Kommentarfunktion XSS-Exploits zu nutzen: so wurden die URLs der Kommentar-Autoren nicht korrekt überprüft und es war daher mit einer entsprechenden URL möglich, dass der Admin über die Anzeige dieser URL im Adminbereich auf eine schadhafte Seite weitergeleitet wurde.

Zeitweise ging zwar gerade eben erst einmal der Server von WordPress-Deutschland in die Knie, aber im Laufe des Tages sollte es problemlos möglich sein, die eingedeutschte Version 2.8.2 von dort herunterzuladen.

Kleine Anmerkung vorab: dieses Tutorial ist zwar für WordPress geschrieben, aber die date()-Funktion von PHP gilt natürlich überall. :-)

Wenn ihr für euer WordPress-Blog ein fertiges Theme verwendet, wird das Datum der einzelnen Beiträge oft auf Englisch angezeigt – etwa als “June 17th 2009″. In einem deutschsprachigen Blog passt das natürlich nicht so ganz. Oder ihr möchtet, dass der Monatsname nicht ausgeschrieben, sondern als Zahl dargestellt wird, oder oder oder…
Hier zeige ich euch, wie ihr die Ausgabe des Datums ganz einfach nach euren Wünschen formatieren könnt.

deutsche Monatsnamen

Wenn ihr möchtet, dass die Monats- und Wochentagsnamen auf Deutsch und nicht auf Englisch angezeigt werden, müsst ihr einfach die deutsche Sprachdatei installieren.

die Template Tags

WordPress bietet verschiedene Template Tags für das Datum, beispielsweise:
<?php the_date(); ?>
und
<?php the_time(); ?>
Beide lassen sich durch einige Parameter (das sind die Angaben in den Klammern) ergänzen.

Die weiteren Template Tags zum Thema Datum kannst du dir in der WordDoku ansehen, sie sind hier aber nicht von Belang.

the_date() hat einen kleinen Nachteil: wenn ihr mehrere Beiträge am selben Tag veröffentlicht und diese auf der gleichen Seite aufgelistet werden (also beispielsweise auf der Startseite), dann wird nur vom neusten Beitrag das Datum angezeigt.
Daher verwende ich the_time() nicht nur für die Uhrzeit, sondern auch für das Datum – dank der oben erwähnten Parameter ist das dies möglich.

the _date() und the_time()

the_date() und the_time() müssen innerhalb des Loops stehen und sehen dann ungefähr so aus:
<p>geschrieben am <?php the_date(); ?> um <?php the_time(); ?></p>

Die Ausgabe hängt von den Einstellungen ab, die du im Backend unter Einstellungen → Allgemein gemacht hast. Hier kannst du festlegen, wie das Datum und die Uhrzeit formatiert werden sollen. Standardmäßig gibt the_time() die Uhrzeit aus und the_date() das Datum.

WordPress: das Datum formatieren

individuelle Formatierung

Jetzt kann es aber der Fall sein, dass du das Datum auf verschiedenen Unterseiten anders darstellen möchtest – zum Beispiel auf der index.php als “geschrieben am 17.6.” und in der single.php (also, wenn man den Beitrag aufgerufen hat) als “geschrieben am Mittwoch, dem 17. Juni 2009″.
Hierfür musst du die time-Angabe in den einzelnen PHP-Dateien nun durch Parameter anpassen, um die Ausgabe zu beeinflussen. Vergiss nicht die Anführungsstriche!

<p>geschrieben am <?php the_time('j. F Y') ?></p>

… ergibt:

geschrieben am 17. Juni 2009

Die Buchstaben bestimmen also die Ausgabe des Datums. Am gebräuchlichsten sind diese:

  • j – der Tag als Zahl, ohne führende Null (1 statt 01)
  • F – Monatsname
  • G - 24Stunden-Format, ohne führende Null
  • i - Minuten, mit führender Null
  • l (kleines L) – Wochentagsname
  • n – Monat als Zahl, ohne führende Null
  • Y – das Jahr, vierstellig angegeben

Alle anderen Möglichkeiten findest du in der PHP-Referenz zum Thema date.

die Autorin
neontrauma neontrauma, 23 Jahre alt, Studentin und freiberufliche Webdesignerin, liebt Coding & Fotografie und wohnt in Leverkusen. mehr?
neontrauma im www
flickr fotocommunity deviantART twitter facebook StudiVZ lifestream.fm last.fm