{"id":2955,"date":"2018-03-29T14:03:57","date_gmt":"2018-03-29T12:03:57","guid":{"rendered":"https:\/\/www.clickstorm.de\/blog\/?p=2955"},"modified":"2021-07-23T09:00:52","modified_gmt":"2021-07-23T07:00:52","slug":"extbase-objekte-ueberschreiben-erweitern","status":"publish","type":"post","link":"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/","title":{"rendered":"Extbase Objekte \u00fcberschreiben und erweitern"},"content":{"rendered":"<p>Als TYPO3-Entwickler bzw. Integrator steht man oftmals vor der Herausforderung, bestehende bzw. externe Extbase-Erweiterungen dem aktuellen Projekt anzupassen. Dabei ist es hin und wieder notwendig eigene Felder zu definieren, welche der Redakteur bef\u00fcllen kann und die entsprechend verarbeitet werden m\u00fcssen.<\/p>\n<p>Wenn man wei\u00df wo man hier ansetzen muss, ist das nicht weiter schwierig. Als kleines Ostergimmick zeigen wir euch was es zu beachten gilt. Dabei nehmen wir die <a href=\"https:\/\/extensions.typo3.org\/extension\/news\/\" target=\"_blank\" rel=\"noopener noreferrer\">news<\/a> Extension von Georg Ringer als Vorlage, da diese sehr weit verbreitet ist.<\/p>\n<h2>Erweitern von Extbase-Datens\u00e4tzen<\/h2>\n<p>Als erstes Beispiel soll der Redakteur die M\u00f6glichkeit erhalten, einem News-Tag eine Farbe zuzuweisen. Konkret bedeutet das f\u00fcr den TYPO3-Entwickler, dass der News-Tag-Datensatz um ein Inputfeld zu erweitern ist.<\/p>\n<h3>1. Erstellen einer Erweiterung<\/h3>\n<p>Um ein neues Feld hinzuzuf\u00fcgen, ben\u00f6tigen wir eine separate TYPO3-Erweiterung. In unserem Besipiel hei\u00dft diese <em>cs_news_extend<\/em>. Es reicht einen eigenen Ordner mit dem Extension-Key, sowie eine <a href=\"https:\/\/docs.typo3.org\/typo3cms\/CoreApiReference\/ExtensionArchitecture\/DeclarationFile\/Index.html\" target=\"_blank\" rel=\"noopener noreferrer\">ext_emconf.php<\/a> und eine <a href=\"https:\/\/www.clickstorm.de\/blog\/composer-installation-verwaltung-typo3\/\" target=\"_blank\" rel=\"noopener noreferrer\">composer.json<\/a> anzulegen. Ansonsten kann die Extension auch mit den <a href=\"https:\/\/github.com\/FriendsOfTYPO3\/extension_builder\" target=\"_blank\" rel=\"noopener noreferrer\">Extension-Builder<\/a> kreiert werden.<\/p>\n<p>Vergesst nicht die Extension im Extension-Manager zu installieren!<\/p>\n<h3>2. Das Feld zur Datenbank hinzuf\u00fcgen<\/h3>\n<p>Ist das Grundger\u00fcst f\u00fcr die Erweiterung fertig, legen wir zun\u00e4chst eine ext_tables.sql-Datei an.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\"># Extend table structure for table 'tx_news_domain_model_tag'\r\nCREATE TABLE tx_news_domain_model_tag (\r\n tx_csnewsextend_color varchar(255) DEFAULT '' NOT NULL\r\n);<\/pre>\n<p>Im Anschluss gilt es, einmal den Database-Analyzer im Install-Tool durchzuf\u00fchren, damit das neue Feld auch in der Datenbank angelegt wird.<\/p>\n<h3>3. Die Anzeige im Backend festlegen<\/h3>\n<p>Wie es bei TYPO3 \u00fcblich ist, bedienen wir uns zur Definition von Feldern im Backend, dem <a href=\"https:\/\/www.clickstorm.de\/blog\/typo3-tca-7-6\/\" target=\"_blank\" rel=\"noopener noreferrer\">Table Configuration Array<\/a> (kurz TCA). Wir legen in unserer Erweiterung die Datei\u00a0tx_news_domain_model_tag.php an, welche im Ordner\u00a0typo3conf\/ext\/cs_news_extend\/Configuration\/TCA\/Overrides\/ liegt. Der folgende PHP-Code sorgt nun daf\u00fcr, dass unser Feld entsprechend gerendert wird.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">&lt;?php\r\ndefined('TYPO3_MODE') or die();\r\n\r\n\/\/ Feld definieren\r\n$tempColumns = [\r\n 'tx_csnewsextend_color' =&gt; [\r\n 'label' =&gt; 'LLL:EXT:cs_news_extend\/Resources\/Private\/Language\/locallang_db.xlf:tx_news_domain_model_tag.tx_csnewsextend_color',\r\n 'exclude' =&gt; 1,\r\n 'config' =&gt; [\r\n 'type' =&gt; 'input',\r\n 'eval' =&gt; 'trim',\r\n ]\r\n ]\r\n];\r\n\r\n\/\/ Feld der allgemeinen Datensatzbeschreibung hinzuf\u00fcgen - noch keine Ausgabe im Backend!\r\n\\TYPO3\\CMS\\Core\\Utility\\ExtensionManagementUtility::addTCAcolumns('tx_news_domain_model_tag', $tempColumns);\r\n\r\n\/\/ Feld einer neuen Palette hinzuf\u00fcgen\r\n\\TYPO3\\CMS\\Core\\Utility\\ExtensionManagementUtility::addFieldsToPalette(\r\n 'tx_news_domain_model_tag',\r\n 'tx_csnewsextend_fields',\r\n 'tx_csnewsextend_color'\r\n);\r\n\r\n\/\/ Neue Palette dem Tag hinzuf\u00fcgen, nach dem Titel - Dadurch Anzeige im Backend\r\n\\TYPO3\\CMS\\Core\\Utility\\ExtensionManagementUtility::addToAllTCAtypes(\r\n 'tx_news_domain_model_tag',\r\n '--palette--;LLL:EXT:cs_news_extend\/Resources\/Private\/Language\/locallang_db.xlf:tx_news_domain_model_tag.palette.tx_csnewsextend_fields;tx_csnewsextend_fields',\r\n '',\r\n 'after:title'\r\n);<\/pre>\n<p>F\u00fcr die Labels des Feldes und der Palette ist eine Sprachdatei\u00a0locallang_db.xlf anzulegen und ensprechend zu bef\u00fcllen. Dazu eignet sich der LFE-Editor.<\/p>\n<p>Ist die Datei angelegt muss noch der System-Cache geleert werden, damit das TCA neu gerendert wird. Anschlie\u00dfend sehen wir das neue Feld im Backend.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2961\" src=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/typo3_extbase_news_extend.png\" alt=\"Neues Feld im Backend\" width=\"902\" height=\"522\" srcset=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/typo3_extbase_news_extend.png 902w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/typo3_extbase_news_extend-300x174.png 300w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/typo3_extbase_news_extend-768x444.png 768w\" sizes=\"auto, (max-width: 902px) 100vw, 902px\" \/><\/p>\n<p>Somit sind die Vorbereitungen f\u00fcr den Redakteur getroffen. Nun muss das Feld verarbeitet und im Frontend ausgegeben werden k\u00f6nnen.<\/p>\n<h3>4. Ein eigenes Model definieren<\/h3>\n<p>Um die neue Eigenschaft in Extbase nutzen zu k\u00f6nnen, legen wir ein eigenes Model an, welches von der existierenden Klasse die Eigenschaften erbt. Wir f\u00fcgen lediglich das neue Feld hinzu.<\/p>\n<p>Wir legen eine PHP-Datei namens Tag.php in\u00a0cs_news_extend\/Classes\/Domain\/Model\/ an. Der Inhalt sieht wie folgt aus.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">&lt;?php\r\n\r\nnamespace Clickstorm\\CsNewsExtend\\Domain\\Model;\r\n\r\n\r\nclass Tag extends \\GeorgRinger\\News\\Domain\\Model\\Tag\r\n{\r\n \/**\r\n * @var string\r\n *\/\r\n protected $txCsnewsextendColor;\r\n\r\n \/**\r\n * @return string\r\n *\/\r\n public function getTxCsnewsextendColor()\r\n {\r\n return $this-&gt;txCsnewsextendColor;\r\n }\r\n\r\n \/**\r\n * @param string $txCsnewsextendColor\r\n *\/\r\n public function setTxCsnewsextendColor($txCsnewsextendColor)\r\n {\r\n $this-&gt;txCsnewsextendColor = $txCsnewsextendColor;\r\n }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<h3>5. Das Model via TypoScript registrieren<\/h3>\n<p>Jetzt muss nur noch TYPO3 beigebracht werden, dass unser Tag-Model anstelle des News-Tag-Models genommen werden soll. Das registrieren wir im TypoScript.<\/p>\n<h4>Bis inkl. TYPO3 v9.5 LTS<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">config.tx_extbase {\r\nobjects {\r\nGeorgRinger\\News\\Domain\\Model\\Tag {\r\nclassName = Clickstorm\\CsNewsExtend\\Domain\\Model\\Tag\r\n}\r\nGeorgRinger\\News\\Domain\\Repository\\TagRepository {\r\nclassName = Clickstorm\\CsNewsExtend\\Domain\\Repository\\TagRepository\r\n}\r\n}\r\npersistence {\r\nclasses {\r\nClickstorm\\CsNewsExtend\\Domain\\Model\\Tag {\r\nmapping {\r\ntableName = tx_news_domain_model_tag\r\n}\r\n}\r\n}\r\n}\r\n}<\/pre>\n<h4><\/h4>\n<p>! Damit die Erweiterungen auch im Backend greifen, z.B. bei Tests oder Scheduler Tasks sollten die Anpassungen in einer <a href=\"https:\/\/docs.typo3.org\/m\/typo3\/reference-coreapi\/9.5\/en-us\/ExtensionArchitecture\/FilesAndLocations\/Index.html\" target=\"_blank\" rel=\"noopener\">ext_typoscript_setup.typoscript<\/a> liegen. Diese wiederrum befindet sich im Root-Verzeichnis einer Extension.<\/p>\n<h4>Ab TYPO3 v10.0<\/h4>\n<p>Mit TYPO3 v10.0 wurde ein <a href=\"https:\/\/docs.typo3.org\/c\/typo3\/cms-core\/master\/en-us\/Changelog\/10.0\/Breaking-87623-ReplaceConfigpersistenceclassesTyposcriptConfiguration.html\">Breaking Change<\/a> eingef\u00fchrt. Die Registrierung der Klassen erfolgt nun nicht mehr im TypoScript sondern via PHP. Dazu wird eine Datei EXT:cs_news_extend\/Configuration\/Extbase\/Persistence\/Classes.php angelegt. Der Code aus dem obigen Beispiel sieht hier wie folgt aus:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;?php\r\ndeclare(strict_types\u00a0=\u00a01);\r\n\r\nreturn\u00a0[\r\n \u00a0\u00a0\u00a0\\Clickstorm\\CsNewsExtend\\Domain\\Model\\Tag::class\u00a0=&gt;\u00a0[\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'tableName'\u00a0=&gt;\u00a0'tx_news_domain_model_tag',\r\n\u00a0\u00a0\u00a0\u00a0],\r\n];<\/pre>\n<p>Um die Object-Klassen zu \u00fcberschreiben, wird ein Eintrag in der ext_localconf.php notwendig. Dies wurde bereits in TYPO3 v9.5 <a href=\"https:\/\/docs.typo3.org\/c\/typo3\/cms-core\/master\/en-us\/Changelog\/9.5\/Deprecation-86270-ExtbaseXclassViaTypoScriptSettings.html\" target=\"_blank\" rel=\"noopener noreferrer\">eingef\u00fchrt<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">GeneralUtility::makeInstance(\\TYPO3\\CMS\\Extbase\\Object\\Container\\Container::class)\r\n \u00a0\u00a0\u00a0-&gt;registerImplementation(\\GeorgRinger\\News\\Domain\\Model\\Tag::class, \\Clickstorm\\CsNewsExtend\\Domain\\Model\\Tag::class);<\/pre>\n<p>Fertig! Nun k\u00f6nnen wir die neue Eigenschaft nutzen, beispielsweise im FLUID-Template mit <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{tag.tsCsnewsextendColor}<\/code>.\u00a0 Mit <code class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">&lt;f:debug&gt;{tag}&lt;\/f:debug&gt;<\/code> erhalten wir die folgende Ausgabe.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2965 size-full\" src=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/extended_extbase_model_typo3.png\" alt=\"Debug-Ausgabe des Extbase-Objekts im TYPO3\" width=\"879\" height=\"347\" srcset=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/extended_extbase_model_typo3.png 879w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/extended_extbase_model_typo3-300x118.png 300w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/extended_extbase_model_typo3-768x303.png 768w\" sizes=\"auto, (max-width: 879px) 100vw, 879px\" \/><\/p>\n<p>Anhand der Objektangabe ist gut zu erkennen, dass nun unser Model samt Eigenschaften genutzt wird und demnach auch eingesetzt werden kann.<\/p>\n<p>Damit die Models auch aus einem Repository heraus geladen werden, sollte das Repository ebenfalls \u00fcberschrieben werden. Zun\u00e4chst wird es angelegt und erbt von dem Original-Repository.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">&lt;?php\r\nnamespace Clickstorm\\CsMyExt\\Domain\\Repository;\r\n\r\n\/**\r\n* Class TagRepository\r\n* @package Clickstorm\\CsMyExt\\Domain\\Repository\r\n*\/\r\nclass TagRepository extends \\GeorgRinger\\News\\Domain\\Repository\\TagRepository\r\n{\r\n}<\/pre>\n<p>In der ext_localconf.php wird dieses Repository registriert.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\\GeorgRinger\\News\\Domain\\Repository\\TagRepository::class] = [\r\n'className' =&gt; \\Clickstorm\\CsMyExt\\Domain\\Repository\\TagRepository::class\r\n];<\/pre>\n<p>&nbsp;<\/p>\n<h2>Erweitern von Subklassen je nach Typ<\/h2>\n<p>Ein Sonderfall ist, wenn wir ein Model erweitern m\u00f6chten, dass selbst unterschiedliche Typen umfasst. Bei den News beispielsweise, gibt es neben den normalen News mit einer Detailansicht auch die Typen interne und externe Verlinkung. Je nachdem welcher Typ ausgew\u00e4hlt ist, k\u00f6nnen unterschiedliche Felder angezeigt werden.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2966\" src=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/typo3_news_typen.png\" alt=\"Auswahl der News-Typen im TYPO3 Backend\" width=\"873\" height=\"435\" srcset=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/typo3_news_typen.png 873w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/typo3_news_typen-300x149.png 300w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/typo3_news_typen-768x383.png 768w\" sizes=\"auto, (max-width: 873px) 100vw, 873px\" \/><\/p>\n<p>Um zu erkennen, ob ein Datensatz so eine Unterscheidung vornimmt, schauen wir im <a href=\"https:\/\/docs.typo3.org\/typo3cms\/TCAReference\/Ctrl\/Index.html#type\" target=\"_blank\" rel=\"noopener noreferrer\">TCA<\/a>, ob bei der jeweilige Tabelle\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">$GLOBALS['TCA']['tx_news_domain_model_news']['ctrl']['type']<\/code> gesetzt ist. Ist das der Fall, dann kann zu jedem Typ ein eigenes Extbase-Model bestimmt werden. Das geschieht wieder \u00fcber TypoScript. M\u00f6chten wir nun, dass unser Extbase-Model genutzt wird, legen wir auch f\u00fcr jeden Typ ein Model an, was wiederum vom jeweiligen Typ erbt. Wem das jetzt zu schnell ging, der schaut sich am besten hierf\u00fcr den Code bei GitHub an. Den Link findet ihr weiter unten in diesem Beitrag.<\/p>\n<p>Sind die Models angelegt, m\u00fcssen wir wieder die Registrierung im TypoScript angehen. Die Notation weicht hier von der obigen ab. Wir \u00fcberschreiben nicht mehr das Objekt an sich, sondern die Subklassen.<\/p>\n<h3>Bis TYPO3 v9.5<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">config.tx_extbase {\r\n persistence {\r\n classes {\r\n \r\n \/\/ \u00dcberschreiben der Klassen\r\n GeorgRinger\\News\\Domain\\Model\\News {\r\n subclasses {\r\n 0 = Clickstorm\\CsNewsExtend\\Domain\\Model\\NewsDefault\r\n 1 = Clickstorm\\CsNewsExtend\\Domain\\Model\\NewsInternal\r\n 2 = Clickstorm\\CsNewsExtend\\Domain\\Model\\NewsExternal\r\n }\r\n }\r\n\r\n \/\/ Mapping\r\n Clickstorm\\CsNewsExtend\\Domain\\Model\\NewsDefault {\r\n mapping {\r\n recordType = 0\r\n tableName = tx_news_domain_model_news\r\n }\r\n }\r\n\r\n Clickstorm\\CsNewsExtend\\Domain\\Model\\NewsInternal {\r\n mapping {\r\n recordType = 1\r\n tableName = tx_news_domain_model_news\r\n }\r\n }\r\n\r\n Clickstorm\\CsNewsExtend\\Domain\\Model\\NewsExternal {\r\n mapping {\r\n recordType = 2\r\n tableName = tx_news_domain_model_news\r\n }\r\n }\r\n }\r\n }\r\n}<\/pre>\n<h3>Ab TYPO3 v10.0<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">&lt;?php\r\ndeclare(strict_types = 1);\r\nreturn [\r\n\\GeorgRinger\\News\\Domain\\Model\\News::class =&gt; [\r\n'subclasses' =&gt; [\r\n0 =&gt; \\Clickstorm\\CsNewsExtend\\Domain\\Model\\NewsDefault::class\r\n1 =&gt; \\Clickstorm\\CsNewsExtend\\Domain\\Model\\NewsInternal::class\r\n2 =&gt; \\Clickstorm\\CsNewsExtend\\Domain\\Model\\NewsExternal::class\r\n]\r\n],\r\n\r\n\\Clickstorm\\CsNewsExtend\\Domain\\Model\\NewsDefault::class =&gt; [\r\n'tableName' =&gt; 'tx_news_domain_model_news',\r\n'recordType' =&gt; 0,\r\n]\r\n\r\n\/\/ ...\r\n];<\/pre>\n<p>Wichtig ist, dass dieses TypoScript nach dem TypoScript der News-Extension geladen wird. Abschlie\u00dfend kann der Inhalt der neuen Felder wieder im Fluid ausgegeben werden.<\/p>\n<h2>Ausblick<\/h2>\n<p>Die Beispielextension <em>cs_news_extend<\/em> haben wir auf <a href=\"https:\/\/github.com\/clickstorm\/cs_news_extend\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a> ver\u00f6ffentlicht. Dadurch lassen sich die Code-Beispiele sicherlich noch besser nachvollziehen.<\/p>\n<p>Wir hoffen, dass wir euch mit diesem Tutorial einfach verdeutlichen konnten, wie Extbase-Objekte \u00fcberschrieben werden. Falls Ihr Fragen oder Anmerkungen zum Artikel habt, dann hinterlasst gerne einen Kommentar. Wir freuen uns stets \u00fcber Feedback.<\/p>\n<p>Ansonsten w\u00fcnschen wir allen Lesern ein sch\u00f6nes Osterfest und ein paar erholsame Feiertage.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Erweitern von News, Events und mehr leicht gemacht<\/p>\n","protected":false},"author":7,"featured_media":2975,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[135],"tags":[45,46,57,98,77,9],"class_list":["post-2955","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cms","tag-entwicklung","tag-erweiterung","tag-extension","tag-php","tag-tutorial","tag-typo3"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Extbase Objekte \u00fcberschreiben und erweitern - clickstorm Blog<\/title>\n<meta name=\"description\" content=\"Bestehende Extbase-Erweiterungen anzupassen und zu erweitern, geh\u00f6ren f\u00fcr TYPO3-Entwickler bzw. Integratoren zum Alltag. Wir geben anhand vieler Codebeispiele inkl. einer Beispielerweiterung auf GitHub ein umfangreiches Tutorial, wie diese Aufgaben einfach zu bewerkstelligen sind.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Extbase Objekte \u00fcberschreiben und erweitern - clickstorm Blog\" \/>\n<meta property=\"og:description\" content=\"Bestehende Extbase-Erweiterungen anzupassen und zu erweitern, geh\u00f6ren f\u00fcr TYPO3-Entwickler bzw. Integratoren zum Alltag. Wir geben anhand vieler Codebeispiele inkl. einer Beispielerweiterung auf GitHub ein umfangreiches Tutorial, wie diese Aufgaben einfach zu bewerkstelligen sind.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/\" \/>\n<meta property=\"og:site_name\" content=\"clickstorm Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/de-de.facebook.com\/clickstorm\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-29T12:03:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-07-23T07:00:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/Fotolia_197271002_M.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1170\" \/>\n\t<meta property=\"og:image:height\" content=\"672\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marc\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@clickstorm_gmbh\" \/>\n<meta name=\"twitter:site\" content=\"@clickstorm_gmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marc\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/extbase-objekte-ueberschreiben-erweitern\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/extbase-objekte-ueberschreiben-erweitern\\\/\"},\"author\":{\"name\":\"Marc\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/person\\\/594fb824a2f049d33b2a1b4406bfc86b\"},\"headline\":\"Extbase Objekte \u00fcberschreiben und erweitern\",\"datePublished\":\"2018-03-29T12:03:57+00:00\",\"dateModified\":\"2021-07-23T07:00:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/extbase-objekte-ueberschreiben-erweitern\\\/\"},\"wordCount\":917,\"commentCount\":31,\"publisher\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/extbase-objekte-ueberschreiben-erweitern\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/Fotolia_197271002_M.jpg\",\"keywords\":[\"Entwicklung\",\"Erweiterung\",\"Extension\",\"PHP\",\"Tutorial\",\"TYPO3\"],\"articleSection\":[\"CMS\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/extbase-objekte-ueberschreiben-erweitern\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/extbase-objekte-ueberschreiben-erweitern\\\/\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/extbase-objekte-ueberschreiben-erweitern\\\/\",\"name\":\"Extbase Objekte \u00fcberschreiben und erweitern - clickstorm Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/extbase-objekte-ueberschreiben-erweitern\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/extbase-objekte-ueberschreiben-erweitern\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/Fotolia_197271002_M.jpg\",\"datePublished\":\"2018-03-29T12:03:57+00:00\",\"dateModified\":\"2021-07-23T07:00:52+00:00\",\"description\":\"Bestehende Extbase-Erweiterungen anzupassen und zu erweitern, geh\u00f6ren f\u00fcr TYPO3-Entwickler bzw. Integratoren zum Alltag. Wir geben anhand vieler Codebeispiele inkl. einer Beispielerweiterung auf GitHub ein umfangreiches Tutorial, wie diese Aufgaben einfach zu bewerkstelligen sind.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/extbase-objekte-ueberschreiben-erweitern\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/extbase-objekte-ueberschreiben-erweitern\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/extbase-objekte-ueberschreiben-erweitern\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/Fotolia_197271002_M.jpg\",\"contentUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/Fotolia_197271002_M.jpg\",\"width\":1170,\"height\":672,\"caption\":\"Sch\u00f6ne Dekoration zum Ostern Fest\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/extbase-objekte-ueberschreiben-erweitern\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extbase Objekte \u00fcberschreiben und erweitern\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/\",\"name\":\"clickstorm Blog\",\"description\":\"Neuigkeiten rund um Webentwicklung\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#organization\",\"name\":\"clickstorm GmbH\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/logo.svg\",\"caption\":\"clickstorm GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/de-de.facebook.com\\\/clickstorm\\\/\",\"https:\\\/\\\/x.com\\\/clickstorm_gmbh\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCEaU1eUbug6OiI4uU6vA-cA\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/person\\\/594fb824a2f049d33b2a1b4406bfc86b\",\"name\":\"Marc\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g\",\"caption\":\"Marc\"},\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/author\\\/marc\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Extbase Objekte \u00fcberschreiben und erweitern - clickstorm Blog","description":"Bestehende Extbase-Erweiterungen anzupassen und zu erweitern, geh\u00f6ren f\u00fcr TYPO3-Entwickler bzw. Integratoren zum Alltag. Wir geben anhand vieler Codebeispiele inkl. einer Beispielerweiterung auf GitHub ein umfangreiches Tutorial, wie diese Aufgaben einfach zu bewerkstelligen sind.","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:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/","og_locale":"de_DE","og_type":"article","og_title":"Extbase Objekte \u00fcberschreiben und erweitern - clickstorm Blog","og_description":"Bestehende Extbase-Erweiterungen anzupassen und zu erweitern, geh\u00f6ren f\u00fcr TYPO3-Entwickler bzw. Integratoren zum Alltag. Wir geben anhand vieler Codebeispiele inkl. einer Beispielerweiterung auf GitHub ein umfangreiches Tutorial, wie diese Aufgaben einfach zu bewerkstelligen sind.","og_url":"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/","og_site_name":"clickstorm Blog","article_publisher":"https:\/\/de-de.facebook.com\/clickstorm\/","article_published_time":"2018-03-29T12:03:57+00:00","article_modified_time":"2021-07-23T07:00:52+00:00","og_image":[{"width":1170,"height":672,"url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/Fotolia_197271002_M.jpg","type":"image\/jpeg"}],"author":"Marc","twitter_card":"summary_large_image","twitter_creator":"@clickstorm_gmbh","twitter_site":"@clickstorm_gmbh","twitter_misc":{"Verfasst von":"Marc","Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/#article","isPartOf":{"@id":"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/"},"author":{"name":"Marc","@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/person\/594fb824a2f049d33b2a1b4406bfc86b"},"headline":"Extbase Objekte \u00fcberschreiben und erweitern","datePublished":"2018-03-29T12:03:57+00:00","dateModified":"2021-07-23T07:00:52+00:00","mainEntityOfPage":{"@id":"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/"},"wordCount":917,"commentCount":31,"publisher":{"@id":"https:\/\/www.clickstorm.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/#primaryimage"},"thumbnailUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/Fotolia_197271002_M.jpg","keywords":["Entwicklung","Erweiterung","Extension","PHP","Tutorial","TYPO3"],"articleSection":["CMS"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/","url":"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/","name":"Extbase Objekte \u00fcberschreiben und erweitern - clickstorm Blog","isPartOf":{"@id":"https:\/\/www.clickstorm.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/#primaryimage"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/#primaryimage"},"thumbnailUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/Fotolia_197271002_M.jpg","datePublished":"2018-03-29T12:03:57+00:00","dateModified":"2021-07-23T07:00:52+00:00","description":"Bestehende Extbase-Erweiterungen anzupassen und zu erweitern, geh\u00f6ren f\u00fcr TYPO3-Entwickler bzw. Integratoren zum Alltag. Wir geben anhand vieler Codebeispiele inkl. einer Beispielerweiterung auf GitHub ein umfangreiches Tutorial, wie diese Aufgaben einfach zu bewerkstelligen sind.","breadcrumb":{"@id":"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/#primaryimage","url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/Fotolia_197271002_M.jpg","contentUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/03\/Fotolia_197271002_M.jpg","width":1170,"height":672,"caption":"Sch\u00f6ne Dekoration zum Ostern Fest"},{"@type":"BreadcrumbList","@id":"https:\/\/www.clickstorm.de\/blog\/extbase-objekte-ueberschreiben-erweitern\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.clickstorm.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Extbase Objekte \u00fcberschreiben und erweitern"}]},{"@type":"WebSite","@id":"https:\/\/www.clickstorm.de\/blog\/#website","url":"https:\/\/www.clickstorm.de\/blog\/","name":"clickstorm Blog","description":"Neuigkeiten rund um Webentwicklung","publisher":{"@id":"https:\/\/www.clickstorm.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.clickstorm.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.clickstorm.de\/blog\/#organization","name":"clickstorm GmbH","url":"https:\/\/www.clickstorm.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2017\/11\/logo.svg","contentUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2017\/11\/logo.svg","caption":"clickstorm GmbH"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/de-de.facebook.com\/clickstorm\/","https:\/\/x.com\/clickstorm_gmbh","https:\/\/www.youtube.com\/channel\/UCEaU1eUbug6OiI4uU6vA-cA"]},{"@type":"Person","@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/person\/594fb824a2f049d33b2a1b4406bfc86b","name":"Marc","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g","caption":"Marc"},"url":"https:\/\/www.clickstorm.de\/blog\/author\/marc\/"}]}},"_links":{"self":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/2955","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/comments?post=2955"}],"version-history":[{"count":12,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/2955\/revisions"}],"predecessor-version":[{"id":5702,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/2955\/revisions\/5702"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/media\/2975"}],"wp:attachment":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/media?parent=2955"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/categories?post=2955"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/tags?post=2955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}