CCK. El Kit de Construcción de Contenidos

Suponga que necesita hacer un sitio para video club. Probablemente tenga que subir Videos. Cada video tendrá un título, un director, una lista de actores, un género, tal vez una imagen y una pequeña descripción. Dependiendo de la complejidad del sitio tal vez se puedan ver todas las películas en las que participó un determinado actor, o que dirigió un director.

Para todos aquellos que conozcan un poco de diseño de sistemas automáticamente pensaran al video como algún tipo de entidad con atributos. Éstos atributos serán de un tipo determinado, textos, imágenes, números, etc.

La implementación de este conjunto de características puede terminar en la creación de varias tablas, funciones para cargas y edición de estos datos, y todo lo que se relacione con el negocio en cuestión.

Hace muchos años, hacer un sitio para este tipo de situaciones, incluso utilizando Drupal, requería programar toda esta funcionalidad. Pero entonces, alguien tuvo una idea.

Un poco de historia:

En los primeros meses del año 2004, un desarrollador llamado Jonathan Chaffer creó un módulo llamado Flexinode.

Su función principal era permitirle a los “no programadores” crear sus propios tipos de nodos. Por ese entonces, instalar un sitio con Drupal permitía crear Historias y Páginas, y cualquier otro tipo de nodo solo podía ser creado si un módulo así lo indicaba.

Era claro que la flexibilidad de este sistema solo satisfacía a un grupo limitado de usuarios. Y así nació flexinode.

Algunos años más tarde John VanDyk creaba el Kit de Construcción de Contenidos (que actualmente mantienen y mejoran decenas de programadores). Algo similar a flexinode pero más, valga la redundancia, flexible.

El concepto:

El Kit de construcción de contenidos es un conjunto de módulos, como base de todo se encuentra el módulo content que se encarga de gestionar a todos los demás.

Básicamente lo que permite CCK es crear un tipo de nodo personalizado. El ejemplo del video citado al inicio del artículo podría ser un tipo de contenido, y cada atributo del mismo (género, director, actores, imagen de tapa) un campo.

CCK además del módulo content, incluye una serie de submódulos que permiten la creación de campos. Un tipo de contenido puede tener ninguno, uno o muchos campos.

Los campos generalmente se agrupan por el tipo de datos que pueden contener. Por ejemplo, el modulo text incluido en el paquete CCK permite crear campos que manejen textos. Un simple campo de texto, un texto de varias lineas, una lista de campos de texto son todos gestionados por el módulo text.

Módulos del paquete CCK

Con el tiempo, otros desarrolladores comenzaron a programar módulos que interactuaban con CCK dándole la posibilidad al diseñador de crear tipos de contenidos realmente flexibles.

La práctica.

En un sitio recién instalado con Drupal (Versiones 4, 5 o 6) se pueden observar dos tipos de contenidos ya creados: Story y Page. Es importante aclarar que el concepto de tipo de contenido ya existe antes de CCK, la ventaja de CCK es que permite crear nuestros própios tipos de contenido.

CCK agrega la opcion de crear tipos de contenido

En cada campo de un tipo de contenido se distinguen dos partes.

Por un lado se encuentra el atributo Field: Esto le indica a CCK que tipo de campo quiero crear. Un campo que almacenará imágenes, o fechas, o números o textos.

Fields en cck

Por otro lado, cada campo tiene una serie de Widgets: Los widgets son los diferentes modos de visualizar y trabajar con un campo. Por ejemplo, para un campo que almacene fechas, puede utilizarse un calendario tipo popup, o tres casilleros para rellenar con mes, día y año.

Widgets en cck

Cada campo además puede contener uno o más valores. Esto significa que si un video tiene varios actores, no necesito crear un campo por cada actor a almacenar. Solo tengo crear un tipo de campo que almacene textos, en indicar cuantos valores desean en la opción Number of Values.

Cantidad de valores que puede almacenar un mismo campo

Cuantos que son!:

Es claro que la posibilidad de crear tipos de contenidos personalizados disparó el desarrollo de distintos tipos de campos.

En drupal.org se pueden encontrar más de 200 módulos relacionados de alguna forma u otra con CCK.Los más conocidos son los incluidos en el módulo CCK: campos de texto, campos numéricos, referencias a nodos y a usuarios.

Módulos relacionados con CCK

Éstos dos últimos permiten relacionar objetos de distintos tipos, por ejemplo si un actor fuese un tipo de contenido, y un video otro, un video podría contener una referencia a un nodo del tipo actor.

Por otro lado existen los campos de tipos más complejos:

Imagefield es uno de los más populares, permite adjuntar imágenes a los tipos de contenidos, y mostrarlas de muchas formas.

Link y email son dos campos también muy utilizados, el primero permite crear enlaces web, el segundo, enlaces de correo electrónico. Además email permite crear un formulario de contacto por cada enlace creado, aquí se ve claramente la flexibilidad que implica usar CCK.

Algunos tipos más avanzados incluyen el manejo de videos, audio, mapas, archivos. Seguramente encontrará el módulo apropiado para su necesidad. Y sino, recuerde, puede programarlo.

Campo File Field, para adjuntar archivos a los nodos

Y por supuesto el módulo Date, uno de los módulos más complejos con un API propia que permite hacer maravillas en lo que a fechas se refiere.

Más flexibilidad, sí claro:

Cada campo, además de presentar sus widgets, permite definir como se va a mostrar en un nodo. Por ejemplo, puede ser que a usted no le interese mostrar un determinado campo en el teaser (vista resumen de un nodo), puede definirlo desde la sección Display Fields. También puede definir donde se colocará la etiqueta de ese campo. O incluso si se mostrará dicha etiqueta.

Sección Display Fields

Además, otros módulos pueden definir e interactuar con los submódulos que generan campos. Un ejemplo claro es Imagecache, este sistema permite cambiar el tamaño de una imagen, sin la intervención de un usuario.

Por último, el módulo Content Permissions. Incluido en CCK 2.x y disponible para CCK 1.x como un paquete aparte, permite definir que usuarios pueden ver, o editar cada uno de los campos de un tipo de contenido.

Como se puede observar entonces, CCK es uno de los módulos que hacen que Drupal sea como sea. Intente imaginar un sitio sin CCK, se puede, pero, no llegará muy lejos.

Lo que viene.

Muchas personas consideraron que los campos no tendrían que estar limitados solo a los nodos. Por ejemplo, ¿Porqué una taxonomía no puede tener algún tipo de campo, como por ejemplo una imagen?. O más simplemente, el apellido de un usuario. ¿Porque no crear simplemente un campo en los usuarios para albergar este valor?

La buena noticia, es que dentro de poco esto va a ser posible. Con la venida de Drupal 7, una de las mejoras más importantes es la incorporación de los Fields al núcleo de Drupal. Esto, que llevó, y aún al momento de escribir estas lineas, lleva, mucho trabajo, va a permitir el uso de campos no solo en Nodos, sino en Usuarios, Taxonomías, y lo que sea que los acepte.

Si habrá sido importante esta decisión que la comunidad de Drupal donó más de 8000 dólares para pagar el hospedaje para que los desarrolladores encargados de implementar estas nuevas funcionalidades puedan reunirse y trabajar juntos.

Seguramente será un cambio fenomenal en las posibilidades que brinde Drupal a la hora de diseñar sitios webs. Por ahora, solo se puede esperar, y ayudar a seguir construyendo Drupal 7.

Te invito a leer también...

Compartir este material en...

Comentarios

Hola:

Felicitaciones por la pagina. Aunque, a este articulo le falta un poco de claridad. Donde encuentro todos esos widgets que vos pones en la imagen, ya que a mi solo me aparecen 2.

Seria bueno que en los temas hubieran ejemplos concretos, que ademas de explicarnos que funciona, nos muestre un resultado empirico de base par seguir inspeccionando.

Saludos

Hola Martín:

Ante todo, muchas gracias por tu comentario.

Cada módulo que interactue con CCK puede o no crear nuevos widgets. El ejemplo de la imagen es el módulo date con el módulo Date Popup activado (que viene incluido en el mismo paquete). Además cada field posee sus propios widgets por lo que dependerá del campo utilizado los widgets disponibles.

Con respecto a los ejemplos concretos, para eso utilizo los videos. Escribir paso a paso algo como una receta requiere un compromiso de calidad para no omitir pasos. Por esa razón prefiero explicar este tipo de procesos a través de una medio que refleje mejor los pasos a seguir.

Espero que eso aclare las dudas.
Saludos

Ya que lo mencionas, los videos estan excelentes. Ahi te ganas las palmas 100%, pues sos claro y, ademas, la imagen es clara, cosa no muy comun en este tipo de tutorial, donde aparece todo borroso y uno debe adivinar. Felicito tu iniciativa.

Por otro lado, gracias a este articulo comence a experimentar el uso de las CCK, la verdad muy poderosas. Pero llegue a un limite que quizas me puedas ayudar.
Hago un campo para la imagen, uno para el titulo y otro para la descripcion. El asunto, es ponerle a esa imagen el link que yo quiero, es decir, por ejemplo, pongo la imagen de Freud, arriba escribo su nombre y debajo, el año de nacimiento y de fallecimiento.
El asunto, me gustaría que al linkear esa imagen pueda remitirme al nodo que donde esta escrita la biografia de Freud.

Se puede hacer eso?

Gracias
y abrazo

Martin

Hola Martin:

La buena noticia es que Drupal permite hacer lo que buscás. La mala es que no es tan simple, por lo menos si recién estás comenzando con CCK.

Te recomiendo que busques información sobre el módulo Node Reference incluído en CCK, y sobre el módulo Content Template. Básicamente la idea sería, modificar el modo en que se imprime la imagen encerrandola en una etiqueta

<a href =""> </a>

El modulo Content Template te permite hacer esa modificación.

Por otro lado, el módulo Node Reference te permite elegir a que nodo apuntar. De todas formas si tenes problemas con eso, te aconsejo que consultes en los foros de Drupal Hispano, seguramente alguien te va a dar una mano.

Saludos

He llegado aquí a través del planet drupal y solo puedo darte la enhorabuena por todos tus artículos. Aunque no me explicas nada nuevo, aún recuerdo lo que me costó averiguar todo lo que tu has explicado de forma clara en castellano buscando y rebuscando en foros y web inglesas.

Sigue así.

Hola Victor:

Muchas gracias por el comentario. Mi idea es ir aumentando la complejidad de los temas de este sitio. Sin embargo, para comenzar he decidido temas por llamarlos de alguna forma, más tradicionales.

Seguramente estaré escribiendo sobre handlers de views 2, programación de módulos, creación de acciones y condiciones para rules, cvs, y lo que vaya surgiendo.

Pero por ahora, vamos de a poco.

Saludos!

Hola,

necesito crear una aplicación web para actualizar una base de datos en MySQL, proporcionando una interfaz sencilla, con los correspondientes formularios, que pueda usar una persona sin muchos conocimientos de informática. Son varias las tablas que habría, ya que en el modelo de datos tengo varias entidades, y están relacionadas.
Esta pensando hacerlo en PHP desde cero, pero buscando por internet he llegado a este módulo CCK de Drupal, que por lo que veo, te permite crear formularios de forma sencilla. Además necesito un sistema de login y validación de los campos de los formularios.

Nunca he usado Drupal y no sé casi nada de este CMS. ¿Crees que debería lanzarme a hacerlo con Drupal, usando el módulo CCK?

Espero tu opinión.
¡Gracias!

Hola Jose:

Seguramente Drupal te sirva. Siempre va a ser más facil (y más seguro) hacerlo en Drupal que desde cero en php.

El login ya viene incluído en Drupal por defecto así que no será un impedimento.

Las relaciones entre entidades puede llegar a ser un problema si necesitas integridad referencial.

En este post estuve comentando sobre una pregunta de otro usuario de Drupal Hispano sobre este tema.

Pero CCK seguramente va a solucionarte muchos dolores de cabeza.

Espero que sea de ayuda.
Saludos

Una última duda:

Necesito que un juego en flash pueda acceder a determinadas tablas de la base de datos. Las mismas que actualizo mediante Drupal. ¿Se puede hacer eso?

Gracias!

Seguramente se pueda. Pero eso esta más relacionado con Flash que con Drupal. Y personalmente no tengo experiencia trabajando con Flash.

Saludos

Hola Salatiel:

Lamentablemente no puedo ayudarte con tu problema. Parece algo relacionado con el CSS por lo que te recomiendo.

Registrate en Drupal Hispano y en la sección foros crea un tema con tu pregunta.

Recordá mencionar que versiones de que navegadores son las que no funcionan. Que theme y versión de Drupal estas utilizando. Y que código css se está ejecutando para la parte que está funcionando mal.

Es importante en casos como este, dar la mayor cantidad de detalles, los problemas con Theming son muy "personales".

Si no es algo de theming, puede ser un problema del módulo Content Permissions. ¿Estas navegando la página con el mismo usuario registrado? Recordá que los usuarios tienen que poder ver el campo.

Espero que sea de ayuda.
Saludos
Mariano

Saludos,
Tengo una gran duda de drupal 6, estoy creando un tipo de contenido con imagen, es decir agrego el campo imagen y le pongo preset configurado a resize de ancho y alto y otro para cuando abra la noticia, ahora, tando en el node del home como cuando loabro, aparece el texto debajo de la imagen, no quiero eso, quiero que aparexca con un align=left, normalmente. que debo ahcer?

Hola Gilbert:

Hay varias opciones para hacer eso.

La primera es editar un archivo css del theme y agregar un por ejemplo:

.field-type-filefield {
  float: left;
}

Si no podes modificar el archivo del theme, o no queres hacerlo, siempre podes usar el módulo Css Injector.

Si la estructura del html no te convence porque no logras el efecto deseado, podes modificar el template del nodo. En este artículo hay una explicación de como hacer eso.

Espero que sea de ayuda.
Saludos

Mil gracias por esta buena explicacion..queria preguntar si hay la menara de creae un campo de CCK con Codigo, osea no desde su interfaz sino con codigo php.

Hola Rossvelt:

Supongo que se puede crear un campo CCK pasando los valores del formulario dentro de una variable y enviando este formulario con drupal_execute. En este artículo hay más información sobre esta función: http://cuencodigital.com/articulos/importando_contenido_con_drupal_execu...

La otra opción es importar toda la estructura del tipo de contenido desde otro sitio. Con el modulo Content Copy incluido en el paquete CCK puede llevarse a cabo esta tarea.

Saludos y gracias por tu comentario.

Hola me estoy iniciando con drupal pero he avanado bastante me gustaria que me ayudaran es mi duda el problemas es que quiero darle la direccion en una palabra de un parrafo donde se pueda abrir o descargar un fichero como lo hago gracias de antemanos