domingo, 21 de diciembre de 2008

Funcionamiento de DRUPAL

Cómo trabaja Drupal

Les comparto algunas conclusiones acerca del funcionamiento del CMS Drupal

1. Luego de la instalación se trabaja en las carpetas modules y themes dentro de la carpeta de instalacion en la ruta /sites/all, por ejemplo podria quedar asi

/home/myweb/sites/all/modules

/home/myweb/sites/all/themes

En la carpeta “modules” se van guardando aquellos modulos que vamos descargando de
http://drupal.org/project/Modules

En la carpeta “themes” se van guardando los nuevos themes que vamos descargando de
http://drupal.org/project/Themes

o aquellos que creamos de cero o algun clon de los themes que viene por defecto con el Drupal. Por ningun motivo se trabaja fuera de estos lugares pues eso facilita cualquier actualizacion que pudiera tener Drupal y nos ayuda a ubicar mas rapido los modulos que hayamos creado o subido y ubicar las modificaciones a los templates.

2. La potencia de Drupal esta en los modulos. Un modulo esta compuesto por los siguientes archivos (por ejemplo, para el modulo que lleva por nombre infoandina,)

infoandina.module

Descripcion. Esta compuesto por dos grandes grupos de funciones. Los hooks y los themes. Los hooks son funciones que permiten la comunicación con todo el nucleo de Drupal, pueden ser eventos u operaciones con campos, usuarios, etc.

Los hooks tienen la siguiente sintaxis (por ejemplo para el modulo llamado infoandina)

function infoandina_perm() {

######

}

function infoandina_access() {

######

}

Otros pueden ser
infoandina_form()
infoandina_validate()
infoandina_submit()
infoandina_view()
infoandina_menu()
infoandina_nodeapi()
infoandina_user()
infoandina_load()
infoandina_insert()

etc etc etc

infoandina.info
Contiene informacion sobre el modulo, para la sintaxis abrir cualquier modulo de Drupal y observarla.

infoandina.install
Contiene generalmente informacion de la creacion de tablas en la base de datos y algunas configuraciones iniciales para el funcionamiento del modulo.

LICENSE.txt
JLa licencia GNU

README.txt
Algunas indicaciones generales

Los themes son funciones que permiten formatear la salida de las variables que se trabajan en los hooks. Tiene la siguiente sintaxis por ejemplo para este modulo llamado infoandina

function theme_infoandina($namespace, $path, $alt = '', $title = '', $attributes = NULL) {

####

}

function theme_infoandina_formatter($field, $item, $formatter) {

########3
}

Siempre comienzan con la palabra “theme”, el resto del nombre de la funcion es a eleccion del programador.

3. La edicion de una plantilla de Drupal (template) para adaptarla a nuestras necesidades empieza en la carpeta que habiamos ubicado por ejemplo en

/home/myweb/sites/all/themes

Dentro, si hemos clonado por ejemplo el tema nativo “bluemarine” encontraremos los sgtes archivos

block.tpl.php
box.tpl.php
comment.tpl.php
logo.png
node.tpl.php
page.tpl.php
screenshot.png
style.css

Cada archivo contiene informacion de cómo se formateara la salida de los datos en el sitio web.

Uno puede personalizar el formateo de los datos cambiando el nombre de los archivos, por ejemplo

page-user-1.tpl.php [para el nodo 1 de un usuario especial]
page-user.tpl.php [para un usuario especial]

Para la pagina principal podemos crear por ejemplo

page-front.tpl.php

La extension *.tpl.php se debe a que estamos usando PhpTemplate para el formateo de los contenidos. PhpTemplate es la librería que se encarga por defecto de formatear los contenidos en Drupal. Tambien podria usarse Smarty, en ese caso seria solo la extension *.tpl o usar PHPTAL con extension *.tal

Las librerias que no son PhpTemplate se colocan en una ruta como

/home/myweb/sites/all/themes/miplantilla

Donde

/home/myweb/sites/all/themes/engines/phptal

4. Si no nos basta con editar estos archivos y queremos personalizar mucho mas la salida de nuestros contenidos entonces debemos crear el archivo template.php y ubicarlo en una ruta como

/home/myweb/sites/all/themes/mi_plantilla

Donde la carpeta mi_plantilla contendria archivos como

block.tpl.php
box.tpl.php
comment.tpl.php
logo.png
node.tpl.php
page.tpl.php
screenshot.png
style.css
template.php

En un inicio, este archivo estara vacio. Alli es donde escribiremos funciones que sobreescribiran (overriding) la salida de nuestros contenidos programadas en los modulos con las funciones de tipo theme. Para saber los nombres de las funciones que se tienen que sobreescribir debemos buscarlos primero en el archivo /home/myweb/includes/theme.inc o en los archivos de extension *.module o *.inc del modulo que intuimos trabaja con los queremos modificar.

Por ejemplo para modificar la salida del campo imagen del modulo imagecache debemos ir al modulo. (Los atributos del campo imagen estan encapsulados dentro de una variable generadamente automaticamente por PhpTemplate llamada $field_foto_fid y que puede estar ubicada en uno de nuestros archivos de extension *.tpl.php. Su generacion es mas practica cuando usamos modulos de Vistas como Views por ejemplo)

/home/myweb/sites/all//modules/imagecache/imagecache.module

Y buscar

function theme_imagecache($namespace, $path, $alt = '', $title = '', $attributes = NULL) {
$attributes = drupal_attributes($attributes);
$imagecache_path = file_create_url(file_directory_path() .'/imagecache/'.
$namespace .'/'. $path);
return '';
}

Luego lo copiamos al archivo

/home/myweb/sites/all/themes/mi_plantilla/template.php

Y hacemos los cambios que deseamos. Si observan la primera parte del nombre de la funcion la he cambiado por phptemplate que es el nombre de la librería de plantillas que uso, pero tambien pudo ir el nombre de la plantilla que uso o la palabra theme.

Entonces es lo mismo escribir

function phptemplate_imagecache($namespace, $path, $alt = '', $title = '', $attributes = NULL) {
$attributes = drupal_attributes($attributes);
$imagecache_path = file_create_url(file_directory_path() .'/imagecache/'. $namespace .'/'. $path);
return '';
}

function mi_plantilla_imagecache($namespace, $path, $alt = '', $title = '', $attributes = NULL) {
$attributes = drupal_attributes($attributes);
$imagecache_path = file_create_url(file_directory_path() .'/imagecache/'. $namespace .'/'. $path);
return '';
}

function theme_imagecache($namespace, $path, $alt = '', $title = '', $attributes = NULL) {
$attributes = drupal_attributes($attributes);
$imagecache_path = file_create_url(file_directory_path() .'/imagecache/'.
$namespace .'/'. $path);
return '';
}


Tags: blogs, drupal, cms

Añadir comentario