Cómo relacionar contenidos en Drupal 7

Para relacionar contenidos en Drupal 7 tenemos varios módulos que pueden ser de ayuda:

  1. Entity reference (con extensiones como Entity Reference View Widget, Entityreference prepopulate y Inline Entity Form)
  2. References
  3. Relation
  4. Views reference

En próximos posts vamos a analizar cada uno de estos módulos. Por ahora nos estamos decantando por utilizar Entity reference ya que lo vemos muy completo.

Flot: Cómo conseguir que se vea en IE (Internet Explorer) en instalaciones antiguas de Flot

Si estamos utilizando una versión antigua de Flot es posible que veamos las gráficas en todos los navegadores menos en explorer.

He podido solucionarlo modificando el archivo jquery.flot.js en las siguientes líneas:
línea 317:

if ($.browser.msie)

a

if (($.browser.msie)&& (( parseInt($.browser.version, 10) ) < 9))

y línea 323:

if ($.browser.msie)

a

if (($.browser.msie)&& (( parseInt($.browser.version, 10) ) < 9))

Esta solución en principio estaba hecha para IE9, pero la acabo de probar en IE10 e IE11 y también funciona.

Cómo agrupar campos en Drupal 7 con el módulo Field collection

Si desarrollamos con Drupal en algunos proyectos vamos a necesitar agrupar campos. En Drupal 7 disponemos del módulo Field collection. Para utilizarlo tenemos que hacer lo siguiente:

  1. Instalar el módulo Field collection
  2. Para que los campos nos queden agrupados como una tabla tenemos que instalar el módulo Field Collection Table
  3. Añadir un nuevo campo (field) con un field type: «Field collection» y widget «Table» y rellenamos los campos
  4. Seleccionar field como field collection
    Seleccionar field como field collection
  5. En la vista de nuestro content type nos quedaría así
  6. Field collection en content type
    Field collection en content type
  7. Ahora vamos a: Structure > Field collections
  8. Field collection en Structure
    Field collection en Structure
  9. Vemos que aparece una fila con el campo que hemos creado, donde nos dice en que Content type se usa (used in) y que operaciones se pueden hacer (manage fields para crear campos, editarlos o borrarlos y manage display para controlar la presentación de estos campos).
  10. Field collection en Structure
    Field collection en Structure
  11. Si pulsamos en manage fields podemos crear todos los campos que necesitemos como si estuvieramos creando campos para un content type
  12. Mange fields en field collection
    Mange fields en field collection
  13. Ahora si creamos contenido veremos los campos agrupados en el campo field collection. Si hemos puesto ilimitado se pueden crear campos una y otra vez
  14. Crear field collection en content type
    Crear field collection en content type
  15. Al ver el tipo de contenido veríamos el campo field collection agrupado en una tabla con todos sus valores
  16. Resultado de field collection en content type
    Resultado de field collection en content type

Case Sensitivy en PHP

En PHP las variables son Case-sensitive, es decir, la variable que se defina tendrá que escribirse exactamente igual para poder llamarla.

<?php
$musica="blues";
echo "Me gusta escuchar " . $musica . "<br>";
echo "Ayer escuché " . $MUSICA . "<br>";
echo "Mañana iré a un concierto de " . $MuSiCa . "<br>";
?>

En PHP las funciones definidas, clases y keywords como por ejemplo for, do, if, else, print, echo, etc son Case-insensitive.

<?php
echo "Echo con minúsculas: echo<br>";
EcHo "Echo con mayúsculas y minúsculas: EcHo<br>";
ECHO "Echo con mayúsculas: ECHO<br>";
?>

Comentarios en PHP

Los comentarios en PHP son de 3 formas:

  • Para una única línea: //
  • Otra opción para una única línea: #
  • Para varias líneas se comienza con /* y se cierra con */

Así tenemos el siguiente ejemplo:

<?php
// Comentario de una línea

# Otro comentario de una única línea

/*
Comentario de 
varias líneas
en PHP
*/
?>

Variables locales y globales en PHP5

Leyendo diferente documentación podemos ver que tenemos variables globales y locales. Las globales se declaran fuera de una función y tiene aplicación en cualquier lugar fuera de una función. Las variables locales se declaran dentro de una función y sólo tienen actividad dentro de esa función.

Podemos ver el siguiente ejemplo:

<?php
$a=15; // variable global
function prueba()
{
$b=74; // variable global
echo "Dentro de la función la variable a tiene un valor de $a y la variable b tiene un valor de $b";
}
prueba();
echo "<br>";
echo "Fuera de la función la variable a tiene un valor de $a y la variable b tiene un valor de $b";
?>

como vemos en el resultado:

Dentro de la función la variable a tiene un valor de y la variable b tiene un valor de 74

Fuera de la función la variable a tiene un valor de 15 y la variable b tiene un valor de

En resumen, la variable global no actúa dentro de una función y la variable local no actúa fuera de la función donde fue declarada.

Para conseguir que una variable global actúe dentro de una función hay que declararla en la función precedida de global o bien llamarla así: $GLOBALS[‘variable’]. Al hacer esto estas variables actúan de forma global y en la función en la que hemos declarado que es global. Esto lo podemos ver en los siguientes ejemplos:

Con global:

<?php
$a=15; // variable global
$b=74; // variable global
function prueba2()
{
global $a,$b;
$b=$a+$b;
}
prueba2();
echo $b; // obtenemos 89
?>

Con $GLOBALS[‘variable’]:

<?php
$a=15; // variable global
$b=74; // variable global
function prueba3()
{
$GLOBALS['b']=$GLOBALS['a']+$GLOBALS['b'];
}
prueba3();
echo $b; // obtenemos 89
?>

Cómo solucionar el problema de Enable clean URLs en Drupal 7

En algunas instalaciones de Drupal 7, como las que hacemos en local, por ejemplo WAMP, nos podemos encontrar con que es imposible activar las URL limpias o dicho en inglés, no podemos seleccionar el botoón de Enable clean URLs.

Un camino para solucionarlo es poner la siguiente URL: http://www.tusitio.com/?q=admin/config/search/clean-urls

Poniendo esto ya tendremos el botón de Enable clean URLs disponible para seleccionarlo, y si lo activamos tendremos las URLs limpias.

Cuidado al comprimir web Drupal desde el administrador de archivos del Hosting

Si comprimimos una web en Drupal desde el administrador de archivos del hosting podemos tener un problema con ese backup. Algunos hosting al comprimir no guardan los archivos ocultos como .htaccess y otros, con lo que no estamos realizando una copia exacta de los archivos de nuestra web. Al probar esta copia en otro servidor nos puede dar algún que otro problema.

Es recomendable hacer un backup con las herramientas que nos pone a disposición cada hosting, por ejemplo quizás puedas descargar los archivos por un lado, la base de datos por otro y los correos por otro. Este backup de los archivos si será exacto.

Otra solución es descargar los archivos por FTP como filezilla, asegurándonos de seleccionar todos los archivos de nuestra instalación Drupal.

Cómo ocultar la ventana emergente InfoWindow que nos muestra al insertar un mapa de Google Maps

Cuando insertamos un mapa de Google Maps en nuestra web nos presenta una incómoda ventana InfoWindow (de información del sitio que mostramos) que puede que no queramos que aparezca, ya que afea el mapa.

Para eliminarla tenemos que seguir los siguientes pasos:

1) Elegimos el Google Maps el sitio que queremos que aparezca, imaginemos que es el Museo del Prado. Ponemos en el buscador de Google Maps «Museo del Prado» sin comillas y pinchamos en el primer resultado

Museo del Prado
Museo del Prado en Google Maps

2) Pulsamos en insertar mapa

Pinchar en enlazar Google Maps
Pinchar en enlazar Google Maps

3) Si no queremos personalizar el mapa, copiamos el código que viene debajo de «Pegar HTML para insertar en sitio web»

Código para insertar mapa de Google Maps
Código para insertar mapa de Google Maps

4) Vemos que nos sale una ventana emergente de información, que no queremos mostrar

Mapa de Google Maps con ventana emergente
Mapa de Google Maps con ventana emergente

5) Para eliminarla vamos a ver el código que hemos insertado: <iframe width=»425″ height=»350″ frameborder=»0″ scrolling=»no» marginheight=»0″ marginwidth=»0″ src=»https://maps.google.es/maps?f=q&amp;source=s_q&amp;hl=es&amp;geocode=&amp;q=museo+del+prado&amp;aq=&amp;sll=40.392385,-3.691964&amp;sspn=0.008776,0.021136&amp;gl=ES&amp;ie=UTF8&amp;hq=museo+del+prado&amp;ll=40.413752,-3.692242&amp;spn=0.016991,0.032015&amp;t=m&amp;output=embed»></iframe><br /><small><a href=»https://maps.google.es/maps?f=q&amp;source=embed&amp;hl=es&amp;geocode=&amp;q=museo+del+prado&amp;aq=&amp;sll=40.392385,-3.691964&amp;sspn=0.008776,0.021136&amp;gl=ES&amp;ie=UTF8&amp;hq=museo+del+prado&amp;ll=40.413752,-3.692242&amp;spn=0.016991,0.032015&amp;t=m» style=»color:#0000FF;text-align:left»>Ver mapa más grande</a></small>

6) Tenemos que añadir al final de src=»… lo siguiente: &amp;iwloc=near de forma que quedaría así: <iframe width=»425″ height=»350″ frameborder=»0″ scrolling=»no» marginheight=»0″ marginwidth=»0″ src=»https://maps.google.es/maps?f=q&amp;source=s_q&amp;hl=es&amp;geocode=&amp;q=museo+del+prado&amp;aq=&amp;sll=40.392385,-3.691964&amp;sspn=0.008776,0.021136&amp;gl=ES&amp;ie=UTF8&amp;hq=museo+del+prado&amp;ll=40.413752,-3.692242&amp;spn=0.016991,0.032015&amp;t=m&amp;output=embed&amp;iwloc=near«></iframe><br /><small><a href=»https://maps.google.es/maps?f=q&amp;source=embed&amp;hl=es&amp;geocode=&amp;q=museo+del+prado&amp;aq=&amp;sll=40.392385,-3.691964&amp;sspn=0.008776,0.021136&amp;gl=ES&amp;ie=UTF8&amp;hq=museo+del+prado&amp;ll=40.413752,-3.692242&amp;spn=0.016991,0.032015&amp;t=m» style=»color:#0000FF;text-align:left»>Ver mapa más grande</a></small>

6) Ahora vemos que el mapa de Google Maps no muestra la ventana emergente

Mapa de Google Maps sin ventana emergente
Mapa de Google Maps sin ventana emergente