Problema menú generar dinámicamente

  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Enero 7th, 2011, 5:02 pm

Tengo que generar el menú de forma dinámica y tengo la mayor parte de la función de trabajo...

A continuación se muestra la función que estoy usando...
PHP Código: [ Select ]
<?php
public function generate_menu($beg, $end, $url_beg = null, $url_end = null)
{
    global $sys_url;
   
    // The menu array
    $_MENU = array('Home', 'index.php',
                   'Forum', array('forum', 'index.php'));
   
    // Starting the menu generation
    $menu = "<li class=\"head\">Navigation</li>\n";
   
    // Creating the menu
    foreach($_MENU as $title => $url)
    {
        if(is_array($url))
        {
            if(count($sys_url) > 3)
            {
                $url = $url[1];
            }
            else
            {
                $url = $url[0] . '/' . $url[1];
            }
           
            $menu .= "{$url_beg}<a href=\"{$url}\">{$title}</a>{$url_end}\n";
        }
        else
        {
            if(count($sys_url) > 3)
            {
                $url = '../' . $url;
            }
            else
            {
                $url = $url;
            }
           
            $menu .= "{$url_beg}<a href=\"{$url}\">{$title}</a>{$url_end}\n";
        }
    }
   
    echo $beg . "\n" . trim($menu) . "\n" . $end . "\n";
}
?>
  1. <?php
  2. public function generate_menu($beg, $end, $url_beg = null, $url_end = null)
  3. {
  4.     global $sys_url;
  5.    
  6.     // The menu array
  7.     $_MENU = array('Home', 'index.php',
  8.                    'Forum', array('forum', 'index.php'));
  9.    
  10.     // Starting the menu generation
  11.     $menu = "<li class=\"head\">Navigation</li>\n";
  12.    
  13.     // Creating the menu
  14.     foreach($_MENU as $title => $url)
  15.     {
  16.         if(is_array($url))
  17.         {
  18.             if(count($sys_url) > 3)
  19.             {
  20.                 $url = $url[1];
  21.             }
  22.             else
  23.             {
  24.                 $url = $url[0] . '/' . $url[1];
  25.             }
  26.            
  27.             $menu .= "{$url_beg}<a href=\"{$url}\">{$title}</a>{$url_end}\n";
  28.         }
  29.         else
  30.         {
  31.             if(count($sys_url) > 3)
  32.             {
  33.                 $url = '../' . $url;
  34.             }
  35.             else
  36.             {
  37.                 $url = $url;
  38.             }
  39.            
  40.             $menu .= "{$url_beg}<a href=\"{$url}\">{$title}</a>{$url_end}\n";
  41.         }
  42.     }
  43.    
  44.     echo $beg . "\n" . trim($menu) . "\n" . $end . "\n";
  45. }
  46. ?>
Y a continuación es como llamar a la función
PHP Código: [ Select ]
<?php
<?= $tpl->generate_menu('<ul id="left_menu">', '</ul>', '<li>', '</li>'); ?>
?>
  1. <?php
  2. <?= $tpl->generate_menu('<ul id="left_menu">', '</ul>', '<li>', '</li>'); ?>
  3. ?>
Y a continuación es lo que genera la función
HTML Código: [ Select ]
<li class="head">Navigation</li>
<li><a href="Home">0</a></li>
<li><a href="index.php">1</a></li>
<li><a href="Forum">2</a></li>
<li><a href="forum/index.php">3</a></li>
</ul>
  1. <li class="head">Navigation</li>
  2. <li><a href="Home">0</a></li>
  3. <li><a href="index.php">1</a></li>
  4. <li><a href="Forum">2</a></li>
  5. <li><a href="forum/index.php">3</a></li>
  6. </ul>
A continuación se muestra lo que la proyección de imagen de la función debe generar
HTML Código: [ Select ]
<li class="head">Navigation</li>
<li><a href="index.php">Home</a></li>
<li><a href="forum/index.php">Forum</a></li>
</ul>
  1. <li class="head">Navigation</li>
  2. <li><a href="index.php">Home</a></li>
  3. <li><a href="forum/index.php">Forum</a></li>
  4. </ul>
Creo que se explica el problema con los ejemplos...como se puede ver, la función pone el título de cada eslabón de enlace y los números de 0-3 el título como la función ve 4 enlaces...el título del enlace como un enlace y los enlaces reales como enlaces. Puesto que hay dos enlaces y dos títulos asociados a esos vínculos, pero la función por alguna razón se separa y pone los títulos, así como enlaces. Creo que esto podría aclarar si los ejemplos no pop, como pensé que lo harían.

poco tiempo Im así que realmente no tienen tiempo para solucionar, por lo que estoy publicando esto aquí. Gracias de antemano...
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Enero 7th, 2011, 5:02 pm

  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Enero 7th, 2011, 5:06 pm

:lol: No importa, siempre es el más pequeño error que se me confundió...He creado la matriz de forma incorrecta. A continuación solucionado el problema.
PHP Código: [ Select ]
<?php
public function generate_menu($beg, $end, $url_beg = null, $url_end = null)
{
    global $sys_url;
   
    // The menu array
    $_MENU = array('Home' => 'index.php',
                   'Forum' => array('forum', 'index.php'));
   
    // Starting the menu generation
    $menu = "<li class=\"head\">Navigation</li>\n";
   
    // Creating the menu
    foreach($_MENU as $title => $url)
    {
        if(is_array($url))
        {
            if(count($sys_url) > 3)
            {
                $url = $url[1];
            }
            else
            {
                $url = $url[0] . '/' . $url[1];
            }
           
            $menu .= "{$url_beg}<a href=\"{$url}\">{$title}</a>{$url_end}\n";
        }
        else
        {
            if(count($sys_url) > 3)
            {
                $url = '../' . $url;
            }
            else
            {
                $url = $url;
            }
           
            $menu .= "{$url_beg}<a href=\"{$url}\">{$title}</a>{$url_end}\n";
        }
    }
   
    echo $beg . "\n" . trim($menu) . "\n" . $end . "\n";
}
?>
  1. <?php
  2. public function generate_menu($beg, $end, $url_beg = null, $url_end = null)
  3. {
  4.     global $sys_url;
  5.    
  6.     // The menu array
  7.     $_MENU = array('Home' => 'index.php',
  8.                    'Forum' => array('forum', 'index.php'));
  9.    
  10.     // Starting the menu generation
  11.     $menu = "<li class=\"head\">Navigation</li>\n";
  12.    
  13.     // Creating the menu
  14.     foreach($_MENU as $title => $url)
  15.     {
  16.         if(is_array($url))
  17.         {
  18.             if(count($sys_url) > 3)
  19.             {
  20.                 $url = $url[1];
  21.             }
  22.             else
  23.             {
  24.                 $url = $url[0] . '/' . $url[1];
  25.             }
  26.            
  27.             $menu .= "{$url_beg}<a href=\"{$url}\">{$title}</a>{$url_end}\n";
  28.         }
  29.         else
  30.         {
  31.             if(count($sys_url) > 3)
  32.             {
  33.                 $url = '../' . $url;
  34.             }
  35.             else
  36.             {
  37.                 $url = $url;
  38.             }
  39.            
  40.             $menu .= "{$url_beg}<a href=\"{$url}\">{$title}</a>{$url_end}\n";
  41.         }
  42.     }
  43.    
  44.     echo $beg . "\n" . trim($menu) . "\n" . $end . "\n";
  45. }
  46. ?>
En lugar de hacer una matriz asociativa, que acaba de crear una numérico con 4 entradas :oops:
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Nightslyr
  • Proficient
  • Proficient
  • No Avatar
  • Registrado: Sep 21, 2005
  • Mensajes: 274
  • Status: Offline

Nota Enero 14th, 2011, 3:44 pm

Gah, ¿por qué utilizar una variable global? Pase $ sys_url a través de su lista de argumentos.
  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Enero 14th, 2011, 9:16 pm

Debido a la estructura de archivos del sistema.

He init.php que define las variables más importantes como $ Sys_url , De esta manera, no tiene que definir en 50 páginas diferentes y luego pasar una hora de cambio que una variable...y que la función está definida en una página completamente diferente que está incluida en otra página que incluye también el init.php en él. Si está familiarizado con phpBB, que es similar a eso.
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Nightslyr
  • Proficient
  • Proficient
  • No Avatar
  • Registrado: Sep 21, 2005
  • Mensajes: 274
  • Status: Offline

Nota Enero 15th, 2011, 5:54 pm

Eso no le impide el paso de la variable a través de la lista de argumentos de funciones.
  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Enero 17th, 2011, 7:35 pm

Ese tipo de realidad no, no quiero pasar una hora de fijar una variable cuando me podría haber salvado a 59 minutos y 55 segundos cambiar una variable o condición / factor de un condicional de conseguir el resultado que establece la variable global.

Otra razón por la que estoy haciendo esto es porque estoy separando la lógica de programación de la lógica de la pantalla, y pasando por condicionantes para establecer una variable para pasar a través del argumento en contra del propósito.

De todos modos, ¿qué tienes en contra de las variables globales?
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • spork
  • Brewmaster
  • Silver Member
  • Avatar de Usuario
  • Registrado: Sep 22, 2003
  • Mensajes: 6134
  • Loc: Seattle, WA
  • Status: Offline

Nota Enero 18th, 2011, 12:37 pm

Bogey escribió:
De todos modos, ¿qué tienes en contra de las variables globales?


Globales son generalmente mal visto, porque hacer que las aplicaciones difíciles de depurar y dar lugar a "código espagueti".

Como ejemplo, imagina que estás buscando en el siguiente código PHP:

PHP Código: [ Select ]
<?php
include('some_file.php');
include('another_file.php');
 
function myFunction() {
  global $myVar;
 
  $myVar = "hello";
  someFunction();
  $myVar += "world";
  $ret = someOtherFunction();
 
  echo $myVar;
}
?>
 
  1. <?php
  2. include('some_file.php');
  3. include('another_file.php');
  4.  
  5. function myFunction() {
  6.   global $myVar;
  7.  
  8.   $myVar = "hello";
  9.   someFunction();
  10.   $myVar += "world";
  11.   $ret = someOtherFunction();
  12.  
  13.   echo $myVar;
  14. }
  15. ?>
  16.  


Si ejecuta esta secuencia de comandos, lo que va a ser la salida? Cuando es de $ myVar inicialmente definido? Como muchos otros métodos que modificar, ¿de dónde lo modifique, y qué orden? Para calcular estas cosas youd necesidad de dar marcha atrás a través de cada archivo incluido y examinar todas las funciones. Itd ser un completo desastre.
The Beer Monocle. Classy.
  • Nightslyr
  • Proficient
  • Proficient
  • No Avatar
  • Registrado: Sep 21, 2005
  • Mensajes: 274
  • Status: Offline

Nota Enero 19th, 2011, 1:28 pm

Exactamente a la derecha. Globals plomo de acoplamiento en lugar de reducirla. Ellos, por definición, rompe la encapsulación. Theyre una muleta, y en la gran mayoría, mayoría de los casos, un signo de un mal diseño.

Ver también: programming-forum/classes-interfacing-php-t97447. html #p546909

A pesar de que el enlace de arriba habla de variables globales en un contexto de programación orientada a objetos, yo sostengo que theyre mal uso en casi cualquier contexto. Recuerde que el punto de funciones - segmentos de código cuyo desempeño debe depende únicamente de la información que se pasen explícitamente en ellos. Ellos, como los objetos, tienen la intención de ser modular, que puedan utilizarse en una variedad de condiciones. Adición de una advertencia oculta a cómo debe operar una función (y, no nos engañemos, un requisito de las funciones de un mundial está oculta en el script principal) reduce la modularidad y la aplicabilidad.

Bien estructurado el código se basa en vías de balas de comunicación explícita. Esto es cierto independientemente de lo que el estilo que con el código. Una interfaz de funciones es tan importante como los métodos o clases.
  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Enero 19th, 2011, 5:10 pm

Yo sólo definen las variables globales en un archivo y se dejan como están. Yo no los modifique en cualquier otro lugar. Esta es la forma en que uso mis variables.

Si es un mundial, entonces me puse en un archivo y lo dejas. Si tengo que modificar, me puse a otra variable, modificar esa variable, y luego enviar esa variable a través de la lista de argumentos de funciones.

Globales, en mis sistemas, sólo se establecen de una vez modificado nunca.

Creo que dejé claro de por qué globales estoy usando aquí. No puedo pensar en ninguna otra manera conveniente de hacerlo luego a través de variables globales.

En otras palabras, estoy usando esta técnica .
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Nightslyr
  • Proficient
  • Proficient
  • No Avatar
  • Registrado: Sep 21, 2005
  • Mensajes: 274
  • Status: Offline

Nota Enero 20th, 2011, 12:08 pm

Que aún no le impide el paso de la variables de configuración a través de una lista de argumentos de funciones. Cuando usted tiene una función como:

Código: [ Select ]
<?php
  function doSomething($arg1, $arg2)
  {
   global $configVar;

   // code that does something
  }
?>
  1. <?php
  2.   function doSomething($arg1, $arg2)
  3.   {
  4.    global $configVar;
  5.    // code that does something
  6.   }
  7. ?>


Youre que oculta el hecho de que la función de las necesidades de su variable de configuración para que funcione. Youve implícitamente ligado a la función del contexto en el que se llama. En última instancia, no importa si usted es el único código de la escritura, pero en un entorno profesional, como algo que vuelan wouldnt. Es un hábito muy malo para entrar. Por el contrario, algo así como:

Código: [ Select ]
<?php
  function doSomething($arg1, $arg2, $configVar)
  {
   // code that does something
  }
?>
  1. <?php
  2.   function doSomething($arg1, $arg2, $configVar)
  3.   {
  4.    // code that does something
  5.   }
  6. ?>


Es explícito que requiere algo de configuración de la configuración para que funcione correctamente. Su todavía perfectamente acoplada a la red, que en algunos casos no se puede evitar, pero al menos en su una relación explícita. Usted también obtener el beneficio de ser capaz de pasar de un determinado tipo de variable, en lugar de una variable de la prima. Realmente útil cuando se utiliza la inyección de dependencia / inversión de control (recuerde - programa a una interfaz, no una aplicación).

No estoy diciendo que la configuración de la aplicación de forma implícita mal (a pesar de que definitivamente debe ser manejado con elegancia). Im que dice que confiar en la palabra clave global es malo. listas de argumentos existen por una razón. Theres ninguna buena razón para no pasar estas variables a través de la lista de argumentos como todos los demás.
  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de Usuario
  • Registrado: May 22, 2004
  • Mensajes: 3415
  • Loc: Richland, WA
  • Status: Offline

Nota Enero 20th, 2011, 4:42 pm

Su uso de variables globales como constantes.

http://us.php.net/manual/en/language.constants.php
#define NULL (::rand() % 2)
  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Enero 20th, 2011, 9:25 pm

Nightslyr escribió:
Que aún no le impide el paso de la variables de configuración a través de una lista de argumentos de funciones. Cuando usted tiene una función como:

Código: [ Select ]
<?php
  function doSomething($arg1, $arg2)
  {
   global $configVar;

   // code that does something
  }
?>
  1. <?php
  2.   function doSomething($arg1, $arg2)
  3.   {
  4.    global $configVar;
  5.    // code that does something
  6.   }
  7. ?>


Youre que oculta el hecho de que la función de las necesidades de su variable de configuración para que funcione. Youve implícitamente ligado a la función del contexto en el que se llama. En última instancia, no importa si usted es el único código de la escritura, pero en un entorno profesional, como algo que vuelan wouldnt. Es un hábito muy malo para entrar. Por el contrario, algo así como:

Código: [ Select ]
<?php
  function doSomething($arg1, $arg2, $configVar)
  {
   // code that does something
  }
?>
  1. <?php
  2.   function doSomething($arg1, $arg2, $configVar)
  3.   {
  4.    // code that does something
  5.   }
  6. ?>


Es explícito que requiere algo de configuración de la configuración para que funcione correctamente. Su todavía perfectamente acoplada a la red, que en algunos casos no se puede evitar, pero al menos en su una relación explícita. Usted también obtener el beneficio de ser capaz de pasar de un determinado tipo de variable, en lugar de una variable de la prima. Realmente útil cuando se utiliza la inyección de dependencia / inversión de control (recuerde - programa a una interfaz, no una aplicación).

No estoy diciendo que la configuración de la aplicación de forma implícita mal (a pesar de que definitivamente debe ser manejado con elegancia). Im que dice que confiar en la palabra clave global es malo. listas de argumentos existen por una razón. Theres ninguna buena razón para no pasar estas variables a través de la lista de argumentos como todos los demás.
No creo que usted entiende la razón por la cual estoy haciendo esto, sin embargo aún se lo expliqué tantas veces. Si bien no tiene por qué me impide usar la lista de argumentos, usándolo como una constante es mucho más conveniente por razones que ya he explicado.

SpooF escribió:
Su uso de variables globales como constantes.

http://us.php.net/manual/en/language.constants.php
Sí, así es como estoy usando. No puedo creer que me olvidé de las constantes gif "alt =": lol: "title =" Laughing ">

Creo que los malos cambio constantes en lugar de globales.
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Febrero 19th, 2011, 1:35 pm

Ok, estoy publicando esto aquí porque el problema suscitado a partir de la conversación que tuvimos aquí sobre el uso de constantes.

Necesito una matriz que se utiliza como una constante ($ sys_url), pero no podemos tener una matriz establecer como una constante...sólo los valores escalares...que me trae un problema.

Im que va a tener que usar variables globales, me guste o no.
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • spork
  • Brewmaster
  • Silver Member
  • Avatar de Usuario
  • Registrado: Sep 22, 2003
  • Mensajes: 6134
  • Loc: Seattle, WA
  • Status: Offline

Nota Febrero 19th, 2011, 2:37 pm

Utilice una clase singleton.
The Beer Monocle. Classy.

Publicar Información

  • Total de mensajes en este tema: 14 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 141 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC