Categorías de PHP (árbol de categorías). Clase PHP para un trabajo conveniente y seguro con MySQL Conveniencia y brevedad del código de la aplicación

) Le mostré un ejemplo del uso de expresiones regulares para encontrar ciertas partes del código fuente de una página. Ahora aprenderemos cómo escribirlos usted mismo. Esta habilidad lo ayudará a escribir, borrar texto de fragmentos innecesarios, buscar las partes correctas en grandes volúmenes de texto, etc.

Fecha de publicación: 20.10.2013

Continuamos escribiendo un analizador de estadísticas de visitantes de liveinternet. Si alguien acaba de unirse a nosotros, entonces le aconsejo que comience con donde nos conectamos al servicio sin autorización. Allí aprendimos cómo obtener contenido de páginas abiertas que no están protegidas con contraseña. Pero, de hecho, el acceso a la mayoría de los sitios está cerrado, por lo que hay muy poco beneficio de un script que no sabe cómo iniciar sesión, como comprenderá. Pero no te preocupes, lo arreglaremos ahora.

Fecha de publicación: 08.10.2013

¡Buenas tardes, lectores! Es hora de conseguir un poco de práctica. Ya tienes los conocimientos suficientes para empezar a escribir guiones útiles que te facilitarán el trabajo. Uno de estos puede ser un analizador. Lo que es, lo describí en detalle por mi cuenta, así que si no lo sabes, te aconsejo que lo leas. Brevemente, la esencia del analizador es buscar y aislar la información necesaria de un texto grande. En el caso de Internet, lo más frecuente es extraer los datos requeridos de las páginas de los sitios. En nuestro caso, será Liveinternet. ¡Entonces vamos!

Fecha de publicación: 10/03/2013

Este artículo se centrará en una herramienta tan poderosa como cURL, así como en una biblioteca php que brinda acceso a esta herramienta: libcurl. ¿Para qué es todo esto? Para comunicarse con el servidor a través de protocolos de transferencia de datos, como http o ftp. El resto de los protocolos no son de especial interés para nosotros, si alguien quiere profundizar en este tema, entonces tendrá que buscar recursos en idioma inglés, y este artículo contendrá los conceptos básicos y ejemplos de uso.

Fecha de publicación: 24.11.2012

Fecha de publicación: 05.11.2012

Y ahora habrá una lección bastante grande, pero no complicada, sobre cómo trabajar con archivos en php. En primer lugar, ¿para qué sirven los archivos? Después de todo, puede almacenar todo en una base de datos MySQL o PostgreSQL o cualquier otra. Pero a veces hay tales tareas cuando el uso de la base de datos, con todo el procesamiento y la preocupación por la seguridad de la conexión, no es recomendable. Por ejemplo, necesita hacer un contador regular y antes de eso, no usamos una base de datos en nuestro proyecto. Entonces, ¿por qué deberíamos, por el bien de un pequeño contador, iniciar una base de datos y almacenar solo un par de líneas en ella? es mucho más fácil usar archivos. Además, a veces el alojamiento no admite bases de datos en absoluto, entonces los archivos generalmente siguen siendo la única salida.

Fecha de publicación: 04.11.2012

Siempre que permita que sus usuarios envíen texto a su sitio (nombre o cualquier otra información), debe tener cuidado. Debe asegurarse de no tener agujeros de seguridad en el sitio que los atacantes puedan usar para piratear. Si aún necesita recibir datos del usuario, asegúrese de usar la función htmlentities para evitar ejecutar código HTML o scripts que pueden ser dañinos y peligrosos.

Fecha de publicación: 04.11.2012

En esta lección, veremos técnicas para pasar datos entre formularios y páginas. Estos métodos son POST y GET. Hablaremos de cada uno por separado y con más detalle. En términos generales, es necesario para la comunicación entre formularios. Por ejemplo, completamos algunos campos en la página y necesitamos transferirlos a otra página para su procesamiento.

Fecha de publicación: 03.11.2012

De hecho, como ya habrás adivinado, el bucle do while es una versión ligeramente modificada del bucle while que vimos en tutoriales anteriores. Si recuerda cómo funciona el while normal, le resultará más fácil comprender el nuevo bucle. Repitamos: el cuerpo del bucle while se ejecuta si la condición es verdadera y no se ejecuta si no lo es, pero no se puede ejecutar ni una sola vez si la condición es falsa desde el principio. ¿Cómo funciona while?

Fecha de publicación: 03.11.2012

Imagine que tiene una matriz asociativa sobre la que desea iterar. PHP proporciona una manera fácil de usar cada elemento de una matriz a su vez utilizando la construcción Foreach.

Devuelve una matriz de objetos que contienen información de categoría.

Los parámetros que se pasan a esta función son muy similares a los parámetros que se pasan a la función wp_list_categories() y se pueden pasar como una matriz o como una cadena de consulta: type=post&order=DESC .

✈ 1 vez = 0.005625s = Muy lento| 50000 veces = 11.98s = despacio| PHP 7.1.11, WP 4.9.5

Uso

$categorias = get_categories($argumentos);

patrón de uso

$categorías = get_categories(array("taxonomy" => "category", "type" => "post", "child_of" => 0, "parent" => "", "orderby" => "name", " order" => "ASC", "hide_empty" => 1, "hierarchical" => 1, "exclude" => "", "include" => "", "number" => 0, "pad_counts" => falso, // vea la lista completa de parámetros en la descripción de la función http://wp-kama.ru/function/get_terms)); if($categories)( foreach($categories as $cat)( // Datos en el objeto $cat // $cat->term_id // $cat->name (Categoría 1) // $cat->slug (rubrika - 1) // $gato->term_group (0) // $gato->term_taxonomy_id (4) // $gato->taxonomía (categoría) // $gato->descripción (Texto descriptivo) // $gato-> padre (0) // $cat->count (14) // $cat->object_id (2743) // $cat->cat_ID (4) // $cat->category_count (14) // $cat-> category_description (Texto de descripción) // $cat->cat_name (Categoría 1) // $cat->category_nicename (rubrika-1) // $cat->category_parent (0) ) ) taxonomía (línea) El nombre de la taxonomía a procesar. Añadido desde la versión 3.0.
Valor predeterminado: "categoría" escribe (línea)
  • post - categorías de post (predeterminado);
  • enlace - secciones de enlaces.
    Predeterminado: "publicar"
niño de (línea) Obtenga categorías secundarias (incluidos todos los niveles de anidamiento) de la categoría especificada. El parámetro especifica el ID de la categoría principal (la categoría cuyas categorías anidadas desea mostrar). padre (número) Obtiene las categorías cuya categoría principal es igual al parámetro de ID especificado. La diferencia con child_of es que se mostrará un nivel de anidamiento.
Defecto: "" ordenar por (línea)

Ordenar los datos recibidos según ciertos criterios. Por ejemplo, por el número de publicaciones en cada categoría o por el nombre de la categoría. Están disponibles los siguientes criterios:

  • ID: clasificación por ID;
  • nombre - ordenar por nombre (predeterminado);
  • slug - clasificación por alt. nombre (babosa);
  • contar - por el número de entradas en la categoría;
  • term_group - por grupo.

Predeterminado: "nombre"

ordenar (línea)

La dirección de clasificación especificada en el parámetro "orderby":

  • ASC: en orden, de menor a mayor (1, 2, 3; a, b, c);
  • DESC - en orden inverso, de mayor a menor (3, 2, 1; c, b, a).

Valor predeterminado: "ASC"

Hide_empty (lógico)

Ya sea para obtener o no categorías vacías (sin entradas):

  • 1 (verdadero) - no recibir vacío,
  • 0 (falso) - quedar vacío.

Valor predeterminado: verdadero

Jerárquico (lógico) Si el parámetro se establece en verdadero, el resultado incluirá categorías secundarias vacías cuyas categorías secundarias tengan entradas (no vacías).
Valor predeterminado: verdadero excluir (cadena/matriz) Excluye cualquier categoría de la lista. Debe especificar los ID de categoría separados por comas o en una matriz. Si se especifica este parámetro, se anulará el parámetro child_of.
Defecto: "" incluir (cadena/matriz) Enumere solo las categorías especificadas. Debe especificar los ID de categoría separados por comas o en una matriz.
Defecto: "" número (número) Límite. El número de categorías a recuperar. De forma predeterminada, sin restricciones: se recuperarán todas las categorías. pad_counts (lógico) Si pasa verdadero, entonces el número que muestra el número de entradas en las categorías principales será la suma de sus propias entradas y las entradas de las categorías secundarias.
Predeterminado: falso

Ejemplos

#1 lista desplegable

Para crear una lista desplegable de categorías, podemos usar otra función especial wp_dropdown_categories() :

wp_dropdown_categories(array("hide_empty" => 0, "name" => "category_parent", "orderby" => "name", "selected" => $category->parent, "hierarchical" => true, "show_option_none" => __("Ninguno")));

sin embargo, con este enfoque, perderemos cierta flexibilidad al configurar la lista, ya que terminaremos con una lista completamente formada.

Por lo tanto, en algunos casos será más lógico crear una lista desplegable usando la función obtener_categorías(). Aquí hay un ejemplo (suponiendo que queremos mostrar las subcategorías (hijos) de la categoría 10):

#2 Lista de categorías y su descripción

Este ejemplo nos mostrará cómo enumerar enlaces a categorías, donde inmediatamente después de cada enlace habrá una descripción de la categoría (especificada al crear/editar una categoría):

"nombre", "pedido" => "ASC")); foreach($categorías as $categoría)( echo "

Categoría: term_id) . ""título="" . sprintf(__("Ver todas las publicaciones en %s"), $categoría->nombre) . "" " . ">" . $categoría->nombre."

"; eco "

Descripción:". $categoría->descripción".

"; eco "

Recuento de publicaciones: ". $categoría->recuento".

"; } ?>

notas

  • Ver: get_terms() Tipo de argumentos que se pueden cambiar.

Lista de cambios

Desde la versión 2.1.0 Introducido.

El código obtener categorías: wp-incluye/categoría.php WP 5.3.2

"categoría"); $argumentos = wp_parse_args($argumentos, $predeterminados); /** * Filtra la taxonomía utilizada para recuperar términos al llamar a get_categories(). * * @since 2.7.0 * * @param string $taxonomy Taxonomía para recuperar términos. * @param array $args Una matriz de argumentos. Ver get_terms(). */ $args["taxonomy"] = apply_filters("get_categories_taxonomy", $args["taxonomy"], $args); // Compatibilidad inversa si (isset($args["type"]) && "link" == $args["type"]) ( _deprecated_argument(__FUNCTION__, "3.0.0", sprintf(/* traductores: 1: " type => link", 2: "taxonomy => link_category" */ __("%1$s está en desuso. Use %2$s en su lugar."), " tipo => enlace", "taxonomía => link_category")); $args["taxonomy"] = "link_category"; ) $categories = get_terms($args); if (is_wp_error($categories)) ($categories = array(); ) else ($categories = (array ) $categorías; foreach (array_keys($categorías) as $k) ( _make_cat_compat($categorías[ $k ]); ) ) return $categorías; )

Para cada publicación y entrada, el usuario de wordpress puede establecer uno o más encabezados (categorías). Esta función le permite agrupar publicaciones que tienen un significado cercano y permite que los visitantes lean y vean solo los encabezados que les gustan. Por ejemplo, cuando creé mi blog principal Tod's Blog, iba a escribir sobre todos los matices de Internet, desde el diseño hasta la programación. Supongamos que una persona vino de un motor de búsqueda a un artículo sobre wordpress y le gustaría leer aún más sobre el sistema: tendría que hurgar en los archivos, reutilizar la búsqueda o ver todas las publicaciones seguidas. Por supuesto, todo esto podría haberse evitado yendo a una categoría especial llamada wordpress. O, por ejemplo, para aquellos a los que solo les interese el diseño, una sección de blog podría ser interesante.

Si te fijas bien en la cabecera del blog, puedes ver una especie de menú donde las cabeceras de wordpress actúan como secciones del proyecto. En cuanto a mí, esta es una forma bastante conveniente y visual de dividir el tema de las entradas.

En el centro de la página, verá un formulario para agregar una nueva categoría. Aquí debe especificar su nombre (nombre), etiqueta (parte del enlace de URL para CNC), categoría principal (si corresponde) y también puede establecer una breve descripción. La categoría principal le permite crear secciones en wordpress con varios niveles de anidamiento; por ejemplo, para la categoría "Wordpress" en algún blog de TI, puede agregar las mismas plantillas, complementos, etc.

En el lado derecho de la página Categorías, se muestran todas las categorías de wordpress, con la opción de editarlas o eliminarlas. Para realizar acciones, simplemente mueva el cursor del mouse sobre el nombre de una categoría, después de lo cual verá un pequeño menú emergente.

Al editar, verás en uno de los bloques de información uno donde puedes seleccionar una o más categorías para el artículo. Simplemente marque las casillas junto a los nombres que desee.

Aquí también puede agregar nuevos encabezados haciendo clic en el enlace correspondiente. El único inconveniente de este mecanismo es que al crear, solo puede especificar el nombre y la categoría principal, mientras que para configurar el campo de etiqueta, deberá ir a la sección "Encabezados" y editar la información allí.

Además, puede editar categorías para publicaciones de blog a través de su lista en el menú Publicaciones - Editar. Allí, cuando pases el cursor sobre una publicación en particular, verás el enlace “Edición rápida”. Haga clic en él y vea el formulario para editar:

Aquí puede cambiar categorías, etiquetas y toda la información adicional sobre el artículo. La cosa es muy conveniente + funciona sin recargar la página.

función wp_list_categories para la categoría de wordpress

Por tradición, considero no solo el tema de trabajar con ciertos elementos del sistema, sino también darle funciones especiales a las plantillas. Justo como hablé. Entonces, para mostrar una lista de categorías con enlaces a ellas, use wp_list_categories. Tiene varios argumentos:

  • show_option_all: muestra un enlace a todas las categorías si se selecciona la lista como estilo de visualización.
  • orderby: clasificación de categorías por ID, nombre (nombre), etiqueta (slug), número de publicaciones (recuento).
  • orden - orden de clasificación (ASC - ascendente, DESC - descendente).
  • show_last_updated - Muestra la fecha de la última actualización.
  • estilo - estilo de diseño: lista (lista), división a través
    (ninguna).
  • show_count: muestra el número de publicaciones en la categoría.
  • hide_empty: oculta categorías vacías donde no hay publicaciones.
  • use_desc_for_title: use la descripción para el atributo de título en el enlace.
  • child_of: muestra solo categorías para la rúbrica principal dada.
  • feed: muestra un enlace al feed para las categorías.
  • feed_type - tipo de alimentación.
  • feed_image: una imagen para el icono de rss.
  • excluir: excluye categorías de la lista, mientras que el parámetro child_of se desactiva automáticamente.
  • excluir_árbol: exclusiones de toda la rama de categoría.
  • include es un parámetro inverso que incluye solo las categorías de wordpress especificadas en la lista.
  • jerárquico - parámetro para mostrar subcategorías.
  • title_li - título de la lista de categorías.
  • number - el número de categorías a mostrar (si hay demasiadas).
  • echo: muestra las categorías; el valor predeterminado es True.
  • profundidad: especifica el número de niveles para que se muestren las subcategorías.

Finalmente, daré una serie de ejemplos del uso de wp_list_categories. Primero, la variante del encabezado de este blog.

"hide_empty=1&exclude=1&title_li=&orderby=count&order=desc&use_desc_for_title=0") ; ?>

Aquí, se establece la visualización de categorías ocultas, la categoría con se excluye de la lista, una línea vacía para el título del bloque, ordenando por el número de artículos y por disminución (es decir, tengo la mayoría de los artículos en la sección). El último argumento no sustituye la descripción de la categoría en el título del enlace.

Bueno, un par de situaciones más simples. Uso de exclusiones e inclusiones de categorías.

Si tienes algo que agregar sobre los encabezados y categorías de wordpress, escríbelo en los comentarios.

actualizar: Es posible que también necesite un pequeño truco para . En wordpress, de forma predeterminada, el texto del título está definido, algo así como "ver todas las publicaciones en la categoría...", puede dejar el nombre de la categoría en su lugar: lea el artículo en el enlace de arriba.

Hoy nuestro objetivo es crear una estructura jerárquica de categorías. Es importante para nosotros que sea conveniente almacenar categorías y que sea fácil mostrarlas donde las necesitemos.

A veces lo simple parece complicado, es por eso que mostraré algunos fragmentos de código que espero te sean útiles para implementar categorías de php en forma de árbol.

Por lo tanto, la estructura debe consistir en la identificación de la categoría (id), el nombre de la categoría (nombre) y, por supuesto, la identificación de la categoría principal (parent_id). En MySQL se ve así:

CREAR TABLA SI NO EXISTE `categoría` (`id` int(10) sin firmar NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `parent_id` int(11) NOT NULL, PRIMARY KEY (`id`)) MOTOR =INNODB CONJUNTO DE CARACTERES POR DEFECTO=utf8 AUTO_INCREMENTO=0;

Estructura de tabla mínima y comprensible para almacenar categorías.

INSERTAR EN `categoría` (`id`, `nombre`, `parent_id`) VALORES (1, "Teléfonos y tabletas", "0"), (2, "Automóviles", "0"), (3, "Samsung ", "1"), (4, "Apple", "1"), (5, "LG", "1"), (6, "Ford", "2"), (7, "Lexus", "2"), (8, "BMW", "2"), (9, "Galaxy Tab 4", "3"), (10, "Galaxy S6", "3");

Donde parent_id=0, esta categoría no tiene categoría principal.

Todo es claro y simple aquí. Ahora pasemos a enumerar las categorías. Pero para la salida correcta de la lista, primero necesitamos obtener la lista completa de categorías de php, y solo entonces, usando la recursividad, formamos nuestro árbol. La siguiente función es obtener esta lista:

Función get_cat() ( // consultar la base de datos $sql = "SELECCIONAR * DE categoría"; $resultado = mysql_query($sql); if(!$resultado) ( return NULL; ) $arr_cat = array(); if( mysql_num_rows ($resultado) != 0) ( //Para($i = 0; $i< mysql_num_rows($result);$i++) { $row = mysql_fetch_array($result,MYSQL_ASSOC); //Формируем массив, где ключами являются адишники на родительские категории if(empty($arr_cat[$row["parent_id"]])) { $arr_cat[$row["parent_id"]] = array(); } $arr_cat[$row["parent_id"]] = $row; } //возвращаем массив return $arr_cat; } }

//obtener la matriz del catálogo $resultado = get_cat();

Ahora necesitamos una función con recursividad.

Función view_cat($arr,$parent_id = 0) ( //Condiciones de salida de la recursión if(empty($arr[$parent_id])) ( return; ) echo "

    "; // recorre la matriz y muestra for($i = 0; $i< count($arr[$parent_id]);$i++) { echo "
  • " .$arr[$parent_id][$i]["name"].""; //recursión: compruebe si hay categorías secundarias view_cat($arr,$arr[$parent_id][$i]["id "]); eco"
  • "; ) eco "
"; }

Ahora solo queda mostrar el directorio en la pantalla usando la función recursiva

View_cat($resultado);

Y en general, eso es todo. De esta forma podemos obtener un completo árbol de categorías con infinitas subcategorías.

Entonces, para empezar, describiré con qué trabajaremos y qué necesitaremos.
Sistema: PHP 5 y superior, mySQL 4 y superior
clases de ayuda: dbsql.class.php (clase de base de datos)
Clase de categoría anidada: classTreeCategory.php (directamente la clase principal, su listado y explicaciones se dan a continuación.

Cree una tabla en la base de datos con la siguiente estructura:

Ver código MySQL

Esta tabla contiene un campo. IDENTIFICACIÓN- número de serie de la categoría, vaina- tiene un valor de cero para las categorías de primer orden o el ID de la categoría principal, nombre- nombre de la categoría.

Un ejemplo de la clase, que muestra las categorías como una lista con subcategorías:

Ver código PHP

include("dbsql.class.php") ; include("classTreeCategory.php" ); $DB = new DB_Engine("mysql" , $configuraciones [ "dbHost" ] , $configuraciones [ "dbUser" ] , $configuraciones [ "dbPass" ] , $configuraciones [ "dbName" ] ); // conectarse a la base de datos, especificando los datos de acceso$categoría = new TreeCategory ($DB); // pasar a la clase de categoría, el objeto de trabajo con la base de datos$categoria -> tabla = "categoria" ; // nombre de la tabla en la base de datos con categorías$matriz = $categoría -> getCategory() ; // obtener todas las categorías de la base de datos en forma de una matriz de varios niveles, ordenada y anidada ya en el orden que necesitamos$categoría -> outCategory ($array, "opción"); // preparando la salida de categorías (formando HTML), pasando una matriz con categorías echo $categoria -> html ; // categorías de salida como HTML

Como puede ver en el ejemplo anterior, todo es extremadamente simple, creamos un nuevo objeto $categoría, establecemos con qué tabla de base de datos trabajaremos: 'categoría', luego obtenemos de la tabla una lista de todas las categorías ya formateadas como una matriz y descompuesto en un orden jerárquico, teniendo en cuenta todas las subcategorías. luego pasamos la matriz al método outCategory(), que genera un código HTML listo para usar, que solo queda para mostrarlo en el navegador.

El método outCategory(), como podemos ver, toma dos parámetros @array y @string en el primer parámetro una matriz con todas las categorías, y en el segundo una cadena que contiene un valor opción o mesa, este valor especifica qué tipo de código HTML generar.
Sentido opción

Ver código HTML

Para insertar el código HTML dado en el campo de selección de cualquier formulario.

Sentido mesa- genera el siguiente código HTML:

Ver código HTML

Este código HTML es útil para pegarlo en una tabla que muestra todas las subcategorías de nuestras categorías.

La clase también tiene los siguientes métodos:
eliminarElemento($id);- elimina una categoría, a pesar de las anidadas
delCategory($matriz, $id);- elimina una categoría con todas las subcategorías anidadas, $array - una matriz con todas las categorías preparadas por el método $category->getCategory(), $id - número de la categoría que se eliminará
añadir artículo();- se debe llamar a este método si desea agregar una categoría, mientras que este método lee los valores de los datos transmitidos por el método POST, es decir de la matriz $_POST.
$nombre=$esto->PHP_slashes(strip_tags($_POST['nombre'])); // nombre de la categoría
$podcat=intval($_POST['podcat']); // ID de la categoría principal, si se especifica 0, la categoría estará en la raíz.
actualizar elemento (); - similar al método anterior, excepto que este método actualiza la categoría, su nombre y el nivel de anidamiento.

tabla="categoría"; // solicitud para seleccionar una lista de categorías, nombre de la tabla * $categoría->outCategory($categoría->getCategory()); // preparar la salida de la categoría (solicitar una matriz de categorías) * echo $categoría->html; // mostrar categorías en nombre HTML * */ /** * Volcar la tabla en la que se está trabajando * * DROP TABLE IF EXISTS `category`; * CREATE TABLE `category` (* `id` int(11) NOT NULL auto_increment, * `podcat` int(11) NOT NULL, * `name` varchar(255) NOT NULL, * PRIMARY KEY (`id`), * CLAVE `id` (`id`) *) MOTOR=MyISAM DEFAULT CHARSET=utf8; * */ class TreeCategory ( /** * Cadena de consulta de la base de datos */ var $table; /** * Interfaz de la base de datos */ var $DB; /** * Matriz de categorías con subcategorías anidadas */ var $arrayCat; / ** * Cuenta automáticamente el número de guiones antes del nombre de la categoría cuando se muestra */ var $countPodcat; /** * Código HTML para mostrar categorías con subcategorías */ var $html; /** * Obtén la interfaz para trabajar con la base de datos y ponerlo en una variable local */ function __construct($DB) ( $this->DB=$DB; $this->component=$_GET["component"]; ) /** * Obtiene una lista de categorías, ordena y lo coloca en una matriz con matrices anidadas, etc. * @return categoría de matriz */ function getCategory () ( $all = $this->DB->getAll("SELECT * FROM `($this->table)` ORDER BY `id` ASC"); $ruta = matriz(); if(contar($todos)>0) ( foreach($todos como $elemento): if($elemento["podcat"]==0)$ordenar[ $elemento[ "id"]]=$elemento; if($elemento["podcat"]>0) ( if(isset($ruta[$elemento["podcat"]])) ( $str="$sort" ; foreach ($ruta[$elemento["podcat"]] as $elemento): $rep =$elemento["podcat"]; $str.="[$pitem]"; endforeach; $str.="[($elemento["podcat"])]"; $str.="[($elemento["id"])]"; $str.="=$elemento;"; evaluar ($ cadena); foreach($ruta[$elemento["podcat"]] as $pitem): $ruta[$elemento["id"]]=$pitem; endforeach; $ruta[$elemento["id"]]=$elemento["podcat"]; ) else ( $ordenar[$elemento["podcat"]]["sub"][$elemento["id"]]=$elemento; $ruta[$elemento["id"]]=$elemento["podcat" ]; ) ) endforeach; ) $this->arrayCat=$sort; devuelve $this->arrayCat; ) /** * Imprime las categorías, coloca el HTML renderizado en $this->html * @param array Array con categorías y subcategorías anidadas * @param string Tipo de HTML generado para salida, opción o tabla */ function outCategory(&$ arrayCat, $type="option", $idSel=0) ( foreach($arrayCat as $sub) ( $this->countPodcat++; $this->outItem($sub, $type); if(!empty($sub [" sub"]))$this->outCategory($sub["sub"], $type, $idSel); $this->countPodcat--; ) ) /** * Método auxiliar para preparar código HTML * @ matriz param Matriz con categoría * @param string Tipo de código HTML generado para salida, opción o tabla */ function outItem($sub, $type="option", $idSel=0) ( for($i=0;$icountPodcat ;$i++) ($fuera. ="-"; ) if($idSel==$sub["id"])$se="seleccionado"; más $se=""; if($type=="option")$this->html.=" ($out) ($sub["name"]) "; if($type=="table")$this->html.= ($out) ($sub["name"]) HTML; ) function delCategory(&$a_tree,&$id=0) ( foreach($a_tree as $sub) ( if($sub["id"]$id and isset($sub["sub"]))$this- >delCategory($sub["sub"],$id); if($sub["id"]==$id) ( $sql="ELIMINAR DE ($esta->tabla) WHERE id = "$id" LIMIT 1"; $this->DB->execute($sql); if (isset($sub["sub"])) $this->delCategory_process($sub["sub"]); ) ) ) function delCategory_process (&$a_tree) ( foreach($a_tree as $sub) ( $sql="ELIMINAR DE ($this->table) WHERE id = "($sub["id"])" LIMIT 1"; $this-> DB->execute($sql); if(isset($sub["sub"]))$this->delCategory_process($sub["sub"]); ) ) función updateItem() ( $name=$this- >PHP_slashes(strip_tags($_POST["name"])); $podcat=intval($_POST["podcat"]); $id=intval($_POST["id"]); $sql="ACTUALIZAR `( $this->table)` SET `name` = "($name)",`podcat` = "($podcat)" WHERE `id`="($id)" LIMIT 1; "; $this->DB ->ejecutar($sql); ) función addItem() ( $nombre=$esto->PHP_slashes(strip_tags($_POST["nombre"])); $podcat=intval($_POST["podcat"]); $ id=intval($_POST["id"]); $sql="I NSERT INTO `($this->table)` (`id`,`podcat`,`name`) VALORES ("", "$podcat", "$nombre");"; $esto->BD->ejecutar($sql); ) function deleteItem($id) ( $id=intval($id); $sql="DELETE FROM `($this->table)` WHERE `id` = "($id)" LIMIT 1"; $DB- >ejecutar($sql); encabezado("Ubicación: ?component=($este->componente)"); ) función PHP_slashes($cadena,$tipo="agregar") ( if ($tipo == "agregar") ( if (get_magic_quotes_gpc()) ( return $string; ) else ( if (function_exists("addslashes")) ( return addedlashes($string); ) else ( return mysql_real_escape_string($string); ) ) ) else if ($type == "strip") ( return stripslashes($string); ) else ( die("error en PHP_slashes (mixto, agregar | strip)"); ) ) )

Toda la clase se escribió en una hora y, por supuesto, tiene fallas, pero todo esto tiene arreglo. Su uso es recomendable con fines educativos, aunque por cierto, habiéndolo terminado un poco, puedes incrustarlo en cualquier sistema y disfrutar de su trabajo)).

Le agradecería que en los comentarios ofreciera sus propias opciones para resolver este problema: organizar categorías de un nivel de anidamiento infinito.