WBCE CMS – Way Better Content Editing.
Du bist nicht angemeldet.
Ausgehend von diesem Post (und diese Problemstellung trat schon des öfteren auf), habe ich eine kleine Funktion geschrieben, mit der man das Problem Lösen kann. Zumindest ist es ein Ansatz (ich habe nicht alle möglichen Szenarien überprüft).
Das Problem ist, dass show_menu2 nicht den im menu_link Modul hinterlegten Link ins Menü schreibt, sondern den, der sich in der DB-Tabelle `{TP}pages` befindet.
Die Funktion schafft abhilfe, indem es zuerst alle Einträge aus dem Modul menu_link ausliest und wenn wenn welche vorhanden sind, ein Array erstellt, welches dann für eine Ersetzung der Links verwendet wird.
Die Implementierung ist einfach:
1) diese Funktion irgendwo unterbringen, sodass sie im Template zur Verfügung steht:
function pageTreeCorrectedMenuLinks($sMenu){
global $database;
$aMenuLinks = array();
$sSql = "SELECT `page_id`, `target_page_id`, `extern`, `anchor` FROM `{TP}mod_menu_link`";
$rMenuLinks = $database->query($sSql);
$i = 0;
if($rMenuLinks->numRows() > 0) {
while($row = $rMenuLinks->fetchRow(MYSQL_ASSOC)) {
$aMenuLinks[$i] = $row;
if(!empty($row['target_page_id'])){
$aMenuLinks[$i]['replace_url'] = get_page_link($row['target_page_id']).''.PAGE_EXTENSION;
if(!empty($row['anchor'])){
$aMenuLinks[$i]['replace_url'] .= '#'.$row['anchor'];
}
$aMenuLinks[$i]['replace_url'] = WB_URL.PAGES_DIRECTORY.$aMenuLinks[$i]['replace_url'];
}
if(!empty($row['extern'])){
$aMenuLinks[$i]['replace_url'] = $row['extern'];
}
if(isset($aMenuLinks[$i]['replace_url'])){
$aMenuLinks[$i]['pagetree_url'] = $database->get_one("SELECT `link` FROM `{TP}pages` WHERE `page_id` = ".$row['page_id']);
$aMenuLinks[$i]['pagetree_url'] = WB_URL.PAGES_DIRECTORY.$aMenuLinks[$i]['pagetree_url'].PAGE_EXTENSION;
}
$i++;
}
}
if(!empty($aMenuLinks)){
$aReplacements = array();
foreach($aMenuLinks as $k => $link){
$aReplacements[$link['pagetree_url']] = $link['replace_url'];
}
if(!empty($aReplacements)){
$sMenu = strtr($sMenu, $aReplacements);
}
}
return $sMenu;
}2) die Menü Ausgabe von show_menu2 nicht direkt ausgeben, sondern zuerst in eine Variable schreiben.
Z.B. :$myMainMenu
3) die Funktion aufrufen und die Variable als Parameter verwenden:
<?php echo pageTreeCorrectedMenuLinks($myMainMenu); ?>Vielleicht kann es der ein oder andere gebrauchen.
Es ist möglich, dass weiteres Debuggen an der Funktion nötig ist.
Wer testen mag...
Viel Spaß,
Christian
Beitrag geändert von stefanek (15.08.2018 14:01:06)
“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale
Offline
florian
Ich habe eine Alternative, die gleich mit in den Core (d.h. eigentlich ins show_menu2 Snippet) könnte und wo man dann weniger Fummel in den Templates hätte.
Wenn Interesse besteht.
Gruß,
Christian
“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale
Offline