{"id":565,"date":"2016-03-29T10:24:57","date_gmt":"2016-03-29T08:24:57","guid":{"rendered":"https:\/\/schwarzer.de\/blog\/?p=565"},"modified":"2020-09-15T14:20:05","modified_gmt":"2020-09-15T12:20:05","slug":"typo3-6-2-fluid-und-eigene-viewhelper","status":"publish","type":"post","link":"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/","title":{"rendered":"Typo3 6.2 Fluid und eigene ViewHelper"},"content":{"rendered":"<p><!-- <ezTOC> -->In der Entwicklung von Typo3 Extbase-Extensions ist es wie im wahren Leben: Solange man das macht, was die breite Masse tut, ist alles in Butter. Aber wehe dem, wenn man beginnt dar\u00fcber nachzudenken, aus der Reihe zu tanzen. Dann wird es n\u00e4mlich etwas komplizierter. Nehmen wir mal an, dass man sch\u00f6n brav seine Datenstruktur (wie unter anderem in <a href=\"\/blog\/extension-entwicklung-mit-extbase-teil-2\/\">diesem Artikel<\/a> beschrieben) angelegt hat. Man hat seine Getter und Setter m\u00fctterlich gepflegt und m\u00f6chte nun die Daten ins Frontend bringen. Das funktioniert in Typo3 Extbase nat\u00fcrlich mit <strong>Fluid<\/strong>.<\/p>\n<p><!--more--><\/p>\n<p>Fluid stellt eine Reihe von Methoden zur Verf\u00fcgung, wie man seine Daten verarbeiten kann, wie man durch diese iteriert um diese schlie\u00dflich an den Mann zu bringen. Diese Funktionalit\u00e4ten hei\u00dfen in Typo3 Fluid <strong>ViewHelper<\/strong> und man kann als gut trainierter Webentwickler alles in der <a href=\"https:\/\/docs.typo3.org\/typo3cms\/ExtbaseGuide\/Fluid\/ViewHelper\/For.html\">offiziellen Dokumentation<\/a> nachlesen. Neben Beschreibung der (erforderlichen) Parameter findet man dort auch Praxisbeispiele.<\/p>\n<h2 id=\"warum-eigene-viewhelper-f\u00fcr-typo3-extbase-fluid\">Warum eigene ViewHelper f\u00fcr Typo3 Extbase Fluid<\/h2>\n<p>Wenn man durch die Liste der ViewHelper geht, sich durch Schleifen und Verzweigungen durchw\u00fchlt, wird man zumindest bei einigen Webprojekten leider feststellen m\u00fcssen, dass diese f\u00fcr ganz spezielle F\u00e4lle nicht ausreichen. Das ist so wie bei einem Anzug. Diesen hat man vor der Hochzeit ausgesucht und muss einige Monate nach der Hochzeit feststellen, dass er nicht mehr passt (ich spreche nicht aus Erfahrung). Jetzt muss man ihn zum Schneider geben, damit dieser einige Erweiterungen vornimmt. Genau so ist es im Fall der Fluid Entwicklung: Wenn man sich mit den bereits vorhandenen ViewHelpern nicht mehr begn\u00fcgen kann, muss man eine M\u00f6glichkeit suchen, eigene ViewHelper zu implementieren. Daran haben die Kollegen von Typo3 nat\u00fcrlich gedacht und deswegen gibt es sie: die <strong>custom ViewHelper<\/strong>.<\/p>\n<h2 id=\"die-dateistruktur-vom-eigenen-viewhelper\">Die Dateistruktur vom eigenen ViewHelper<\/h2>\n<p>Bevor man sozusagen mit Schere und Nadel loslegt, um seinen Anzug zu erweitern, sollte man erstmal wie jeder gute Entwickler Ma\u00df nehmen. Folgende Fragen sollte man sich schon im Voraus stellen:<\/p>\n<ul>\n<li>Was sollten meine ViewHelper k\u00f6nnen?<\/li>\n<li>Welchen Input wird dieser verarbeiten?<\/li>\n<li>Welchen Output stellt dieser in welcher Form bereit?<\/li>\n<li>M\u00f6chte ich mit den verarbeiteten Daten meines ViewHelpers weiterarbeiten?<\/li>\n<\/ul>\n<p>Wenn das gekl\u00e4rt ist, kann man direkt loslegen und seine Dateistruktur anlegen. Eine Extension liegt standardm\u00e4\u00dfig im folgenden Verzeichnis: <code>[Typo3-Verzeichnis]\/typo3conf\/ext\/[Meine Extension]<\/code>. Dort gibt es einen Ordner <code>Classes<\/code>, der sowohl die Verabeitung der Daten (Logistikschicht) als auch die Schnittstelle zur Datenbank (das Model und die Repositories) beinh\u00e4lt. Und genau diesen Ordner kann man jetzt um einen weiteren Unterordner <code>ViewHelpers<\/code> erweitern. Wie der Name eben schon sagt, kommt dort unser eigener ViewHelper hinein.<\/p>\n<h2 id=\"ein-bisschen-standard-bitte\">Ein bisschen Standard bitte!<\/h2>\n<p>In Typo3 gilt besonders ab Version 6.2 immer mehr der Slogan: <strong>Convention over configuration<\/strong>. Das bedeutet f\u00fcr uns als deutschsprachige B\u00fcrger: Die Vereinbarungen stehen w\u00e4hrend der Entwicklung <em>\u00fcber<\/em> der Konfiguration des Systems oder der eigenen Extension. Auch bei der Erstellung eigener ViewHelper wird hier keine Ausnahme gemacht. So hat zum Beispiel der Name des ViewHelpers auch Auswirkungen darauf, wie er im Fluid-Template aufgerufen wird und ob Typo3 das kleine Helferlein \u00fcberhaupt findet.<\/p>\n<h2 id=\"anwendungsbeispiel-f\u00fcr-einen-eigenen-viewhelper-typo3-6.2\">Anwendungsbeispiel f\u00fcr einen eigenen ViewHelper (Typo3 6.2)<\/h2>\n<p>Nehmen wir an, wir br\u00e4uchten eine ganz simple Verarbeitungslogik: Wir m\u00f6chten einen String splitten. Oder wie man auf PHP sagen w\u00fcrde: <code>explode<\/code>n. Dieser soll einen String (egal, ob dieser im Endeffekt aus der Datenbank oder aus einer anderen Quell kommt) in mehrere Teile zerteilen und die M\u00f6glichkeit bereitstellen, mit diesen einzelnen Teilen zu arbeiten. So kann man z.B. eine kommaseparierte Liste mit IDs nochmal mit einer <code>.xlf<\/code>-\u00dcbersetzungdatei \u00fcbermalen, damit auch die Spanischen Websitebesucher gl\u00fccklich sind. Sie ahnnen es bereits: Die M\u00f6glichkeiten mit custom ViewHelper sind schier unbegrenzt<\/p>\n<h2 id=\"custom-fluid-viewhelper-anlegen\">Custom Fluid ViewHelper anlegen<\/h2>\n<p>Wir vertiefen uns in den Lieblingseditor und erstellen die Datei <code>SplitViewHelper.php<\/code> im Verzeichnis <code>[Typo3-Verzeichnis]\/typo3conf\/ext\/[Meine Extension]\/Classes\/ViewHelpers\/<\/code>. Der Inhalt des frischen ViewHelpers wird hier Schritt f\u00fcr Schritt erl\u00e4utert:<\/p>\n<pre><code>&lt;?php<\/code><\/pre>\n<p>Das bedarf eigentlich keiner Erl\u00e4uterung. Ich m\u00f6chte aber trotzdem darauf verweisen (da man das gelegentlich selber vergisst), dass man zwar ein \u00f6ffnendes PHP-tag braucht, aber kein schlie\u00dfendes.<\/p>\n<pre><code>namespace SchwarzerDE\\Glossareditor\\ViewHelpers;<\/code><\/pre>\n<p>Hier wird f\u00fcr die Datei ein Namespace angegeben. Der erste Teil ist der <strong>Vendor<\/strong>, in unserem Fall <code>SchwarzerDE<\/code>.<\/p>\n<pre><code>use \\TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\AbstractViewHelper;\r\nclass SplitViewHelper extends AbstractViewHelper {<\/code><\/pre>\n<p>Um von <code>AbstractViewHelper<\/code> erben zu k\u00f6nnen, muss man logischerweise irgendwo auf diese Klasse verweisen. Das tut man mit dem <code>use<\/code>-Statement. Diese Vorgehensweise bietet dem Entwickler einige vordefinierte Funktionen und Methoden, wie zum Beispiel: <code>initializeArguments()<\/code>. Hier kann man festlegen, welche Parameter unser ViewHelper annehmen wird und wie diese gehandhabt werden sollen.<\/p>\n<p>Jetzt kommen wir zum Kern unserer Datei. Die Funktion <code>render<\/code> ist f\u00fcr das Ausgeben der Inhalte verantwortlich. Das h\u00f6rt sich im ersten Moment unspektakul\u00e4r an: Man gibt ihr etwas Input und bekommt daf\u00fcr etwas Output. Ja, das stimmt. Der Clou ist aber, dass man hier nicht nur Plain-Strings zur\u00fcckbekommen kann, sondern auch Variablen, mit denen man dann wie gewohnt weiterarbeiten kann. So gibt es zum Beispiel die Variable <code>$this-&gt;templateVariableContainer<\/code>, in die man zus\u00e4tzliche, eigene Variablen ablegen kann, um sie dann z.B. mit einer <code>f:if<\/code>-Abfrage zu pr\u00fcfen oder anderweitig zu verarbeiten. Die Funktion <code>$this-&gt;templateVariableContainer-&gt;add($variableName, $variableValue)<\/code> bietet genau diese Funktionalit\u00e4t.<\/p>\n<h2 id=\"einbindung-des-eigenen-viewhelpers-in-fluid\">Einbindung des eigenen ViewHelpers in Fluid<\/h2>\n<p>Jetzt sind die groben Formalit\u00e4ten abgeschlossen und der ViewHelper ist fertig. Nun kann man endlich seinen Code von der Seele tippen und das Fluid-Template erweitern: Zuerst muss vor der eigentlichen Verwendung eine Referenz zu unserer neuen PHP-Datei rein:<\/p>\n<pre><code>{namespace t=SchwarzerDE\\Glossareditor\\ViewHelpers}<\/code><\/pre>\n<p>Warum macht man das? Na, das ist ganz einfach: Jetzt wei\u00df Typo3, wo er unseren ViewHelper finden kann. Nun kann man den Beispielcode ausgeben, um zu checken, ob alles funktioniert:<\/p>\n<pre><code>&lt;t:Split content=\"1,2,3,4\" glue=\",\" as=\"splittedStrings\"&gt;\r\n    &lt;f:debug&gt;{splittedStrings}&lt;\/f:debug&gt;\r\n&lt;\/t:Split&gt;<\/code><\/pre>\n<p>Der Inhalt <code>1,2,3,4<\/code> wird hier anhand des SplitStrings <code>,<\/code> in ein Array <code>splittedStrings<\/code> zerteilt und anschlie\u00dfend mit der Debug-Ausgabe ausgegeben. Damit kann man dann alles weitere anstellen: Ausgeben, verarbeiten, pr\u00fcfen, usw.<\/p>\n<h2 id=\"wie-in-butter-eigene-viewhelper-in-typo3-6.2\">Wie in Butter: Eigene ViewHelper in Typo3 6.2<\/h2>\n<p>Somit haben wir unseren ersten ViewHelper fertig und einsatzbereit. Wenn man erstmal die Struktur und Funktionsweise von eigenen Typo3 6.2 Fluid ViewHelpern verstanden hat, geht jede weitere \u00c4nderung &#8212; um die Analogie vom Anfang nochmal aufzugreifen &#8212; genau so leicht von der Hand wie bei einem ge\u00fcbten Schneider.<\/p>\n<p>Ich w\u00fcrde mich freuen, wenn auch ich eine Schere und eine Nadel in die Hand nehmen darf, um Ihnen bei Ihren Webprojekten ma\u00dfgeschneiderte ViewHelper entwickeln zu k\u00f6nnen und bin gespannt auf Ihre Ideen!<\/p>\n<p>By Wolfgang Sauber (Own work) [<a href=\"http:\/\/creativecommons.org\/licenses\/by-sa\/3.0\">CC BY-SA 3.0<\/a>], <a href=\"https:\/\/commons.wikimedia.org\/wiki\/File%3AMSM_-_Schneiderei_1.jpg\">via Wikimedia Commons\u00a0<\/a><!-- <\/ezTOC> --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In der Entwicklung von Typo3 Extbase-Extensions ist es wie im wahren Leben: Solange man das macht, was die breite Masse [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":568,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[51,287],"tags":[256,266,267,269,295],"features_image":"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-fluid-template-custom-viewhelpers.png","rk_cat":null,"rk_date":"29.03.2016","yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v18.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Typo3 6.2 Fluid und eigene ViewHelper - Schwarzer.de Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Typo3 6.2 Fluid und eigene ViewHelper - Schwarzer.de Blog\" \/>\n<meta property=\"og:description\" content=\"In der Entwicklung von Typo3 Extbase-Extensions ist es wie im wahren Leben: Solange man das macht, was die breite Masse [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/\" \/>\n<meta property=\"og:site_name\" content=\"Schwarzer.de Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-03-29T08:24:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-09-15T12:20:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-fluid-template-custom-viewhelpers.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1616\" \/>\n\t<meta property=\"og:image:height\" content=\"994\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschrieben von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hans-J\u00fcrgen Schwarzer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/schwarzer.de\/blog\/#website\",\"url\":\"https:\/\/schwarzer.de\/blog\/\",\"name\":\"Schwarzer.de Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/schwarzer.de\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de-DE\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/#primaryimage\",\"inLanguage\":\"de-DE\",\"url\":\"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-fluid-template-custom-viewhelpers.png\",\"contentUrl\":\"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-fluid-template-custom-viewhelpers.png\",\"width\":1616,\"height\":994,\"caption\":\"Infografik Fluid Templates eigene ViewHelper\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/#webpage\",\"url\":\"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/\",\"name\":\"Typo3 6.2 Fluid und eigene ViewHelper - Schwarzer.de Blog\",\"isPartOf\":{\"@id\":\"https:\/\/schwarzer.de\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/#primaryimage\"},\"datePublished\":\"2016-03-29T08:24:57+00:00\",\"dateModified\":\"2020-09-15T12:20:05+00:00\",\"author\":{\"@id\":\"https:\/\/schwarzer.de\/blog\/#\/schema\/person\/b4ffeb0c116fc217c80baefd49bc381a\"},\"breadcrumb\":{\"@id\":\"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/#breadcrumb\"},\"inLanguage\":\"de-DE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/schwarzer.de\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Typo3 6.2 Fluid und eigene ViewHelper\"}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/schwarzer.de\/blog\/#\/schema\/person\/b4ffeb0c116fc217c80baefd49bc381a\",\"name\":\"Hans-J\u00fcrgen Schwarzer\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/schwarzer.de\/blog\/#personlogo\",\"inLanguage\":\"de-DE\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/64690c1ea3ab46fac7afd4778bc78364?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/64690c1ea3ab46fac7afd4778bc78364?s=96&d=mm&r=g\",\"caption\":\"Hans-J\u00fcrgen Schwarzer\"},\"description\":\"Hans-J\u00fcrgen Schwarzer leitet die Digital-Agentur schwarzer.de software + internet gmbh. Als Unternehmer und Verleger in Personalunion wie auch als leidenschaftlicher Blogger geh\u00f6rt er zu den Hauptautoren verschiedener Online-Magazine. Innerhalb seiner breiten Palette an Themen liegen dem Mainzer Lokalpatrioten dabei vermeintlich \u201eschr\u00e4ge\u201c Ideen und technische Novit\u00e4ten besonders am Herzen - Nerdstuff, wie es heute hei\u00dft.\",\"url\":\"#\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Typo3 6.2 Fluid und eigene ViewHelper - Schwarzer.de Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/","og_locale":"de_DE","og_type":"article","og_title":"Typo3 6.2 Fluid und eigene ViewHelper - Schwarzer.de Blog","og_description":"In der Entwicklung von Typo3 Extbase-Extensions ist es wie im wahren Leben: Solange man das macht, was die breite Masse [&hellip;]","og_url":"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/","og_site_name":"Schwarzer.de Blog","article_published_time":"2016-03-29T08:24:57+00:00","article_modified_time":"2020-09-15T12:20:05+00:00","og_image":[{"width":1616,"height":994,"url":"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-fluid-template-custom-viewhelpers.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Geschrieben von":"Hans-J\u00fcrgen Schwarzer","Gesch\u00e4tzte Lesezeit":"6 Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"https:\/\/schwarzer.de\/blog\/#website","url":"https:\/\/schwarzer.de\/blog\/","name":"Schwarzer.de Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/schwarzer.de\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"de-DE"},{"@type":"ImageObject","@id":"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/#primaryimage","inLanguage":"de-DE","url":"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-fluid-template-custom-viewhelpers.png","contentUrl":"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-fluid-template-custom-viewhelpers.png","width":1616,"height":994,"caption":"Infografik Fluid Templates eigene ViewHelper"},{"@type":"WebPage","@id":"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/#webpage","url":"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/","name":"Typo3 6.2 Fluid und eigene ViewHelper - Schwarzer.de Blog","isPartOf":{"@id":"https:\/\/schwarzer.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/#primaryimage"},"datePublished":"2016-03-29T08:24:57+00:00","dateModified":"2020-09-15T12:20:05+00:00","author":{"@id":"https:\/\/schwarzer.de\/blog\/#\/schema\/person\/b4ffeb0c116fc217c80baefd49bc381a"},"breadcrumb":{"@id":"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/#breadcrumb"},"inLanguage":"de-DE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/schwarzer.de\/blog\/typo3-6-2-fluid-und-eigene-viewhelper\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/schwarzer.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Typo3 6.2 Fluid und eigene ViewHelper"}]},{"@type":"Person","@id":"https:\/\/schwarzer.de\/blog\/#\/schema\/person\/b4ffeb0c116fc217c80baefd49bc381a","name":"Hans-J\u00fcrgen Schwarzer","image":{"@type":"ImageObject","@id":"https:\/\/schwarzer.de\/blog\/#personlogo","inLanguage":"de-DE","url":"https:\/\/secure.gravatar.com\/avatar\/64690c1ea3ab46fac7afd4778bc78364?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/64690c1ea3ab46fac7afd4778bc78364?s=96&d=mm&r=g","caption":"Hans-J\u00fcrgen Schwarzer"},"description":"Hans-J\u00fcrgen Schwarzer leitet die Digital-Agentur schwarzer.de software + internet gmbh. Als Unternehmer und Verleger in Personalunion wie auch als leidenschaftlicher Blogger geh\u00f6rt er zu den Hauptautoren verschiedener Online-Magazine. Innerhalb seiner breiten Palette an Themen liegen dem Mainzer Lokalpatrioten dabei vermeintlich \u201eschr\u00e4ge\u201c Ideen und technische Novit\u00e4ten besonders am Herzen - Nerdstuff, wie es heute hei\u00dft.","url":"#"}]}},"_links":{"self":[{"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/posts\/565"}],"collection":[{"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/comments?post=565"}],"version-history":[{"count":14,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/posts\/565\/revisions"}],"predecessor-version":[{"id":1291,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/posts\/565\/revisions\/1291"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/media\/568"}],"wp:attachment":[{"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/media?parent=565"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/categories?post=565"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/tags?post=565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}