Jun 162011
 

Post to Twitter Post to Facebook

Existen muchas ocasiones en las que quisiéramos tener un theme configurable sin tener que tocar directamente el CSS o los templates, para satisfacer estas necesidades podemos recurrir a crear un formulario de configuración en el cual el administrador del stite pueda facílmente y sin conocimientos de programación cambiar aspectos de nuestro theme.

En este artículo crearemos nuestro propio theme con opciones de configuración que le permitirán al administrador del site modificar mediante un sencillo formulario cambiar el tamaño y/o el tipo de la fuente. Seguir leyendo

Jun 062011
 

Post to Twitter Post to Facebook

Drupal interactúa constantemente con una base de datos determinada, todos los comentarios, contenidos y demás elementos de drupal se encuentran almacenados y drupal rescata esta información para mostrar estos datos.

Dentro de drupal encontramos una capa de abstracción que “protege” a drupal de las diferencias existentes entre la ingeniería de las diferentes bases de datos, gracias a esta capa podemos escribir un mismo código independientemente de la base de datos con la que estemos trabajando además de prevenir posibles ataques SQL inyection.Basada en objetos PDO (PHP´s Data Object) y  en el principio de que la escritura SQL es  más conveniente que aprender una sintaxis nueva.

En versiones anteriores de drupal realizaríamos nuestras consultas de la siguiente forma:


$result = db_query('SELECT name FROM {role} WHERE rid = :rid', array(':rid' => 2));

Esta forma de construir nuestras consultas puede servirnos perfectamente hasta cierto punto , pero ¿Cómo nos defendemos de consultas más complicadas?.Unas de las características de Drupal 7 es la posibilidad de crear query objects mediante  un query builder que harán mas manejables estas consultas complejas.De esta forma podríamos reescribir nuestra consulta anterior de la siguiente forma :


$query = db_select('role', 'r');
 $result = $query
 ->condition('rid',2)
 ->fields('r',array('name'))
 ->execute();

Ordenando resultados

Para ordenar el resultado de nuestra consulta simplemente usamos el método orderBy, si quisiéramos por ejemplo ordenar los resultados por name ascendentemente haríamos lo siguiente:


$query = db_select('role', 'r');
 $result = $query
 ->condition('rid',2)
 ->fields('r',array('name'))
 ->orderBy('name', 'ASC')
 ->execute();
Paginando resultados

Paginar resultados en drupal es extremádamente fácil.Supongamos que queremos mostrar un listado de todas nuestras nuestros nodos de tipo page, probablemente recibamos decenas de filas como resultado y por tanto necesitamos paginar los resultados por usabilidad.Para llegar a nuestro objetivo en primer lugar crearemos un menu item (ver el artículo anterior) y definiremos nuestra callback para mostrar los resultados que buscamos de la siguiente forma:


/**
 * Page callback
 */
function mimodulo_micallback(){

 //Creamos el query object y extendemos el object para que use un paginador por defecto
 $query = db_select('node','n')->extend('PagerDefault');
 //Construimos nuestra query indicando el número de elementos que
 //queremos que aparezcan por página.
 $query
 ->condition('type','page')
 ->fields('n',array('title'))
 ->limit(5);

 $result= $query ->execute();
 //Iteramos sobre los resultados para contruir la cadena que devolveremos
 $output = '';
 foreach ($result as $row) {

 $output .= $row->title."</br>";

 }
 //LLamamos a la función de tematización y aplicamos el tema de paginación a
 //nuestra salida y retornamos
 $output .= theme('pager');
 return $output;
 }

Imagen del listado de paginas paginado

Si todo ha ido bien , habremos obtenido nuestro paginador funcionando tal como se muestra en la figura y el cual nos ha sido muy facil crear :)

Fuente : Pro Drupal 7 Development

May 312011
 

Post to Twitter Post to Facebook

En el artículo “Cómo crear un menu item básico en Drupal 7 ” creamos un menu sencillo menu item simplemente implementando hook_menu() y el callback asociado a dicho menu item.En este artículo ampliaremos este menu y construiremos un menu anidado (nested menu) el cual lo visualizaremos como tabs.

Los callback mostrados como tabs son conocidos como “local task“, drupal ya nos proporciona 2 types para poder definirlos : MENU_LOCAL_TASK y MENU_DEFAULT_LOCAL_TASK. La clave ‘title’ de nuestro menu item debería ser algún tipo de acción como , listar , añadir, etc..Destacar que toda local task debe tener algún menu item raiz para ser mostrado , la práctica más común es asociar un callback como raí­z y después ir añadiendo nuestras local task como menu items anidados.Hay que tener en en cuenta que el theming incorporado por dupal solo soporta dos niveles, pero que no cunda el pánico ,pero nuestro el theme que estés usando puede que si soporte más niveles.

Ahora vayamos a la práctica, como se vio en el artículo anterior para poder definir menu items simplemente debemos implementar hook_menu() , por tanto vayamos a nuestro fichero menufun.module y vamos a redefinir nuestro hook menufun_menu() :


/**
 * Implementation hook_menu().
 */
 function menufun_menu() { 
 $items['milkshake'] = array(
 'title' => 'Milkshake flavors',
 'access arguments' => array('list flavors'),
 'page callback' => 'milkshake_overview',
 'type' => MENU_NORMAL_ITEM,
 );
 $items['milkshake/list'] = array(
 'title' => 'List flavors',
 'access arguments' => array('list flavors'),
 'type' => MENU_DEFAULT_LOCAL_TASK,
 'weight' => 0,
 );
 $items['milkshake/add'] = array(
 'title' => 'Add flavor',
 'access arguments' => array('add flavor'),
 'page callback' => 'milkshake_add',
 'type' => MENU_LOCAL_TASK,
 'weight' => 1,
 );
 $items['milkshake/list/fruity'] = array(
 'title' => 'Fruity flavors',
 'access arguments' => array('list flavors'),
 'page callback' => 'milkshake_list',
 'page arguments' => array(2), // Pass 'fruity'.
 'type' => MENU_LOCAL_TASK,
 );
 $items['milkshake/list/candy'] = array(
 'title' => 'Candy flavors',
 'access arguments' => array('list flavors'),
 'page callback' => 'milkshake_list',
 'page arguments' => array(2), // Pass 'candy'.
 'type' => MENU_LOCAL_TASK,
 );

 return $items;
 }

Ahora definimos cada una de los callback asociados a cada uno de los menu items , las cuales implementamos en menufun.module

Nota: A diferencia del artículo anterior esta vez no hemos incluido las callback en un fichero adicional,pero se podría hacer igualmente como se explicó en el artículo anterior.


function milkshake_overview() {
 $output = t('The following flavors are available...');
 // ... more code here
 return $output;
 }

 function milkshake_add() {
 return t('A handy form to add flavors might go here...');
 }

 function milkshake_list($type) {
 return t('List @type flavors', array('@type' => $type));
 }

Finalmente podemos comprobar como queda nuestro nuevo menu item (Construimos de nuevo nuestro modulo menufun y limpiamos la cache) y podremos ver nuestro preciosos menu items como tabs:

Fuente : Pro Drupal 7 Development