drupal-header

Extender taxonomías en Drupal 6

Supongamos que tenemos nuestro listado de taxonomías y lo que necesitamos es poder adjuntarle campos adicionales como si de CCK se tratara. En este caso una descripción adicional para mostrar al publico.

Para ello necesitaríamos extender la cantidad de información relacionada a esta taxonomía y ademas tener la posibilidad de hacer la carga dicha descripción por algún lado.

La información relacionada vamos a guardarla en una nueva tabla en la que el id de la misma este relacionada con el id de la taxonomía que vamos a modificar:

Ahora bien, el punto que he seleccionado para ofrecer la posibilidad de extender una taxonomía es lógicamente la de creación/edición de la misma. Parece una tontería que aclare algo tan obvio pero no se olviden que hay mas formas de encontrar solución a estos asuntos.

Entonces para agregar un field nuevo a la pantalla de administración de una taxonomía tenemos que alterar el formulario de la misma por medio del hook_form_alter(). En este caso usamos un alter especifico:

Ahora necesitamos poder tomar los datos rellenados en el formulario que hemos extendido y guardarlos en nuestra tabla. Para ello vamos a usar el hook_taxonomy():

Bien, ya tenemos todo lo que necesitamos. lo único que hace falta es probar nuestro código. Para facilitar un poco el tramite les dejé un modulo que pueden descargar a continuación con el código que estuvimos creando recién para que lo habiliten y prueben en sus instalaciones de drupal.

Descargar

Van a poder ver que al crear o editar una taxonomía se van a encontrar el textarea que estuvimos trabajando. Y si escriben información en este campo se pueden ir a la base de datos en la tabla que especificamos antes para verificar que efectivamente la información relacionada se esta guardando.

De acá en mas solo queda divagar con las posibilidades que ofrece esta técnica: Imágenes, videos, desplegables…. podes hacer verdaderas virguerías si te hace falta.

7 Comments

  • William 14/06/2010

    Hola, muchas gracias por esta información, me ha sido muy util.
    Solo me falta un detalle y quería saber si me puede ayudar…
    Necesito que este campo aparezca en la pantalla de visualización del catalogo.

    Como hago para imprimirlo en pantalla.??
    Gracias

    • Capy 14/06/2010

      Hola, no se a que te referís cuando decís catalogo, pero puedo decirte como usar el campo extra que se crea en el código del tutorial.

      Siempre y cuando tengas disponible el tid (id del termino) disponible podes cargar un objeto de la información extendida de la siguiente forma:

  • William 15/06/2010

    Ok tienes razon, no me di a entender, estoy usando Ubertcart para un catalogo de productos.

    En la pagina principal de las categorias necesito una descripcion ya que solo aparece La imagen, el nombre y las subcategorias.

    Aqui precisamente: http://enersyscr.com/catalog/1

    Lo que no se es que tengo que modificar para que aparezca el campo con la descripcion ahi.

    En caso de que pueda ayudarme se lo agradecería bastante.

    Saludos.

    • Capy 16/06/2010

      La verdad es que nunca usé Ubercart. Miré la pagina que etas haciendo y veo que todo lo que sea /catalog/x es como un view o algo asi. en todo caso deberiamos ver que es lo que se dibuja bajo esa URL para saber por donde podemos tocar.

      Al margen de eso. ¿estas programando algo o estas mas bien configurandolo?. Pregunto porque si lo que estas haciendo es configurar en lugar de programar, esto no te va a servir.

      • Trixie 22/11/2011

        What I find so inteestring is you could never find this anywhere else.

  • William 19/06/2010

    Listo ya lo conseguí, hay que agregar este codigo en la función function THEME_uc_catalog_browse

    La palabra THEME cambiarla por el nombre del tema que esté usando.

    Toda la función debe ir copiada en el template.php del tema que se está usando.

    //Este codigo despliega cada categoria con imagen nombre y detalle
    $cell_link = $image .’‘. l($child->name, uc_catalog_path($child)) . ‘ - ‘ . l($child->description, uc_catalog_path($child)) .’‘;
    if (variable_get(‘uc_catalog_show_subcategories’, TRUE)) {
    $cell_link .= “”. implode(‘, ‘, $grandchildren) .”n”;
    }
    $child_list[] = $cell_link;

  • Rodolfo 29/10/2010

    Hola amigo, soy nuevo en drupal, al menos en cuestiones avanzadas, estoy intentando hacer algo parecido a un catalogo de productos, con posibilidad de filtrar los productos por varios criterios, ejemplo: tipo, pais, marca, etc, y quiero que el listado de productos se haga en primer lugar por un vocabulario de taxonomia, donde al seleccionar en un menu desplegable formado por ese vocabulario un termino, me muestre un listado de productos que pertenecen al mismo pero que me permita a ese listado hacer los refinamientos o filtrados que te comente arriba; por tipo, pais, marca, etc. Si trabajo con el módulo taxonomia menu, consigo que se muestre el listado de productos del termino seleccionado, pero no me da la posibilidad de hacer los filtrados que deseo. No se si me hago entender mucho, este sitio, hace algo similar a lo que quiero hacer: http://www.alibaba.com/
    Cuando seleccionas en el menú lateral izquiero:
    Agriculture/cigarettes se te muetra un listado de productos que perteneces al termino cigarettes y con posibilidad de refinar la busqueda por varios criterios, si comprendes lo que te explico y tienes alguna sugerencia de a donde debo inclinar mi atención para lograrlo te lo agradeceria mucho. Gracias de antemano

:).