[PHP] Automatisch opbouwen link gaat niet goed

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Bij voorbaat excuses voor het breed schalen van het forum.

Onderstaande functie doorloopt de $nodes array en bouwt een navigatie menu. Dit werkt opzich goed.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
$nodes[1]   = Array('pid'=> 0,  'title'=> 'Home',           'alias'=> '',            'status'=> 1, 'innav'=> 1);
$nodes[93]  = Array('pid'=> 1,  'title'=> 'Over Ons',       'alias'=> 'over',        'status'=> 1, 'innav'=> 1);
$nodes[101] = Array('pid'=> 1,  'title'=> 'Nieuws',         'alias'=> 'nieuws',      'status'=> 1, 'innav'=> 1);
$nodes[95]  = Array('pid'=> 1,  'title'=> 'Product',        'alias'=> 'product',     'status'=> 1, 'innav'=> 1);
$nodes[100] = Array('pid'=> 1,  'title'=> 'Handleiding',    'alias'=> 'handleiding', 'status'=> 1, 'innav'=> 0);
$nodes[96]  = Array('pid'=> 1,  'title'=> 'Contact',        'alias'=> 'contact',     'status'=> 1, 'innav'=> 1);
$nodes[104] = Array('pid'=> 1,  'title'=> 'Gastenboek',     'alias'=> 'gastenboek',  'status'=> 0, 'innav'=> 1);
$nodes[103] = Array('pid'=> 1,  'title'=> 'Voorwaarden',    'alias'=> 'voorwaarden', 'status'=> 0, 'innav'=> 1);
$nodes[97]  = Array('pid'=> 95, 'title'=> 'Overzicht',      'alias'=> 'overzicht',   'status'=> 1, 'innav'=> 1);
$nodes[99]  = Array('pid'=> 95, 'title'=> 'Tekstverwerker', 'alias'=> 'editor',      'status'=> 1, 'innav'=> 1);
$nodes[98]  = Array('pid'=> 95, 'title'=> 'Sjablonen',      'alias'=> 'templates',   'status'=> 1, 'innav'=> 1);
$nodes[110] = Array('pid'=> 98, 'title'=> 'Testpagina',     'alias'=> 'test',        'status'=> 1, 'innav'=> 1);

function buildMenu($menuItems, $activeItem, $curItem=1, $depth=0, $href=NULL) 
{
  static $output;

  $unfoldItems = array($activeItem); 
  while ($unfoldItems[count($unfoldItems)-1] != 0)
    $unfoldItems[] = $menuItems[$unfoldItems[count($unfoldItems)-1]]['pid'];

  $first = true; 
  foreach ($menuItems as $itemKey=>$item) 
  {
    if ($item['pid'] == $curItem)
    { 
      if ($first) 
      {
        $output.= '<ul>';
        $first = false; 
      } 
      
      if ($item['status'] == 1 and $item['innav'] == 1)
      {
        if ($activeItem == $itemKey)
        {
          $output.= '<li class="on"><a href="'.$href.'">'.$item['title'].'</a>';
        }
        else
        {
          $output.= '<li class="off"><a href="'.$href.'">'.$item['title'].'</a>';
        }

      }

        if (in_array($itemKey, $unfoldItems))
        {
          $href.= $item['alias'].'/';
          buildMenu($menuItems, $activeItem, $itemKey, $depth + 1, $href);
        }

      $output.= '</li>';
    } 
  } 
     
  if (!$first)
    $output.= '</ul>';

  return '<div id="navcontainer">'.$output.'</div>';
}

buildMenu($menuItems, 110);


Hierboven roep ik de functie aan met als actieve node, de node met id 110. Het menuutje ziet er dan als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<div id="navcontainer">
<ul>
  <li class="off"><a href="over">Over Ons</a></li>
  <li class="off"><a href="nieuws">Nieuws</a></li>
  <li class="off"><a href="product">Product</a>
    <ul>
    <li class="off"><a href="product/overzicht">Overzicht</a></li>
    <li class="off"><a href="product/editor">Tekstverwerker</a></li>
    <li class="off"><a href="product/templates">Sjablonen</a>
      <ul>
      <li class="on"><a href="product/templates/test">Testpagina</a></li>
      </ul>
    </li>
    </ul>
  </li>
  </li>
  <li class="off"><a href="product/contact">Contact</a></li>
</li>
</li>
</ul>
</div>

Ik zit met twee problemen:
• het openen en sluiten van <li> gaat niet altijd goed
• regel 17 moet "contact" in plaats van "product/contact" zijn

Wie kan mij op weg helpen met deze problemen? Het tweede probleem heb ik geprobeerd op te lossen door "$href.= $item['alias'].'/'; " op verschillende plaatsen binnen de functie te zetten, maar dit mag niet baten. Bij het openen en sluiten van <li> zie ik het probleem helemaal niet: volgens mij zou het zo moeten werken... :?

[ Voor 54% gewijzigd door Reveller op 23-11-2004 22:05 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • nnomiS
  • Registratie: Oktober 2000
  • Laatst online: 19-09 22:37
Je kan in iedergeval die </li> sluit tags meteen achter de aanmaak van je menu punt doen lijkt mij. Dan zou dat volgens mij goed moeten gaan.

PHP:
1
2
3
        { 
          $output.= '<li class="on"><a href="'.$href.$item['alias'].'">'.$item['title'].'</a></li>'; 
        }


En volgens mij gaat het fout met het aanmaken van de href omdat je niet de alias van item gebruikt.

Je geeft bij de recursieve aanroep als parameter $href mee. Je wilt dit gedeelte als eerste gedeelte van de link gebruiken. Daar achter wil je dan het item specifieke gedeelte (oftewel alias van item). :)

ps dat van die li sluiten gaat fout volgens mij omdat je eerst buildmenu recursief aanroept en dan pas die /li achter output plakt je kan hem dus ook boven de recursieve aanroep zetten

[ Voor 48% gewijzigd door nnomiS op 24-11-2004 01:57 ]


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
PHP:
1
2
3
4
      if ($item['status'] && $item['innav'])
      {
        $output .= '</li>';
       }

Zo krijg je niet meer overbodige </li>'s. Als je op opentag in een if zet, moet je de sluittag in dezelfde if zetten natuurlijk.

Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
nnomiS schreef op woensdag 24 november 2004 @ 00:32:
Je geeft bij de recursieve aanroep als parameter $href mee. Je wilt dit gedeelte als eerste gedeelte van de link gebruiken. Daar achter wil je dan het item specifieke gedeelte (oftewel alias van item). :)
Dat snijdt zeker hout, maar jouw oplossing had ik ook al geprobeerd en het werkt niet. Het probleem zit hem hier:

• zowel "Over Ons", "Nieuws", "Product" en "Contact" zijn direct kind van root
• de link voor deze items zou dus moeten zijn: <a href="over"> etc...
• het gaat goed voor de eerste drie, maar bij "Contact" wordt de link ineens <a href="product/contact">

De vraag is: waar komt dat "product" vandaan in die laatste link? Contact is immers geen kind van "Product", dus ergens gaat er iets verkeerd met de recursie. En ik kan niet vinden waar... :'(

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Vanaf regel 33 heb ik nu eea aangepast. Met dank aan Skaah gaat het afsluiten van de <li>'s nu goed, maar het probleem met de link bij "Contact" blijft...heeft iemand daar nog ideeen over?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[...]

if ($item['status'] == 1 and $item['innav'] == 1)
{
  if ($activeItem == $itemKey)
  {
    $output.= '<li class="on"><a href="'.$href.'">'.$item['title'].'</a>';
  }
  else
  {
    $output.= '<li class="off"><a href="'.$href.'">'.$item['title'].'</a>';
  }

  if (in_array($itemKey, $unfoldItems))
  {
    $href.= $item['alias'].'/';
    buildMenu($menuItems, $activeItem, $itemKey, $depth + 1, $href);
  }
}

$output.= '</li>'; 

[...]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
* kick *

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Hier heb je misschien wel wat aan. En dan met name het idee dat je de href in een losse functie kunt stoppen a la:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
## $catData ~ $nodes

/**
 * fullpath returns a directory path from the root
 *  node to the given one by eveluating the $catData array
 * input: int $id - a valid catid
 *        array $catData - see catTree for details.
 *
 */

function fullpath ($id, $catData)
{
    if (!isset($catData['parent'])) { return '/root/'; }

    $parent = $id;
    while ($parent != 0)
    { 
        $path[] = $catData['name'][$parent];
        $parent = $catData['parent'][$parent];
    }

    $output = '/' .implode('/', array_reverse($path)) .'/';
    return $output;
}

Dat scheelt je een hoop moeite qua recursie met $href :)

[ Voor 7% gewijzigd door T-MOB op 24-11-2004 20:15 . Reden: layout ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@T-MOB - dat snap ik niet helemaal. Mijn functie loopt recursief alle menu nodes door. In diezelfde recursie wil ik de link naar een node maken; dan gaat het in 1 moeite door. Zoals ik het nu begrijp, retourneert jouw functie een pad van de actieve node naar de top, maar dan heb ik nog steeds een aparte functie nodig -- nog steeds recursief -- om het menu te bouwen ....toch?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Ja dat klopt, je bouwt nog steeds recursief het menu op. Alleen hoef je nu niet meer te zorgen dat in die recursie ook $href goed wordt opgebouwd. De href bouw je in een andere functie op. (Die je eventueel ook voor andere doeleinden kunt gebruiken, bijvoorbeeld om 'product > sjablonen > testpagina' linkjes te gaan genereren).

Waar het misgaat bij jou trowens is regel 48-49:
PHP:
1
2
3
4
5
6
          $href.= $item['alias'].'/';
          buildMenu($menuItems, $activeItem, $itemKey, $depth + 1, $href); 

//moet worden:
           $tmphref = $href .$item['alias'] .'/';
           buildMenu($menuItems, $activeItem, $itemKey, $depth + 1, $tmphref);


Anders wordt $href gedurende je foreach loopje steeds langer naarmate er childs zijn, terwijl dat niet de bedoeling is. * T-MOB mist de Skillz om uit leggen wat ie bedoelt

[ Voor 12% gewijzigd door T-MOB op 24-11-2004 20:49 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Thanx T-MOB! Je hebt wel degelijk de skillz om het uit te leggen -- ik zat zelf ook al in de richting van een $tmphref achtig iets te denken... Ik ga nog wel je vorige post goed bekijken, en bezien wat de voordelen allemaal zijn. Ontzettend bedankt.

Nog eens laatste vraag als je eens tijd hebt - ik merk dat jij ontzettend veel met array's werk. Ik neem aan dat je alle nodes uit je menu tabel uitleest, die in een array plempt en die array telkens doorloopt als je een menuutje of trail ofzo wilt maken. Ik probeer nu hetzelfde, maar twijfel of het efficienter (sneller) is dan recursief een "SELECT parent_id FROM nodes WHERE ..." query aan te roepen, zoals je in de meeste recursieve functies ziet. Wat zijn jouw ervaringen daarmee?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Even een benchje in elkaar geflanst:
code:
1
2
3
4
5
benchmark run with 500 repetitions
fetch all data:      0.00219106674194s
walk the array:      0.0777010917664s

queries:             0.393465995789s

Hierbij heb ik 1 maal alle nodes opgehaald (0.0022s), vervolgens 500 maal het hele array doorlopen en de gezochte waarde bij het id gereturned (0.0777)s. De waarde bij queries is de tijd die 500 queries naar dezelfde waarde in beslag nam (0.393s).

Als je de tijd van het ophalen van alle data even verwaarloosd ben je dus 5maal zo snel met een array als met losse queries. Hierbij heb ik in de array methode niets geoptimaliseerd. Als het om het zoeken van 1 enkel id gaat kun je immers al returnen zodra je de juiste waarde hebt gevonden. Dat levert nog eens een gemiddelde snelheidswinst op van een factor 2, waardoor je met een array dus ongeveer 10 maal zo snel bent (eea afhankelijk van de specs van de server natuurlijk :) ).

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17:49

ripexx

bibs

Reveller schreef op woensdag 24 november 2004 @ 21:07:
[..]
Nog eens laatste vraag als je eens tijd hebt - ik merk dat jij ontzettend veel met array's werk. Ik neem aan dat je alle nodes uit je menu tabel uitleest, die in een array plempt en die array telkens doorloopt als je een menuutje of trail ofzo wilt maken. Ik probeer nu hetzelfde, maar twijfel of het efficienter (sneller) is dan recursief een "SELECT parent_id FROM nodes WHERE ..." query aan te roepen, zoals je in de meeste recursieve functies ziet. Wat zijn jouw ervaringen daarmee?
Je moet heel erg oppassen met recursieve functies. Zeker als je bij elke node ook nog eens een select gaat doen. Als je 100 nodes hebt doe je dus 100 requests oid. Wat als de site naar verllop van tijd gaat groeien? Niet 100 maar 100 nodes en vier, vijf, zes... 10 lagen diep! Met een array heb je veel meer controle over de zaken. Je kan array's splitsen, mergen, key's zoeken en stug doorlopen ;)

Verder zou ik zoveel mogelijk recursieve functies voorkomen. En kijk ook eens naar andere technieken om hirarchische data uit een DB op te halen.

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik ben nu bezig met de code die een trail moet maken. Ik ga weer uit van de volgende array:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$nodes[1]   = Array('pid'=> 0,  'title'=> 'Home',           'alias'=> '',            'status'=> 1, 'innav'=> 1);
$nodes[93]  = Array('pid'=> 1,  'title'=> 'Over Ons',       'alias'=> 'over',        'status'=> 1, 'innav'=> 1);
$nodes[101] = Array('pid'=> 1,  'title'=> 'Nieuws',         'alias'=> 'nieuws',      'status'=> 1, 'innav'=> 1);
$nodes[95]  = Array('pid'=> 1,  'title'=> 'Product',        'alias'=> 'product',     'status'=> 1, 'innav'=> 1);
$nodes[100] = Array('pid'=> 1,  'title'=> 'Handleiding',    'alias'=> 'handleiding', 'status'=> 1, 'innav'=> 0);
$nodes[96]  = Array('pid'=> 1,  'title'=> 'Contact',        'alias'=> 'contact',     'status'=> 1, 'innav'=> 1);
$nodes[104] = Array('pid'=> 1,  'title'=> 'Gastenboek',     'alias'=> 'gastenboek',  'status'=> 0, 'innav'=> 1);
$nodes[103] = Array('pid'=> 1,  'title'=> 'Voorwaarden',    'alias'=> 'voorwaarden', 'status'=> 0, 'innav'=> 1);
$nodes[97]  = Array('pid'=> 95, 'title'=> 'Overzicht',      'alias'=> 'overzicht',   'status'=> 1, 'innav'=> 1);
$nodes[99]  = Array('pid'=> 95, 'title'=> 'Tekstverwerker', 'alias'=> 'editor',      'status'=> 1, 'innav'=> 1);
$nodes[98]  = Array('pid'=> 95, 'title'=> 'Sjablonen',      'alias'=> 'templates',   'status'=> 1, 'innav'=> 1);
$nodes[110] = Array('pid'=> 98, 'title'=> 'Testpagina',     'alias'=> 'test',        'status'=> 1, 'innav'=> 1);

Om een trail samen te stellen heb ik de volgende functie. In dit geval ga ik ervan uit dat pagina node 110 gevraagd wordt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
define('BASE_URL' , 'http://localhost/site/');

function buildTrail($menuItems, $activeItem, $depth=0, $href=BASE_URL)
{
  static $output;
 
  if ($depth == 0)
    $output.= '<a href="'.$href.'">Home</a>';
 
  if ($menuItems[$activeItem]['pid'] != 0)
  {
    $newhref = $href.$menuItems[$activeItem]['alias'].'/'; 
    buildTrail($menuItems, $menuItems[$activeItem]['pid'], $depth+1, $newhref);    
    $output.= ' &gt; <a href="'.$href.'">'.$menuItems[$activeItem]['title'].'</a>';
  }
  return '<div id="trail">'.$output.'</div>';
}

De output daarvan is half goed / half voud. De trail zelf is goed (Home > Product > Sjablonen > Testpagina), maar de links kloppen weer niet. Ik heb geprobeerd te leren van de oplossingen die eerser in deze topic zijn gegeven, maar ik snap niet waarom het hier fout gaat. Het principe is toch gelijk als in de functie die het navigatie menu bouwt?
HTML:
1
2
3
4
5
6
<div id="trail">
  <a href="http://localhost/site/">Home</a> &gt; 
  <a href="http://localhost/site/test/sjablonen/">Product</a> &gt; 
  <a href="http://localhost/test/test/">Sjablonen</a> &gt; 
  <a href="http://localhost/test/">Testpagina</a>
</div>

Ik heb ook al geprobeerd het opbouwen van de link om te draaien: $newhref = $menuItems[$activeItem]['alias'].'/'.$href, maar dit gaat bijkans nog veel fouter. Wat doe ik verkeerd?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Dit is precies waarom ik je eerder adviseerde om een functie te maken die een href bij een nodeid returned. Dan kun je dit namelijk recursieloos oplossen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function maketrail($menuItem, $activeItem)
{

$output = '<div id="trail">' ." \n";

  $parent = $activeitem;

  while ($parent > 0)
  {
   $output .= '<a href="' .href($parent) .'">' .$menuItem[$parent]['title'] .'</a>' ."\n";
   $parent = $menuItem[$parent]['pid'];
  }

$output .= '</div>' ."\n";

return $output;
}

[ Voor 39% gewijzigd door T-MOB op 25-11-2004 09:40 . Reden: [/php] toegevoegd ]

Regeren is vooruitschuiven


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
T-MOB - ik zie nu wat je bedoelt en volg je advies graag op :) De afgelopen tijd heb ik gezeten op het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
 * Build cookie crumb trail w/nodes
 */
function buildTrail($menuItems, $activeItem, $depth=0)
{
  static $output;
 
  if ($depth == 0)
    $output.= '<a href="'.BASE_URL.'">Home</a>';
 
  if ($menuItems[$activeItem]['pid'] != 0)
  {
    $href = href($activeItem, $menuItems);
    buildTrail($menuItems, $menuItems[$activeItem]['pid'], $depth+1);    
    $output.= ' &gt; <a href="'.$href.'">'.$menuItems[$activeItem]['title'].'</a>';
  }
  return '<div id="trail">'.$output.'</div>';
}

/**
 * Returns a directory path from the root node to the given one by evaluating
 * the $menuItems array
 *
 * input: int   $id    - a valid catid
 *        array $menuItems
 */
function href($activeItem, $menuItems)
{
  $parent = $activeItem;
  while ($parent != 0)
  { 
    $path[] = $menuItems[$activeItem]['alias'];
    $parent = $menuItems[$activeItem]['pid'];
  }

  $output = '/' .implode('/', array_reverse($path)) .'/';
  return $output;
}

buildTrail($nodes, 110);

Mijn computer slaat alleen helemaal op hol als ik deze code run. Ik ben al zover dat ik weet dat het hem in de href() functie zit, maar ik zie niet waarom hij hiervan in een eeuwige loop raakt?

[ Voor 25% gewijzigd door Reveller op 25-11-2004 15:39 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Omdat de while loop nooit ophoudt op de manier waarop je hem hebt geformuleerd. Of je werkt met $activeItem in zowel je conditie als je array $menuItems, of je gebruikt een tussenvar aka $parent. Wat eigenlijk niet nodig is in deze functie. Zo moet ie het wel doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function href($activeItem, $menuItems) 
{ 

  while ($activeItem != 0) 
  {  
    $path[] = $menuItems[$activeItem]['alias']; 
    $activeItem = $menuItems[$activeItem]['pid']; 
  } 

  $output = '/' .implode('/', array_reverse($path)) .'/'; 
  return $output; 
}

Regeren is vooruitschuiven


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
T-MOB - ontzettend bedankt zeg. Ik heb geprobeerd om ook mijn buildMenu functie van deze nieuwe href() functie te laten lopen; alleen hie gaat het niet goed. Ik probeer te doorgronden wat er precies gebeurt, maar mis kennelijk toch telkens iets. Zou je mij een laatste maal willen helpen door te vertellen wat hier fout gaat? Ik zou het ontzettend waarderen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**
 * Build navigation menu
 */
function buildMenu($menuItems, $activeItem, $curItem=1, $depth=0) 
{
  static $output;

  $unfoldItems = array($activeItem); 
  while ($unfoldItems[count($unfoldItems)-1] != 0)
    $unfoldItems[] = $menuItems[$unfoldItems[count($unfoldItems)-1]]['pid'];

  $first = true; 
  foreach ($menuItems as $itemKey=>$item) 
  {
    if ($item['pid'] == $curItem)
    { 
      if ($first) 
      {
        $output.= '<ul>';
        $first = false;
      } 
      
      if ($item['status'] == 1 and $item['innav'] == 1)
      {
        $href = href($activeItem, $menuItems);

        if ($activeItem == $itemKey)
          $output.= '<li class="on"><a href="'.$href.$item['alias'].'/">'.$item['title'].'</a>';
        else
          $output.= '<li class="off"><a href="'.$href.$item['alias'].'/">'.$item['title'].'</a>';
        
        if (in_array($itemKey, $unfoldItems)) // uitcommenten voor full unfolded tree list
        {
          buildMenu($menuItems, $activeItem, $itemKey, $depth + 1);
        }

        $output.= '</li>';
      }
    } 
  } 
     
  if (!$first)
    $output.= '</ul>';

    return '<div id="navcontainer">'.$output.'</div>';
}

[ Voor 47% gewijzigd door Reveller op 25-11-2004 18:34 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Volgens mij moet je de href functie (r24) aanroepen met
PHP:
1
$href = href($itemKey, $menuItems); //ipv $activeItem dus...

Regeren is vooruitschuiven

Pagina: 1