Documentados

Distribuir contenido
Temas diversos referentes en todo momento a Drupal como software para gestionar contenido, información y conocimiento dentro de un sitio web.
Actualizado: hace 2 semanas 5 días

crear menus en drupal con hook_menu

Agosto 9, 2008 - 20:29

Cuando queremos crear uno o más elementos de menú en Drupal tenemos que añadir la siguientes líneas de código:
<?php
function campanya_menu($may_cache) {
$items = array();
if ($may_cache) {
?>
Con este código invocamos al hook de drupal para poder crear los elementos de menu.

<?php
$items[] = array(
     'path' => 'alta_partida',
     'title' => t('Alta de partidas'),   
     'description' => t('Informar de los resultados de partidas'),
     'callback' => 'drupal_get_form',
     'callback arguments' => array('alta_partida'),
     'access' => user_access ('administer site configuration'),
     'type' => MENU_NORMAL_ITEM
    );


   $items[] = array(
     'path' => 'alta_partidados',
     'title' => t('Alta de partidasdos'),   
     'description' => t('Informar de los resultados de partidassss'),
     'callback' => 'drupal_get_form',
     'callback arguments' => array('alta_partidados'),
     'access' => user_access ('administer site configuration'),
     'type' => MENU_NORMAL_ITEM
    );
?>

Cada array dentro de la variable $items es un elemento que queremos crear, para más información sobre los diferentes elementos / atributos de los $items del hook_menu consultar http://api.drupal.org/api/function/hook_menu/5

<?php
  }
return $items;
}
?>
Con estas tres líneas de código cerramos el if del principio, y la función campanya.

Lo dicho, cada vez que queramos crear nuevos elementos de menu simplemente añadir un $item[].

Un saludo

Oskar

cookies en Drupal, modificar el tiempo de vida de las mismas.

Julio 31, 2008 - 10:51

Drupal tiene un sistema completo de gestión de sesiones, para una visión más completa recomiendo leer el capitulo 16 del Pro Drupal Development.

Si queremos que las cookies de Drupal no "vivan" tanto tiempo en nuestro equipo yo recomiendo usar firefox, y configurar el navegador para que borre cookies, y el histórico cada vez que se cierre. Si no queréis hacerlo, el usuario solo usa IE (pobre de él), o hay otros motivos para no poder hacerlo la solución es modificar el tiempo de vida de las cookies de Drupal.

Modificando el tiempo de vida de las cookies de Drupal lo que conseguimos es que no se mantengan las sesiones abiertas, en casa posiblemente no haya problemas, pero cuando utilizamos otro equipo que no es el nuestro es interesante que nadie pueda entrar con el usuario de otro.

Para configurar el tiempo de vida, o el tiempo de caducidad de las cookies de Drupal lo que hacemos es modificar en el archivo settings php la siguiente línea de código:
ini_set('session.cookie_lifetime',  20000);

Con esta línea de código le estamos diciendo a la cookie de Drupal que dure 23 días, para decirle que se borre la sesión al cerrar el navegador ponemos los siguiente:
ini_set('session.cookie_lifetime',  0);

Como lo hacemos, sustituimos el número 20000 por 0, y ya tenemos una cookie de Drupal que caduca al cerrar el navegador.

Un saludo

Oskar

Maquetar imagenes en noticias

Julio 28, 2008 - 09:40

Me llega por correo la siguiente pregunta:

Oskar sera q me puedes explicar como hicistes detalladamente para hacer lo
q querias ..tengo el mismo invcoveniente para mostrar las noticias
porfavor..quiero aplicar el mismo formato que tu presentastes y ni idea
como comenzar ya instale el content templates para empezar
Gracias

Desi

Para hacer una maquetación de noticias, además de las recomendaciones que me dieron en el foro de drupal hispano se puede usar el módulo Conten Template.

Este módulo es dependiente de CCK, y nos permite personalizar la plantilla de los tipos de nodos que existen, o los que creamos con CCK.

Una vez hemos creado el tipo de nodo con cck, nos vamos al enlace de Conten Template y seleccionamos el nodo que queremos editar. Dentro de esta opción seleccionamos si queremos editar el "teaser" o el "full", en este caso llamado body, o las rss.

Los que tengan más experiencia con la programación de templates de drupal lo que se ve en los ejemplos de Conten Template no es nada del otro mundo. Simplemente jugamos con "divs", imprimir variables, y montar los datos como queramos.

Como siempre, hay que tener un mínimo conocimiento de php para hacerlo, pero tampoco mucho, con mirar en los tpl.php de los temas aprenderemos rápidamente como hacer las cosas.

Un saludo y ánimo con ello.

Oskar

Como crear un primer formulario.

Julio 27, 2008 - 19:53

Lo primero gracias a pcambra y a develCuy por su ayuda con mi primer formulario..

<?php
/**
* Formulario que permite guardar las partidas jugadas
* Form to save the game.
*/

   
function alta_partida(){
    $form['alta_partida'] = array (
        '#type' => 'fieldset',
        '#title' => t('alta de partidas'),
        '#weight' => -6,
    );

    // Nombre del jugador a
      $form['alta_partida']['jugador_a'] = array(
            '#type' => 'value',
            '#value' => $user->uid,
    );

    // Nombre del ejercito del jugador a
    $form['alta_partida']['jugador_a_ejercito'] = array(
            '#type' => 'value',
            '#value' => $user->profile_ejercito,
    );

    // fieldset para agrupar los datos del jugador b
     $form['contrincante'] = array(
          '#type' => 'fieldset',
          '#title' => t('Datos de tu contrincante'),
          '#weight' => -5,
          '#collapsible' => TRUE,
          '#collapsed' => FALSE,
    );   
$ejercito_b['0'] = t("Selecciona un ejerccio");
$ejercito_b['1'] = "Marines";
$ejercito_b['2'] = "Orkos";
$ejercito_b['3'] = "Eldars";
          
    //  Ejercito del jugador b
    $form['contrincante']['jugador_b_ejercito'] = array (
        '#type' => 'select',
        '#title' => t('selecciona el ejercito de tu contrincante:'),
        '#options' => $ejercito_b,
        '#default_value' => $ejercito_b['0'],
        '#weight' => -15,
    );


    // Nombre del jugador b
    $form['contrincante']['jugador_b_'] = array (
        '#type' => 'select',
        '#title' => t('¿Como se llamaba tu contrincante?:'),
        '#options' => array(
            '0' => t('General Lee'),
            '1' => t('Mc Arthur'),
            '2' => t('Almirante Nelson'),
            '3' => t('Godoy'),
            ),
        '#weight' => -14,
    );

    //fieldset de la campaña
    $form['campanya'] = array(
          '#type' => 'fieldset',
          '#title' => t('Datos de la campaña'),
          '#weight' => -4,
          '#collapsible' => TRUE,
          '#collapsed' => FALSE,
    );

$nombre_campanya = "Asalto al imperio frances";

    //nombre de la campanya.
    $form['campanya']['nombre_campanya'] = array (
        '#type' => 'item',
        '#title' => t('Nombre de la campaña:'),
        '#value' => $nombre_campanya,
        '#weight' => -4,
    );

    //lugar de la partida
    $form['campanya']['lugar'] = array(
        '#type' => 'select',
        '#title' => t('Donde se ha jugado la partida:'),
        '#options' => array(
            '0' => t('Paris centro'),
            '1' => t('Sudeste de paris'),
            '2' => t('En los suburbios'),
            '3' => t('En el almacen del puerto'),
            ),
        '#weight' => -3,
    );



    //fieldset del tipo de partida
    $form['tipo_partida'] = array(
          '#type' => 'fieldset',
          '#title' => t('Tipo de partida que se ha jugado'),
          '#weight' => 2,
        '#collapsible' => TRUE,
          '#collapsed' => FALSE,
          );

    //tipo de batalla, hace referencia a la cantidad de puntos que se juegan en la partida.
    $form['tipo_partida']['tipo_batalla'] = array(
        '#type' => 'select',
        '#title' => t('Tamaño de la partida:'),
        '#options' => array(
            '0' => t('escaramuzas'),
            '1' => t('patrullas'),
            '2' => t('normal'),
            '3' => t('grande'),
            '4' => t('enorme'),
            ),
        '#weight' => -5,
    );




    //tipo de batalla, hace referencia al tipo de miniaturas, tamaño, que se utiliza en la partida..
    $form['tipo_partida']['tipo_ejercito'] = array(
        '#type' => 'select',
        '#title' => t('Tipo de miniaturas:'),
        '#options' => array(
            '0' => t('06mm a 15mm'),
            '1' => t('16 mm a 25mm'),
            '2' => t('26 mm a 35mm'),
            '3' => t('36mm a 55mm'),
            '4' => t('barcos'),
            '5' => t('aviones'),
            '6' => t('naves espaciales'),
            ),
        '#weight' => -4,
    );




    //fieldset del tipo de misión que se ha jugado en la partida
    $form['tipo_mision'] = array(
          '#type' => 'fieldset',
          '#title' => t('Tipo de misión'),
          '#weight' => 1,
          '#collapsible' => TRUE,
          '#collapsed' => FALSE,
    );

    //que tipo de misión se ha jugado, hay 3 opciones, normales, especiales, eventos
    $form['tipo_mision']['mision'] = array(
        '#type' => 'select',
        '#title' => t('Que tipo de misión se ha jugado:'),
        '#options' => array(
            '0' => t('normales'),
            '1' => t('especiales'),
            '2' => t('eventos'),
            ),
        '#weight' => -4,
    );

    //Se muestran las misiones que se pueden jugar.
    $form['tipo_mision']['clase_mision'] = array(
        '#type' => 'select',
        '#title' => t('selecciona la misión que se ha jugado:'),
        '#options' => array(
            '0' => t('mision 1'),
            '1' => t('mision 2'),
            '2' => t('mision 3'),
            ),
        '#weight' => -3,
    );

    //Resulatdo de la partida
    $form['resultado'] = array(
          '#type' => 'fieldset',
          '#title' => t('Tipo de resultado'),
          '#weight' => 9,
          '#collapsible' => TRUE,
          '#collapsed' => FALSE,
    );
    //selecciona como ha finalizado la partida.
    $form['resultado']['ganar_perder'] = array(   
        '#type' => 'radios',
        '#title' => t('Resultado de la partida'),
        '#options' => array(t('he ganado'), t('He empatado'), t('He perdido')),
    );

    //botón de enviar dadtos
    $form['submit'] = array (
        '#type' => 'submit',
        '#value' => t('guardar'),
        '#weight' => 10,
       
    );


   return $form;
}
?>

Un saludo

Oskar

Desarrollo de un módulo en drupal, parte seis, empezamos a picar código

Julio 23, 2008 - 23:00

Bueno, antes hemos visto como crear el campanya.info . Seguimos ahora con el archivo campanya.modulo en el cual vamos a introducir el código php y javascript/jquery para todas las funcionalidades que queremos darle al módulo.

Actualización, el código del hook_menu estaba mal, ahora va la corrección :)
Se han correguido varios errores en el hook_menu, ya funciona correctamente. :)

<?php

//$Id$ modulo de campanyas, idea de Oskar Calvo calvo.oskar@gmail.com

/**
*@file
*Este módulo permite que los jugadores registren el resultado de sus partidas,
*se verifique dichas partidas, y se muestre de forma visual su resultado
*
*Se introducen los datos mediante un formulario.
*Un segundo formulario permite a los jugadores validar los resultados de las partidas.
*una tercera función imprime el resultado de las partidas en la campanya.
*/
?>

En estas primeras líneas de código lo que hacemos es informar de los datos del módulo, quien lo ha creado y para que se ha creado.

<?php
/**
* Implementation hook_help
*/
function campanya_help($section) {
  switch ($section) {
    case 'admin/help#campanya':
      $output = t('<p>Este es un módulo pensado para poder gestionar campañas de juegos de mesa con figuras/soldados de como son los juegos de G.W., Privateer Press, etc....</p>');
      break;
  }
return $output;
}
?>

Uno de los primeros hooks que se tiene que utilizar en la creación de los módulos en Drupal es el hook_help. Con este hook lo que creamos es la información de la sección de ayuda del módulo dentro del área de administración. Bueno, lo que intento crear es eso, aun tengo que probarlo

<?php
/**
* Implementación del enlace para que se muestre el formulario de alta.
* Implementation hook_menu
*/

function campanya_menu($may_cache) {
$items = array();
if ($may_cache) {
   $items[] = array(
     'path' => 'alta_partida',
     'title' => t('Alta de partidas'),   
     'description' => t('Informar de los resultados de partidas'),
     'callback' => 'drupal_get_form',
     'callback arguments' => array('alta_partida'),
     'access' => user_access ('administer site configuration'),
     'type' => MENU_NORMAL_ITEM
    );
  }
return $items;
}
?>

El Hook_menu lo que nos permite es crear los elementos de menú en el "menú de navegación". No se están utilizando todas las opciones que tiene el hook, pero vamos a explicar las que se han utilizado.

  • Path: es la ruta que se genera y a la cual se llega cuando pinchamos en el enlace.
  • Title: este es el nombre que aparecerá en el menú de navegación.
  • Description: es la descripción que aparece al pasar el ratón por encima de
  • Callback: este elemento recupera datos o una función dependiendo del caso, en el ejemplo lo que invoca es una función de formulario.
  • callback arguments: argumentos que se pasan al callback, en este caso, callback es drupal_get_form (para formularios) asi que le pasamos el nombre de nuestro formulario, sugerencia realizada por Eleazan.
  • queda por añadir el elemento access, y el elemento peso, pero eso para más adelante.

Por favor, si veis algún error no dudéis en indicármelo, ya que entre todo esperamos poder mejorar esto.

Un saludo

Oskar

pd: desde aquí quiero dar las gracias a Iñaki López que me esta ayudando para que sea capaz de entender los módulos, y por orden alfabético a Eleazan, Ipwa, Manuee, Pcambra, Toletum y demás miembros de la comunidad que siempre están dispuestos a ayudar.
Sois la leche.

Desarrollo de un módulo en drupal, parte cinco, empezamos a picar código

Julio 23, 2008 - 22:56

A la hora de desarrollar un módulo en Drupal el primer archivo que creamos es el archivo nombredemodulo.info

En este caso campanya.info con la siguiente información:
; $Id$
name = campanyas
description = módulo que permite gestionar campañas, introducciendo los resultados de las partidas.
package = campanyas
version = 5.0

name: es el nombre del módulo que aparecerá en admin/build/modules
descripción: es la descripción del módulo.
Package: es el grupo donde se englobará el módulo.
version: es la versión del módulo, en este caso sería la versión 0, como es para drupal 5.x he decidido que sea 5.0

Sencillo, y ya informamos con este archivo a Drupal de nuestro módulo.

Un saludo

Oskar