Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481

    struttura ricorsiva per menu

    Sto realizzando un menu a tendina, anzichè crearlo statico però, voglio crearlo dinamico. La struttura html è molto semplice:
    codice:
    <ul>[*]<a ....>Home</a>[*]<a ....>Prodotti</a>
      <ul>[*]<a ....>Categoria1</a>[*]<a ....>Categoria2</a>
         <ul>[*]<a ...>Prodotto1</a>[*]<a ...>Prodotto2</a>[*]<a ...>Prodotto3</a>[/list]
       [*]<a ....>Categoria3</a>[*]<a ....>Categoria4</a>
    [*]<a ....>Contatti</a>
    Come posso implementare nella migliore manira possibile questa struttura con degli array che posso scorrere in maniera poi ricorsiva?? Scusate la domanda banale ma non ho mai avuto nessun approccio a problemi di natura ricorsiva e quindi non so da dove iniziare nella strutturazione del/degli array ne tanto meno nella funzione di scansione del/degli array!!

    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di polinet
    Registrato dal
    Nov 2000
    Messaggi
    993
    Usi un DB? per il menu
    ¿Hasta la pasta?

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    L'ho buttata lì.

    codice:
    <?php
      function mymenubuilder($arr) {
        echo("<ul>");
        foreach($arr as $key => $val) {
    	  if (is_array($val)) {
    	    echo("[*]".$key);
    	    mymenubuilder($val);
    		echo("");
    	  }
    	  else {
    	    echo("[*]".$val."\n");
    	  }
    	}
    	echo("[/list]");
      }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Menubuilder</title>
    </head>
    
    <body>
    <?php
      $menucontents = array("Home", "Products" => array("Gardening", "House Care", "Pet Care" => array("Dogs", "Kitties", "Birds")), "Vacations", "Contact Us");
      mymenubuilder($menucontents);
    ?>
    </body>
    </html>
    Poi c'è appunto da sapere come tratti/recuperi gli array come polinet già chiedeva.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Originariamente inviato da polinet
    Usi un DB? per il menu
    pensavo di usare un array

  5. #5
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Originariamente inviato da Andrea1979
    L'ho buttata lì.

    codice:
    <?php
      function mymenubuilder($arr) {
        echo("<ul>");
        foreach($arr as $key => $val) {
    	  if (is_array($val)) {
    	    echo("[*]".$key);
    	    mymenubuilder($val);
    		echo("");
    	  }
    	  else {
    	    echo("[*]".$val."\n");
    	  }
    	}
    	echo("[/list]");
      }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Menubuilder</title>
    </head>
    
    <body>
    <?php
      $menucontents = array("Home", "Products" => array("Gardening", "House Care", "Pet Care" => array("Dogs", "Kitties", "Birds")), "Vacations", "Contact Us");
      mymenubuilder($menucontents);
    ?>
    </body>
    </html>
    Poi c'è appunto da sapere come tratti/recuperi gli array come polinet già chiedeva.
    andrebbe bene, ma ci sono delle complicanze maggiori, innanzi tutto il numero dei livelli, strutturato in questo modo gestisco solo due livelli, io dovrei arrivare minimo a tre, secondo, l'array dovrebbe essere multidimensionale, perchè per ogni pagina, oltre al link, devo avere il nome della pagina, quindi ogni voce di menu deve essere associata ad almeno due valori o più (pagina, descrizione, title magari)

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Le complicazioni le lascio a te.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    ho trovato questo http://www.zend.com/codex.php?id=1470&single=1 interessante, solo che in questo modo non riesco a gestire alcune cose. Questo script prevede che ci siano solo la descrizione del link ed il nome della pagina, io dovrei almeno avere anche il titolo, e un campo id che mi definisce quello specifico link per includere via css magari una mini-immagine.

    Inoltre vorrei organizzare le pagine su più directory, e non mettere tutto sulla web root, quindi nella generazione ricorsiva dovrei poter sapere a quale livello mi trovo, altrimenti come posso linkare le pagine che sono negli altri livelli?

    poi tra l'altro, il menu è concettualmente sbagliato, perchè chiude il campo ul ogni volta che non c'è un
    sotto menu.

    Riporto lo script

    Codice PHP:
    <?php

    /*

        ---------------------------
        Author: Vardhan
        Date: March 03rd, 2005
        ---------------------------

        A navigation menu displayed using a recursive menu.
        Comments are not used to explain the code, so insted I will explain it here.
        
        $menu is an array with the menu.
        everytime you create another dimension on $menu, it creates a submenu.
        
        for example, the $menu array below has 2 submenus under tutorials: php, java
        PHP and Java both have submenus under them: Language, Databases, Networking, CLI, Other
        
        If the value of a key in $menu is an array(), it will create a submenu.
        If its not, it'll create a link, where the link address is the value.
        
        diplay_menu() takes 1 argument: $m
        
        $m is an array of all the items and links an array has.
        In this case, our array is the $menu
        
        Everytime there is an array() in the $menu, it creates a <ul> inside the[*] to make a sub menu, and calls it self (recursitivity) passing the array.
        This keeps going on and on until all array()s are encountered.
        
        Sorry if the explanation above is unclear.
        Hopeful, my code is clear enough to understand.
        
        You can use CSS to edit any line indentions.
        You can use javascript to expand/collapse the menus.    
    */

    $menu=array();
    $menu["home"]="#";
    $menu["tutorials"]=array();
    $menu["tutorials"]["php"]=array();
    $menu["tutorials"]["php"]["Language"]="#";
    $menu["tutorials"]["php"]["Databases"]="#";
    $menu["tutorials"]["php"]["Networking"]="#";
    $menu["tutorials"]["php"]["CLI"]="#";
    $menu["tutorials"]["php"]["Other"]="#";
    $menu["tutorials"]["java"]=array();
    $menu["tutorials"]["java"]["Language"]="#";
    $menu["tutorials"]["java"]["Databases"]="#";
    $menu["tutorials"]["java"]["Networking"]="#";
    $menu["tutorials"]["java"]["CLI"]="#";
    $menu["tutorials"]["java"]["Other"]="#";
    $menu["forums"]="#";

    function 
    display_menu($m) {
        foreach (
    $m as $section => $link) {
            if (!
    is_array($link))
                echo 
    "<ul>[*][url='{$link}']{$section}[/url][/list]";
            else {
                echo 
    "<ul>[*]{$section}";
                
    display_menu($link);
                echo 
    '[/list]';
            } 
    // end of else
        
    // end of foreach loop
    // end of function

    display_menu($menu);

    ?>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.