Ich bin gestern nochmal darauf zurück gekommen. Das scheint nicht so einfach zu sein den Root (Startpunktseite) eines Inhaltselementes herauszufinden. Es gibt eine Erweiterung parentslist https://contao.org/erweiterungsliste...rentslist.html, welche dir neue Felder in die tl_page macht. Eines davon ist rootId. Damit könntest du dann von jeder Seite sofort die Startpunkt ID abgreifen. Je nachdem, was changelanguage da macht, könntest du aber evtl. darauf verzichten. Falls changelanguage die Sprache jeder Seite in ein Feld schreiben sollte.
Hier mal ein Ansatz mit parentslist
PHP-Code:
$isRTL = false;
// If URL query includes: table=tl_content, act=edit, id=integer
if(TL_MODE == 'BE' && 'BE view' == 'content editing view')
{
$ceID = 163; // dummy id for testing
// get root page id of a particular content element
// install parentslist first
$rootPageId = \Database::getInstance()->prepare(
"SELECT
p.rootId
FROM
tl_content as c,
tl_article as a,
tl_page as p
WHERE
c.id = ".$ceID." AND
c.pid = a.id AND
a.pid = p.id"
)->executeUncached()->rootId;
$rootPageLanguage = \PageModel::findOneBy('id', $rootPageId)->language;
// set RTL for some languages
$isRTL = in_array($rootPageLanguage, array('ar', 'pk')) ? true : false;
}
// use tinyCustom or tinyCustomRTL for all textareas that use tinyMCE
// Geändert: geht nicht mit Variable $tinyConfig
#$tinyConfig = $isRTL ? 'tinyCustomRTL' : 'tinyCustom';
array_walk_recursive($GLOBALS['TL_DCA'], function(&$v, $k){
if($k === 'rte' && $v === 'tinyMCE')
{
#$v = $tinyConfig;
$v = $isRTL ? 'tinyCustomRTL' : 'tinyCustom';
}
});
Der MySQL-query ist kein Join, funktioniert aber trotzdem, ich weiß nicht, ob ein Join da noch performanter wäre. Er greift das Feld rootId der Seite ab, auf welcher das CE liegt. Durch das Feld rootId (parentslist) spart man sich hier den Weg von dieser Seite aus dann nochmal den Startpunkt ermitteln zu müssen, was aufwendig wäre, weil eine Seite ja nur auf level 1 ein direktes Child vom Root ist.
Die if-Anweisung musst du noch bearbeiten, die Anweisung soll im BE ja nur ausgeführt werden, wenn du erfolgreich ermittelt hast, dass du in der Bearbeiten-Maske eines Inhaltselementes bist. Damit solltest du dann auch die ID des CEs haben. Ich hatte zum Testen einfach mal eine Dummy-ID eingetragen.
Die Sprachen ar und pk sind wahrscheinlich falsch, ich habe einfach irgendwas genommen.
Lesezeichen