jdlx hatte mal für REX 4 ein be_sytel Plugin gebaut welches eine gesonderte Formatierung von Kategorien ermöglicht.
Hier ist der Code der mit REX 4 funktioniert:
Code: Alles auswählen
if(rex_request('page','string')=='structure'){
rex_register_extension('OUTPUT_FILTER',
function($params) use($REX){
if(!isset($params['subject']) || $params['subject']==''){ // Das fehlt mir!
return;
}
$dom = new DOMDocument();
$dom->loadHTML($params['subject']);
$xpath = new DOMXpath($dom);
$TRs = $xpath->query(".//*[@id='rex-output']/table/tbody/tr");
if (!is_null($TRs)) {
foreach ($TRs as $TR) {
$TDs = $TR->childNodes;
foreach ($TDs as $TD) {
if(substr($TD->nodeValue,0,10) == 'separator:'){
#$TR->setAttribute('class','separator '.strtolower(preg_replace('/[^a-z-]/i','',$TD->nodeValue)));
$TR->setAttribute('class','separator');
foreach($TD->getElementsByTagName('a') as $A){
$A->nodeValue = str_replace('separator:','',$A->nodeValue);
}
continue;
}else{
continue;
}
}
}
}
$html = $dom->saveHtml();
return $html;
}
);
}
Wenn ich in einem Addon in der boot.php z.B. das schreibe
Code: Alles auswählen
if (rex::isBackend()) {
if(rex_request('page','string')=='structure'){
rex_extension::register('OUTPUT_FILTER',
function(rex_extension_point $ep){
$dom = new DOMDocument();
@$dom->loadHTML($ep->getSubject()); // Warnings unterdrückt wegen Element: nav
$dom->validate();
$xpath = new DOMXpath($dom);
$TRs = $xpath->query(".//table/tbody/tr");
if (!is_null($TRs)) {
foreach ($TRs as $TR) {
$TDs = $TR->childNodes;
foreach ($TDs as $TD) {
if(substr($TD->nodeValue,0,10) == 'separator:'){
$name = str_replace('separator:','',$TD->nodeValue);
$TR->setAttribute('class','separator');
$TD->nodeValue = $name;
continue;
}else{
continue;
}
}
}
}
$TRs = $xpath->query('.//tr[@class="separator"]');
if (!is_null($TRs)) {
foreach ($TRs as $TR) {
$TDs = $TR->childNodes;
$counter = 0;
$replace = array(1,3,7);
foreach ($TDs as $TD) {
$counter++;
if(in_array($counter,$replace)) {
$TD->nodeValue= ' ';
}
}
}
}
$html = $dom->saveHtml();
$ep->setSubject($html);
}
);
}
// rex_view::addCssFile($this->getAssetsUrl('css/be5plus.css'));
}
Leider fällt das Dingen auf die Nase sobald eine Kategorie angeklickt oder geändert wird.
Ich vermute entweder, dass ich hier ein jpax oder ein DOM Problem habe.
Es wäre toll, wenn Ihr einen Tipp hättet.
Was mir in "meinem" Code fehlt ist das hier:
(Das habe ich nicht umsetzten können)
Code: Alles auswählen
if(!isset($params['subject']) || $params['subject']==''){
return;
}
Hier noch ein Bild wie es später aussehen soll:
[ externes Bild ]
Viele Grüße
Oliver