Hallo zusammen,
ich komme leider kein Stück weiter. Mal läuft es durch, mal läd es unendlich, mal gibt es einen Fehler der Art:
Fatal error: Maximum execution time of 120 seconds exceeded in ...
Ich verstehs nicht, vielleicht seht ihr irgendetwas.
Ist ein Teil einer Sitemap, die "hirachisch" angeordnet werden kann. Es gibt also Elternelemente. Diese Funktionen stellen diese Sitemap in einer Liste dar, so dass entsprechend Kindelemente eingerückt werden usw. Diese Liste ermöglicht es dann die entsprechenen Elternelemente auszuwählen.
PHP-Code:
// Aufruf der Funktion
$lists = array();
$lists['parents'] = SitemapParentList( $row );
Wird dann an den HMTL Output übergeben.
$row enthält als Objekt alle Daten der entsprechenden Tabelle aus der Datenbank.
PHP-Code:
function SitemapParentList( $row ) {
global $database;
$id = '';
if ( $row->id ) {
$id = "\n WHERE s.id != $row->id";
}
// get a list of the menu items
// excluding the current menu item and its child elements
$query = "SELECT s.id, s.parent, s.name, s.menu_id, m.menutype"
. "\n FROM jos_sitemap_xtd AS s"
. "\n INNER JOIN jos_menu AS m"
. $id
. "\n ORDER BY s.parent, s.ordering"
;
$database->setQuery( $query );
$sitems = $database->loadObjectList();
// establish the hierarchy of the menu
$children = array();
if ( $sitems ) {
// first pass - collect children
foreach ( $sitems as $v ) {
$pt = $v->parent;
$list = @$children[$pt] ? $children[$pt] : array();
array_push( $list, $v );
$children[$pt] = $list;
}
}
// second pass - get an indent list of the items
$list = makeSitemapTree( 0, '', array(), $children, 20, 0);
// assemble menu items to the array
$sitems = array();
// create an select list option item
$sitems[] = mosHTML::makeOption( '0', 'Top' );
foreach ( $list as $item ) {
$sitems[] = mosHTML::makeOption( $item->id, ''. $item->treename );
}
$output = mosHTML::selectList( $sitems, 'parent', 'class="inputbox" size="'.count($sitems).'"', 'value', 'text', $row->parent );
return $output;
}
function makeSitemapTree( $id, $indent, $list, &$children, $maxlevel=9999, $level=0) {
if (@$children[$id] && $level <= $maxlevel) {
foreach ($children[$id] as $v) {
$id = $v->id;
$pre = '-';
$spacer = '';
empty($v->menutype) ? $menutype='no menu item' : $menutype = "$v->menutype";
if ( $v->parent == 0 ) {
$txt = $v->name .' ('. $menutype .' | Itemid: '. $v->menu_id .')';
} else {
$txt = $pre . $v->name.' ('. $menutype .' | Itemid: '. $v->menu_id .')';
}
$pt = $v->parent;
$list[$id] = $v;
$list[$id]->treename = "$indent.$txt"; //Hier gibt es angeblich den 'Maximum execution time' Fehler
$list[$id]->children = count( @$children[$id] );
$list = makeSitemapTree( $id, $indent . $spacer, $list, $children, $maxlevel, $level+1 );
}
}
return $list;
}
Gruß
Tine