Cocina "con fundamento" para drupal

Por todos es sabido que en la cocina copiar recetas, mejorarlas y distribuirlas es la norma habitual. Las grandes cocineras, las "etxeko andres" (amas de casa), las que nos han dado de comer todos los días, han ido traspasando sus recetas de unas a otras/os.

En Investic estos últimos años hemos comido mucho y bien, pero ha sido con Drupal cuando nuestros platos han empezado a ser algo más exquisitos. Por eso hemos decidido hacer este libro de recetas, para compartir nuestra cocina "gourmet". Para ello haremos uso de los ingredientes clásicos: módulos, plantillas, instalaciones... Tendremos en cuenta que no todo el mundo está igual de suelto en los fogones y cocinaremos para todos los niveles, acordaros que los niños y niñas siempre pueden echarnos una mano, limpiando la lechuga, arreglando css.

Somos lo que comemos y por eso creemos que comer con Drupal es algo sano y saludable.

Saludos y bienvenidos a nuestra cocina.

Imagen de bea

Completar los breadcrumb teniendo en cuenta la url (forma 2, mediante la variable $breadcrumb en el template)

Tags: 
drupal5
Descripción: 

En la receta "Completar los breadcrumb teniendo en cuenta la url" explicamos como cambiar los breadrcumb introduciendo un poco de código en un modulo nuevo..

Esta receta es algo parecido, pero lo que hacemos es cambiar el valor de la variable $breadcrumb en el template.php, sin necesidad de crear modulos nuevos ni na.

codigo_code: 
// en el template.php
function _phptemplate_variables($hook, $vars = array()){
  switch ($hook) {
    case 'page':             
        $url = drupal_get_path_alias($_GET['q']);  // obtenemos la url dnd estamos
        $uri = explode("/", $url);
        if(count($uri)>=1){   // si la url esta formada por partres.. eje: /acciones/ejemplos/proyectos
          if ($uri[0] == 'acciones' or $uri[0] == 'comunicacion' or $uri[0] == 'modulos' ){   //una funcion de ejemplo que le decimos que solo entre si la url empieza por acciones, comunicacion, modulos, sino empiea así se saltará to esto y no creara ni modificara los breadcrumb.
            $enlace =  l('Principal', '');  // la 1º parte del breadcrumb
            for($i=0;$i<count($uri)-1;$i++){  // se va recorriendo para ir construyendo el breadcrumb
              if($i>0) {
                $ant = $uri[$i-1]."/".$uri[$i];
               } else{ 
                 $ant = $uri[$i];
               }
               if ($uri[$i] == 'modulos'){  //es una excepción.. si keremos k el titulo de esa parte del breadcrumb por ejemplo keremos k sea otra palabra k la de la url..asi en eeste ejemplo podemos cambiar "modulos" por "Modulos nuevos"
                 $enlace .= ' :: '.l('Módulos nuevos', $ant);i
              }
 
               else{  //sino el nombre es igual k el de la url
                 $enlace .= ' :: '.l(ucfirst(ereg_replace("_", " ", $uri[$i])), $ant);
              }
             }
           $vars['breadcrumb'] = '<div class="breadcrumb">'.$enlace.'</div>'; //guardo el valor en la variable de breadcrumb..
          }
        }
 
      break;
 
    }
    return $vars;
  }
Imagen de karlos

jQuery Cycle en drupal es como el jamón en la trucha a la navarra

Hace tiempo que no me pasaba por esta cocina, es lo malo que tiene ser un profesional (en el sentido de que te contratan) y es que tienes ir a las cocinas de otros.

El titulo tiene su gracia ya que soy vegetariano, pero se que el jamón de la trucha a la navarra es el punto gracioso, salado y sabroso. También tiene sus riesgos, no es lo mismo un jamón que un JAMÓN, osea que si eres un poco cutre y metes un jamón cutre la trucha quedara cutre. Con jQuery y sus plugins puede pasar algo del estilo, si te pasas el plato de drupal pude indigestar a más de uno.

Imagen de bea

Accesibilidad en las VIEWS de tipo TABLA

Tags: 
accesibilidad
Descripción: 

FALLOS DE ACCESIBILIDAD:
Cuando el tipo de la vista creada es "tabla", sale el siguiente error:

Proporcione resúmenes de las tablas.

* La tabla no tiene resumen (atributo "summary") (1)

Provide summaries for tables.

* Table is missing a summary (1)

Para solucionarlo aplicar el siguiente código en el template.php

codigo_code: 
/**
 * Display the nodes of a view as a table.
 */
function phptemplate_views_view_table($view, $nodes, $type) {
  $fields = _views_get_fields();
 
  foreach ($nodes as $node) {
    $row = array();
    foreach ($view->field as $field) {
      if ($fields[$field['id']]['visible'] !== FALSE) {
        $cell['data'] = views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view);
        $cell['class'] = "view-field ". views_css_safe('view-field-'. $field['queryname']);
        $row[] = $cell;
      }
    }
    $rows[] = $row;
  }
  return theme('table', $view->table_header, $rows,  array('summary' => 'Views tables'));
}
Imagen de bea

Accesibilidad en href.. "ul", "object" ...

Tags: 
accesibilidad
Descripción: 

Erro de accesibilidad:

document type does not allow element "ul" here; missing one of "object", "applet", "map", "iframe", "button", "ins", "del" start-tag.

codigo_code: 
  // Los enlaces en un tpl.php, template... deben ser de la siguiente forma para que no
  // de error de validación
  // en el siguiente ejemplo son con variables:
  //  Link :  /link/$link_ultima_parte
  //  titulo: titulo_$proyecto
  <?php print '<li><a href="/link/'. $link_ultima_parte .'"> titulo_'. $proyecto .'</a></li>';?>
 
//otra accesibilidad..crear href con target
 
 <a href="http://link../"  onclick="target='_blank';"><img src="/sites/foto.jpg" alt="foto"/></a>
Imagen de bea

Completar los breadcrumb teniendo en cuenta la url

Tags: 
breadcrumb
Descripción: 

Hay veces que con drupal los breadcrumb se nos quedan un pelin cortos. El siguiente código (un hook_nodeapi en un módulo), modifica el breadcrumb. En este caso teniendo en cuenta la url. Hay dos ejemplos:

  • /ejemplos/....
  • - Cuando estes en ejemplos el breadcrumb será:
    home >> Tipos de ejemplos (el enlace de ejemplos irá a: 'tipos_de_ejemplos' )

  • /proyectos/...
  • - Cuando estes en proyectos el breadcrumb será:
    home >> proyectos (el enlace de proyectos irá a: 'proyectos')

codigo_code: 
// drupal6
// En un modulo:
function nombre_modulo_nodeapi(&$node, $op, $teaser, $page) {
  if ($node->type == 'page'){  // si solo se lo vamos a cambiar por eje a las paginas
    switch ($op) {
      case 'view':
        $url = drupal_get_path_alias($_GET['q']);  // cogemos la url
        $uri = explode("/", $url);   // la separamos por las barras
        if(count($uri)>=1){  // si la url tiene mas de 1 apartao..
          // si x ejem solo nos interesa cnd la url empieza x ejemplos o proyectos
           if ($uri[0] == 'ejemplos' or $uri[0] == 'proyectos'){ 
             $enlace[] =  l('Home', '');  //la 1º parte del enlace
             for($i=0;$i<count($uri)-1;$i++){
              if($i>0) {
                $ant = $uri[$i-1]."/".$uri[$i];
               } else{
                 $ant = $uri[$i];
               }
               // si por ejemplo cuando empiece por ejemplos, queremos q el breadcurm marque: "Tipos de ejemplos" y con la url ("tipos_de_ejemplos"):
               if ($uri[$i] == 'ejemplos'){
                 $enlace[] = l('Tipos de ejemplos', "tipos_de_ejemplos");
               }
               // sino.. que ponga el nombre de la parte de la url y el enlace tb
               else{ 
                 $enlace[] = l(ucfirst(ereg_replace("_", " ", $uri[$i])), $ant);
               }
             }
             // guardamos el breadcrumb
             drupal_set_breadcrumb($enlace);
          }
      }
       break;
    }
  }
}
Imagen de bea

Formularios Multi-Step, formularios por pasos..

A continuación explico un método para crear un formulario multistep.
La forma en que lo muestro es en un módulo llamado multistep.
En resumen lo que hace es lo siguiente:

  1. Sólo podrán acceder al formulario los que tengan el permiso "form multistep"
  2. El formulario comienza al entrar en: /formulario/multistep
  3. El primer formulario muestra lo siguiente
    ¿¿¿Pregunta 1???
    - Respuesta A
    - Respuesta B

    Limpiar Formulario Siguiente >>

  4. Rellenado el primer formulario, accedes al siguiente
    ¿¿¿Pregunta 2???
    - Respuesta C
Imagen de bea

Error accesibilidad. ID "node-title" already defined.

ERROR:
<div id="node-title" class="view-field view-data-node-title">

An "id" is a unique identifier. Each time this attribute is used in a document it must have a different value. If you are using this attribute as a hook for style sheets it may be more appropriate to use classes (which group elements) than id (which are used to identify exactly one element).

SOLUCIÓN:
En este caso la vista es un calendario que muestra los titulos de los nodos creados cada día. El problema está que todos los titulos tienen el mismo id: node-title. Una solución es
Imagen de bea

Campos del cck con Allowed values list (lista de valores) - Php code

Tags: 
php code
Descripción: 

Esta opción de campo es para que mediante código php puedas dar una lista de valores u otra.
La lista normal se pondría en el campo Allowed values list. En este ejemplo pondriamos No.
La lista que se mostrará si cumple la condición php code, se escribirá en el campo php code. En este caso es comparandola con usuarios.

Este campo también se puede utlizar para realizar consultas de la base de datos.., operaciones...

No hace falta poner <?php ?>

codigo_code: 
// Ejemplo de un campo tipo lista text, donde si eres el admin del sitio o
// perteneces al rol 4 las opciones son Sí y No. 
// El siguiente código meterlo en Php code (campo debado de Allowed values list)
global $user;
if ($user->uid == 1 or $user->roles[4] ){
$row[1] = 'Sí';
$row[2] = 'No';
return $row;
}
Imagen de bea

Crear blogs personalizados

El sistema de blogs de drupal, es uno por cada usuario. hemos pensado en realizar blogs de otra manera, tal que puedan ser escritos por más de un usuario y con una apariencia tipo wordpress.. (+ bloques..)
El ejemplo es el de blog gaztelan economiasolidaria
La idea consiste en relacionar dos tipos de contenidos diferentes, cómo podrían ser blog y posts.

  • cck blog (bitacora): Campos: Descripción(textarea), usuarios (usereference, A la hora de crear cada blog se le dirá que usuarios tendrán permisos a escribir posts para ese blog.), cabecera del blog (image, todos sus posts tendrán tb la misma cabecera)
  • cck post (post_blog): Campos: Blog (nodereference al anterior cck, para ver a que blog pertenece ese post), categorías, contenido (textarea)

Vistas (bloques) necesarias para conseguir ese aspecto: