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
La 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 '';
}