Die Extbase Extension “news” um ein Feld erweitern

Wie erweitert man eine Extbase Extension um ein neues Datenbank-Feld? Und zwar ohne die Extension direkt anzufassen, ohne Quick’n'dirty Hacks und ohne Workarounds? Welche Schritte muss man befolgen, um ein neues Datenbankfeld am Datensatz anzuzeigen und es schlußendlich im Fluid Template auch benutzen zu können?

Das nachfolgende Beispiel setzt eine Extension „torr_news_ext“ voraus (ggf leer mit dem Extension Builder angelegt), in die das Resources-Verzeichnis der „news“-Extension kopiert wurde (die Templates) und in der die genannten Dateien aufgebaut werden.

ext_tables.sql


CREATE TABLE tx_news_domain_model_news (
	new_field varchar(250) DEFAULT '' NOT NULL
);

ext_tables.php


<?php
    $tempColumns = Array (
            "new_field" => Array (
                    "exclude" => 1,
                    "label" => "LLL:EXT:torr_news_ext/Resources/Private/Language/locallang_db.xml:tx_torrnewsext_domain_model_news.new_field",
                    "config" => Array (
                            "type" => "input",
                            "size" => "30",
                            "eval" => "trim",
                    )
            ),
    );

    t3lib_div::loadTCA("tx_news_domain_model_news");
    t3lib_extMgm::addTCAcolumns("tx_news_domain_model_news",$tempColumns,1);
    t3lib_extMgm::addToAllTCAtypes("tx_news_domain_model_news","new_field;;;;1-1-1");
?>

Resources/Private/Language/locallang_db.xml

Hinweis: Liegen parallel xlf-Dateien (neues Format) in dem Verzeichnis werden deren Inhalte bevorzugt. Ggf hat die der Extension Builder angelegt. Damit das Beispiel funktioniert: die xlf-Dateien entfernen.


<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3locallang>
	<data type="array">
		<languageKey index="default" type="array">
			<label index="tx_torrnewsext_domain_model_news.new_field">The New Field</label>
		</languageKey>
	</data>
</T3locallang>

Configuration/TypoScript/constants.txt


plugin.tx_news {
	view {
		templateRootPath = EXT:torr_news_ext/Resources/Private/Templates/
		partialRootPath = EXT:torr_news_ext/Resources/Private/Partials/
		layoutRootPath = EXT:torr_news_ext/Resources/Private/Layout/
	}
}

Configuration/TypoScript/setup.txt


plugin.tx_news {
	persistence {
		classes {
			Tx_News_Domain_Model_News {
				subclasses {
					# hier wichtig: index 0 überschreiben für die 
					# normale News-Ansicht
					# 0 == Typ-Auswahl an News-Datensatz
					0 = Tx_TorrNewsExt_Domain_Model_NewsDefault
				}
			}
			Tx_TorrNewsExt_Domain_Model_NewsDefault {
				mapping {
					recordType = 0
					tableName = tx_news_domain_model_news
				}
			}
		}
	}
}

Classes/Domain/Model/NewsDefault.php


<?php
class Tx_TorrNewsExt_Domain_Model_NewsDefault 
    extends Tx_News_Domain_Model_NewsDefault
{
	/**
	 * the new field
	 * @var string
	 */
	protected $newField;
	
	/**
	 * Returns an array of orderings created from a given demand object.
	 *
	 * @param string $newField
	 * @return void
	 */
	public function setNewField($newField) {
		$this->newField = $newField;
	}
	/**
	 * Get new field
	 *
	 * @return string
	 */
	public function getNewField() {
		return $this->newField;
	}
}
?>

ext_autoload.php


<?php
$extensionPath = t3lib_extMgm::extPath('torr_news_ext');
return array(
	'tx_torrnewsext_domain_model_newsdefault' => $extensionPath . 'Classes/Domain/Model/NewsDefault.php',
);

Resources/Private/Templates/News/Detail.html


<f:section name="content">
 ...
 <div class="new-field">
		<h3>{newsItem.newField}</h3>
 </div>
 ...
</f:section>
Dieser Beitrag wurde unter PHP, TYPO3 veröffentlicht. Setze ein Lesezeichen auf den Permalink.

2 Antworten auf Die Extbase Extension “news” um ein Feld erweitern

  1. Manuel R. sagt:

    Hallo Rüdiger,
    danke für den Code! Hat mir viel gebracht!
    Eine Sache; Ich glaube an folgender Stelle fehlt ein Semikolon:
    public function setNewField($newField) {
    $this->newField = $newField ;;;;
    }

    Und noch eine Frage: Wie würdest du denn weitere Felder im Backend erstellen? Damit habe ich gerade einige Schwierigkeiten…

    Liebe Grüße,
    Manuel

  2. ruediger sagt:

    Hi Manuel,

    vielen Dank, habe ich gleich korrigiert.

    So wie das im Beispiel in der ext_tables.php und ext_tables.sql gemacht wurde, geht das grundsätzlich auch bei allen anderen Tabellen.

    Hier noch ein paar Links zum Thema eigene Felder an bestehende Datensätze:
    http://typo3-blog.net/tutorials/news/addtoalltcatypes.html
    http://www.opensource-podcast.de/2010/04/23/typo3-extensions-tca-erweitern-oder-uberschreiben/

    Grüße
    Rüdiger

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>