Typo3 page / pages_language_overlay um eigenes Feld erweitern, mit slide per TypoScript vererben

Freitag, 11. März 2016

Aufgabe: Man möchte bei Typo3 in die Seiteneigenschaften einer Seite ein Feld ergänzen, z.B. eine Telefon-Nummer. Dieses Feld soll auf die Unterseiten per slide vererbt werden, wenn in einem Auswahlfeld der Wert “zeigen” gewählt wurde. Wählt man in dem Auswahlfeld nichts aus, wird die Einstellung der darüberliegenden Seite verwendet. Dadurch kann für einen Ast im Seitenbaum die Einstellung der darüberliegenden Seite komplett überschrieben werden.

Das Auswahlfeld soll für alle Sprachen gelten (ist also nur in der Tabelle “pages” vorhanden), das Textfeld für die Telefon-Nummer soll aber für jede Sprache getrennt voneinander angegeben werden können.

Das alles hier spiel sich in einer eigenen Extension ab.

Für Suchmaschinen: pageoverlayfields typo3, Seiteneigenschaften um eigenes Feld erweitern. Mehrsprachigkeit und sys_language_overlay bei eigenem Feld der Tabelle pages. levelfield mit slide bei eigenem Feld und Mehrsprachigkeit. pageOverlayFields und addRootLineFields um Wert auf Unterseiten zu vererben und mit slide per TypoScript auslesen. Tabelle pages_language_overlay um eigenes Feld erweitern. Mehrsprachigkeit bei eigenem Feld der Tabelle pages wird nicht angezeigt. Problem mit slide mit localization von pages_language_overlay. Tabellen pages, pages_language_overlay erweitern und das neue Feld slide-bar machen.

Wonach ich alles gesucht habe: “page field language_overlay typoscript typo3″, “languageOverlay typo3 tca”, “page typo3 field overlay language”, “typo3 slide typo3script text”, “addToAllTCAtypes(‘pages_language_overlay’”, “addToAllTCAtypes pages_language_overlay”, “page field language_overlay typoscript typo3″


Am Ende soll das ganze so aussehen:

Seiteneigenschaften in der Standard-Sprache
Hier sind zwei Felder: phone_btn zur Auswahl, ob das Feld angezeigt werden soll und phone_text mit der eigentlichen Texteingabe. Beide Felder sind neue Felder der Datenbank-Tabelle pages.

Seiteneigenschaften in den fremden (lokalisierten) Sprachversionen
Hier gibt es nur das Feld phone_text. Dieses Feld wurde der Tabelle pages_language_overlay hinzugefügt.


ext_tables.sql

CREATE TABLE pages (
   phone_btn varchar(15) DEFAULT '' NOT NULL,
   phone_text varchar(255) DEFAULT '' NOT NULL
);
 
CREATE TABLE pages_language_overlay (
   phone_text varchar(255) DEFAULT '' NOT NULL
);

ext_tables.php

// Feld, das nur in der Standardsprache existiert
$addPagesColumn = array (
   'phone_btn' => array(
      'exclude' => 0,
      'label' => 'Telefon-Nr zeigen',
      'config' => array(
         'type' => 'select',
         'default' => '',
         'items' => array(
            array('', ''),
            array('nicht zeigen', '-1'),
            array('zeigen', '1'),
         )
      ),
   ),
);
 
// Feld, das in allen Sprachen existiert
$addLangPagesColumn = array(
   'phone_text' => array(
      'exclude' => 0,
      'label' => 'Telefon-Nr',
      'config' => array(
         'type' => 'input',
         'default' => '',
      ),
   ),
);
 
// Feld im TCA der Tabelle 'pages' hinzufügen
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('pages',$addPagesColumn,1);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('pages',$addLangPagesColumn,1);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('pages_language_overlay',$addLangPagesColumn,1);
 
// Ort der Feldes in den Backendeinstellungen definieren
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette('pages', 'layout', '--linebreak--,phone_btn,phone_text', '');
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('pages_language_overlay', '--linebreak--,phone_text');

ext_localconf.php

$rootlinefields = &$GLOBALS["TYPO3_CONF_VARS"]["FE"]["addRootLineFields"];
if($rootlinefields != '') $rootlinefields .= ' , ';
$rootlinefields .= 'phone_btn,phone_text';
 
$GLOBALS['TYPO3_CONF_VARS']['FE']['pageOverlayFields'] .= ',phone_text';

TypoScript Setup Beispiel

lib.phone_text = TEXT
lib.phone_text {
    override.data = levelfield:-1, phone_text, slide
    override.if.isPositive.cObject = TEXT
    override.if.isPositive.cObject {
       data = levelfield:-1, phone_btn, slide
    }
}