Newsgroup: it.comp.www.php
Titolo: Menù ad albero

Qualcuno sa dove osso trovare un menů ad albero con sottocartelle in php?

 ha scritto nel messaggio
news:Yuvh8.13366$uN5.3...@twister1.libero.it...


dovrebbe essere difficile!
Il problema e' che se lo fai in Javascript, con qualcosa tipo
<script language="javascript">
<!-- //
var Open = "";
var Closed = "";
if (document.images)
{
        Open = new Image(16,13);
        Closed = new Image(16,13);
        Open.src = "/icons/menuopen.gif";
        Closed.src = "/icons/menuclosed.gif";
}
	// ecc.
<?
	// 
	// Disegna un menu ad albero con cartelle espandibili.
	// Client side, ispirato a "Joust".
	// 
        function drawMenu($ID, $menu)
        {
                while(list($chunk, $data) = each($menu))
                {
                        if (is_array($data))
                        {
                                $mID = strtok($chunk, "|");
                                $title = strtok("|");
                                print <<< MENUCODE
<SPAN ID="menu$ID$mID"
onClick="showhide(menu${ID}${mID}outline,menu${ID}${mID}s
ign)" style="cursor:hand; font-Family:Verdana; text-decoration:none;
font-weight:bold"><img id="menu${ID}${mID}sign" src="/icons/menuclosed.gif"
valign="bottom">&nbsp;<font size="2">$title</font></SPAN><BR><SPAN
ID="menu${ID}${mID}outline" style="display:'none'; visibility='hide';"><UL
STYLE="margin-left: 15; margin-top: 0; margin-bottom: 0;">
MENUCODE;
                                while(list($title, $link) = each($data))
  				{
...allora non ti funziona con Opera 5.x e 6.x: gia' provato piu' volte e
tutto quello che si ottiene e' di vedere il menu SEMPRE esploso... cioe'
con tutte le cartelle aperte. No gud.
Altrimenti si puo' provare a mettere l'albero in un frame, che e' quello
che faccio io adesso
	//
	// Crea un oggetto-albero da passare ad HTMLTree prendendolo
	// da un database SQL.
	//
        function PHPBranch($conn, $node, $fields='node,level,title,tag',
$data=a
rray('node'=>0, 'level'=>0, 'title'=>'', 'tag'=>''))
        {
                GLOBAL $db;
                $Self = array();
                // Individua i rami figli
                $SQL = "SELECT $fields FROM $db WHERE parent=$node ORDER BY
level, node;"; // ", id" assicura una stabilita'.
                $exec = SQLExec($conn, $SQL);
                $rows = SQLRows($exec);
                // Ricorsione su ciascun nodo
                $Self['node'] = $node;
                while(list($key,$val) = each($data))
                        $Self[$key] = $val;
                $sons = array();
                for ($row = 0; $row < $rows; $row++)
                {
                        $Node = SQLArray($exec, $row);
                        $next = $Node['node'];
                        if ($next <= $node)
                        {
				// Questo non e' proprio il sistema
				// migliore - ma ci consente di non
				// portarci dietro tutti i tags dei
				// nodi antenati.
                                die('FATAL: tree is a cyclic graph.');
                        }
  			...
...ma cosi' facendo c'e' un carico maggiore server-side.
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.

Per il javascript consiglierei di fare un salto a
www.dhtmlab.com
Fabio