Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/04/2011, 07:27
Avatar de Fleon
Fleon
 
Fecha de Ingreso: febrero-2010
Mensajes: 138
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Problema con una Función en PHP

Bueno, he simplificado la funcion quedando asi:

Código PHP:
Ver original
  1. function ObtenerNodosHijos($parent, $lang, $level = 1)
  2. {
  3.     global $context, $txt, $modSettings, $scripturl, $smcFunc, $sourcedir, $db_prefix;
  4.    
  5.     //Obtenemos los faqs
  6.     $request = $smcFunc['db_query']('', "
  7.         SELECT *           
  8.         FROM faqs AS f         
  9.         WHERE f.id_rel = '".$parent."' AND f.lng_id = '".$lang."' AND f.status = 1
  10.         ORDER BY f.is_title, f.id_rel,f.chapter,f.schapter,f.sschapter,f.ssschapter,f.titulo"
  11.     );
  12.    
  13.     while ($row = $smcFunc['db_fetch_assoc']($request))
  14.     {
  15.                 //Primer Nivel
  16.         if (($row['id_rel'] == 0) && !empty($row['chapter']) && empty($row['schapter']) && ($row['is_title'] == 1))
  17.             echo '<li>'.$row['chapter'].'. '.$row['titulo'];
  18.                 //Segundo Nivel    
  19.         elseif (($row['id_rel'] != 0) && !empty($row['chapter']) && !empty($row['schapter']) && ($row['is_title'] == 1))
  20.             echo '<li>'.$row['chapter'].'.'.$row['schapter'].'. '.$row['titulo'];      
  21.                //Tercer Nivel
  22.         elseif (($row['id_rel'] != 0) && !empty($row['chapter']) && !empty($row['schapter']) && !empty($row['sschapter']) && ($row['is_title'] == 1))
  23.             echo '<li>'.$row['chapter'].'.'.$row['schapter'].'.'.$row['sschapter'].'. '.$row['titulo'];
  24.                 //Cuarto NIvel     
  25.         elseif (($row['id_rel'] != 0) && !empty($row['chapter']) && !empty($row['schapter']) && !empty($row['sschapter']) && !empty($row['ssschapter']) && ($row['is_title'] == 1))
  26.             echo '<li>'.$row['chapter'].'.'.$row['schapter'].'.'.$row['sschapter'].'.'.$row['ssschapter'].'. '.$row['titulo'];     
  27.                 //Detalle de cada Nivel
  28.         elseif ($row['is_title'] == 0)
  29.             echo '<li>'.$row['titulo'];
  30.        
  31.         ObtenerNodosHijos($row['id'],$lang,$level+1);
  32.     }
  33.    
  34.     $smcFunc['db_free_result']($request);
  35. }

El resultado es el siguiente :

Cita:
<div><ul id="tree"><li>1. Generalidades<li>1.1. Instalaci�n y informaci�n<li>�D�nde encontrar componentes para Delphi?<li>�D�nde encontrar cursos y tutoriales en espa�ol para Delphi?<li>�Se pueden instalar m�s de una versi�n de Delphi en la misma m�quina?<li>1.2. Utilizaci�n del IDE<li>C�mo buscar ayuda dentro de Delphi<li>C�mo buscar ayuda en el API de Windows<li>C�mo desactivar el salto de las excepciones dentro de Delphi<li>C�mo formatear bien el c�digo<li>Crear nuestros propios modelos de c�digo<li>Grabar macros<li>Teclas de acceso r�pido<li>1.3. Depurando el c�digo (debug)<li>Evitar trazar el c�digo de una unidad<li>1.4. Varios<li>C�mo convertir c�digo C en c�digo Delphi<li>2. El Lenguaje<li>C�mo acceder a la variable privada de una clase<li>C�mo acceder a m�todos protegidos (protected) de una clase<li>Qu� es el t�rmino Self y c�mo usarlo<li>2.1. Algoritmos<li>Calcular el d�gito de control de un EAN13<li>Calcular el d�gito de control de una cuenta bancaria<li>Calcular la letra del NIF seg�n el DNI<li>Calcular pesos moleculares<li>Generar palabras aleatorias<li>Validar c�digos ISBN<li>Validar el n�mero de CUIT (Argentina)<li>Validar un CIF<li>Validar un n�mero de la Seguridad Social<li>2.2. Tipos de datos<li>C�mo usar las excepciones<li>IF inmediatos<li>�C�mo obtener la direcci�n de un objeto?<li>2.2. Num�ricos<li>A�adir separador de millares a un n�mero<li>C�mo cambiar el separador decimal por defecto<li>C�mo convertir un n�mero en hexadecimal<li>C�mo transformar un real a un entero<li>Comparaci�n entre reales<li>Convertir un n�mero en letras<li>Elevar un real X a la potencia Y<li>�C�mo redondear un real?<li>2.2. Cadenas de car�cteres<li>Ap�strofes (o comilla simple) en una cadena<li>C�mo acceder aun car�cter de una cadena conociendo su posici�n<li>C�mo conocer la longitud y altura en pixels de un texto<li>C�mo encontrar una cadena dentro de otra<li>C�mo reemplazar una cadena dentro de otra<li>C�mo saber la longitud de una cadena<li>C�mo transformar una cadena de un car�cter en una variable de tipo Char<li>Convertir los car�cteres especiales de HTML<li>Hacer un Case con un string<li>Transformar una medida inform�tica en string<li>2.3. Compilaci�n<li>C�mo resolver el problema de las referencias circulares<li>Comprobar la versi�n de Delphi con las directivas de compilaci�n<li>Crear una ventana a trav�s de su nombre de clase<li>La compilaci�n condicional<li>Tipolog�a de los c�digos de error internos de Delphi<li>�Por qu� Delphi pide un .pas y yo s�lo tengo un .dcu?<li>2.4. Varios<li>�Qu� es la VMT?<li>3. Interficie<li>3.1. Aplicaci�n<li>3.1. Gesti�n de la ejecuci�n<li>C�mo evitar dos ejecuciones simult�neas de una aplicaci�n<li>C�mo evitar que se "congele" una aplicaci�n en un proceso largo<li>C�mo hacer una pausa en la aplicaci�n<li>C�mo pasar a primer plano una aplicaci�n instanciada por segunda vez<li>C�mo realizar un Splah Screen<li>C�mo realizar un Splah Screen transparente<li>C�mo recuperar los par�metros pasados a la aplicaci�n<li>Enviar un trozo de texto al depurador<li>3.1. La propia aplicaci�n<li>Agilizar la carga de tu aplicaci�n<li>A�adir un ejecutable dentro de otro<li>Cambiar la prioridad de la aplicaci�n<li>Capturar nuestras propias hotkeys<li>C�mo modificar el aspecto de los controles seg�n un estado<li>C�mo no mostrar el icono de un formulario en la barra de herramientas<li>C�mo personalizar la forma de un formulario<li>C�mo recuperar el n�mero de versi�n de la aplicaci�n<li>Compartir datos entre dos aplicaciones propias<li>Comprimir el ejecutable<li>Evitar el cierre de la pantalla con ALT+F4 o Close<li>Tener una sola instancia de una ventana hija en una aplicaci�n<li>3.1. Aplicaciones externas<li>Cerrar una aplicaci�n externa<li>Cerrar una aplicaci�n externa sabiendo el nombre de su ejecutable<li>C�mo ejecutar una aplicaci�n des de la nuestra<li>Lanzar y controlar una aplicaci�n exterior<li>Recuperar el texto mostrado en la barra de t�tulo de cualquier ventana<li>Saber si una aplicaci�n est� en ejecuci�n<li>3.1. La aplicaci�n y Windows<li>Ejecutar una aplicaci�n al arrancar Windows<li>Ejecutar una aplicaci�n en otro contexto de seguridad<li>Impedir la suspensi�n del equipo<li>Modificar el t�tulo mostrado en la barra de herramientas<li>Mostrar tantos botones en la barra de tareas como forms abra la aplicaci�n<li>Ocultar la aplicaci�n de la barra de tareas<li>Poner un icono en el SysTray<li>3.1. Aplicaci�n c�nsola<li>A�adir la informaci�n de la versi�n a una aplicaci�n c�nsola<li>Asociar un handle a un programa c�nsola<li>Colores en una aplicaci�n c�nsola<li>Determinar si la salida est�ndar est� redirigida<li>Esconder la ventana de una aplicaci�n c�nsola<li>Hacer un "clear screen" en una aplicaci�n c�nsola<li>Interceptar el final de un programa c�nsola<li>Pedir al usuario la pulsaci�n de una tecla<li>Usar las redirecciones dentro de una aplicaci�n c�nsola<li>�Qu� es una aplicaci�n c�nsola?<li>3.2. Componentes<li>3.2. Generalidades e instalaci�n<li>C�mo instalar un ActiveX<li>C�mo instalar un componente<li>Distribuir y instalar un control ActiveX para mi aplicaci�n<li>�Qu� es la CLX?<li>�Qu� es la VCL?<li>3.2. Varios<li>Adjuntar ficheros PDF en una aplicaci�n Delphi<li>Alinear a la derecha el contenido de un TControl (TEdit,...)<li>C�mo hacer un salto de linea<li>Dar el foco a un componente<li>Error de dsgnintf en Delphi 6 o Delphi 7<li>Modificar una propiedad por su nombre<li>Poner un CheckBox en un cuadro de di�logo<li>3.2. Creaci�n din�mica y b�squeda<li>A�adir un evento a un componente creado din�micamente<li>Crear din�micamente un componente visual<li>El par�metro Sender<li>Encontrar un componente sabiendo su nombre<li>Recorrer todos los componentes de un formulario<li>3.2. Componentes de la VCL est�ndar<li>3.2. El componente TComboBox y TListBox<li>A�adir barra de desplazamiento horizontal a un TListBox<li>A�adir columnas a un ListBox<li>Cambiar el ancho del desplegable<li>Desplegar un ComboBox por c�digo<li>Items de diferentes colores en un ComboBox<li>Items de diferentes colores en un ListBox<li>Ordenar un ListBox mediante Drag&Drop<li>Poner im�genes en los Items<li>Posicionarse en un ListBox por c�digo<li>3.2. El componente TStringGrid<li>Alineaci�n de texto en las celdas<li>Borrar una l�nea o culumna de un TStringGrid<li>Centrar el texto en las celdas<li>Dibujar im�genes en las celdas de un StringGrid<li>Exportar un StringGrid a Excel<li>Exportar un StringGrid a un fichero<li>Imagen de fondo en un StringGrid<li>Impedir la edici�n de una celda de un TStringGrid<li>Pintado de l�neas en un StringGrid<li>Selecci�n de texto en una celda de un TStringGrid<li>Tener retornos de carro en una celda de un TStringGrid...</ul>
Mi intencion es crear un "TreeView" de 4 niveles con la funcion recursiva colocada en este mismo post en formato "Lista" o sea <ul><li></li></ul> como coloco en le primer post, no logro cerrar las etiquetas (</li> y </ul>) o abrir cuando se trata de una categoria (<ul>) etc etc. Les dejo la Tabla:
Código MySQL:
Ver original
  1. CREATE TABLE `faqs` (
  2.   `id` int(11) NOT NULL auto_increment,
  3.   `lng_id` int(11) NOT NULL,
  4.   `id_rel` int(11) default '0', //Relacion
  5.   `is_title` tinyint(3) unsigned default '0', // si es titulo o no o mas bien categoria o no
  6.   `chapter` tinyint(4) NOT NULL, // No. Capitulo
  7.   `schapter` tinyint(4) default NULL, //No. Sub-capitulo
  8.   `sschapter` tinyint(4) default NULL, // No. Sub-Sub-Capitulo
  9.   `ssschapter` tinyint(4) default NULL, //No. Sub-Sub-Sub-capitulo
  10.   `titulo` varchar(150) character set utf8 NOT NULL,
  11.   `body` text character set utf8,
  12.   `autor` varchar(15) character set utf8 NOT NULL,
  13.   `autor_id` int(11) NOT NULL,
  14.   `autor_web` varchar(100) character set utf8 default NULL,
  15.   `creado` date default NULL,
  16.   `last_edition` date default NULL,
  17.   `last_editor` varchar(15) character set utf8 default NULL,
  18.   `last_editor_id` int(11) default NULL,
  19.   `edited_times` int(11) default '0',
  20.   `visitas` int(11) default '0',
  21.   `status` int(11) NOT NULL,
  22.   PRIMARY KEY  (`id`),
  23.   KEY `seccion` (`lng_id`),
  24.   KEY `relacion` (`id_rel`)
  25. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=259 ;

Espero me hayan entendido mejor.

Fleon XD