Drupal

Solucionar el problema de Cufon en IE9

Parace ser que en Internet Exploer 9 no se visualizan bien los textos que se habían maquetado con Cufon.

Podemos solucionarlo con 3 pasos:

  • Descargar la versión más reciente de Cufon-yui.js.
  • Añadir en el HEAD del documento HTML, después de la llamada a Cufon-yui.js, el siguiente código:
<!--[if gte IE 9]>
    <script type="text/javascript">
        Cufon.set('engine', 'canvas');
    </script>
<![endif]-->
  • Añadir el siguiente meta en el HEAD, para forzar que IE9 se comporte como IE8:

<meta http-equiv="X-UA-Compatible" content="IE=8" />

Fuente: http://www.estadoactivo.com/problema-con-cufon-y-ie9.html

Si estamos en Drupal 6, podemos escribir en el HEAD instalando el módulo Add To Head.

Problemas en Drupal con CSS e Internet Explorer 8

Tenía problemas al ver en ie8 uno de los sitios hechos con Drupal: parecía como si la hoja de estilos no se cargase, y eso que estaba bien enlazada en el "head" del documento. En Firefox el sitio web se veía perfectamente.

Al parecer, ie8 tiene un problema si uno intenta cargar en la cabecera muchas hojas de estilos y script. Encontré que una posible solución para Drupal era entrar a "Configuración del sitio > Rendimiento", y ahí activar las casillas referentes "Optimizar archivos CSS", y "Optimizar archivos JavaScript".

Aun así esta solución presenta 2 problemas:

  • en la fase de desarrollo no se lleva muy bien con la caché, así que es mejor activar estas casillas al final del desarrollo;
  • hay un fallo en Drupal 6 que impide esta solución si el método de descargas del servidor está en privado.

Como no entiendo mucho respecto al tema, aquí indico la fuente:

http://www.siteprebuilder.com/content/drupal-problem-solving-broken-css-ie

Campo para calcular otros campos en Drupal

Necesitaba un campo cuyo resultado fuese el cálculo de una operación entre otros campos de un mismo nodo. Encontré el módulo Computed Field, que además de calcular el valor lo guarda.

También hay otro módulo que hace algo parecido, Dynamic Field, pero este no guarda el cáculo, sólo lo muestra en vivo cuando vemos un nodo, y por ello no sirve para utilizarlo por ejemplo con el módulo Views.

IMPORTANTE: si añadimos el campo Computed Field después de haber creado los nodos, sólo mostrará el valor si volvemos a guardar los nodos.

Enlaces a la misma página en Drupal

Tenía un menú con enlaces primarios y cada ítem tenía un subítem del siguiente modo:

  • ítem 1
    • subítem 1
    • subítem 2
    • subítem 3

No sabía cómo hacer para que el ítem 1 me enlazara a #, es decir, a la misma página en que uno está, pues en Drupal hay que enlazar siempre a un nodo, y no quería poner <front>.

Encontré el siguiente código, que debía pegarse dentro del código php del archivo template.php situado en el tema elegido:

<?php
function phptemplate_menu_item_link($link) {
  if (empty(
$link['localized_options'])) {
   
$link['localized_options'] = array();
  }
    if(
$link['href'] == "<front>")    {
    return
"<a href=\"#\">$link[title]</a>";
    }
    else
    {
      return
l($link['title'], $link['href'], $link['localized_options']);
    }
}

?>

Fuente: http://drupal.org/node/128618#comment-979977

Ahora he visto que también hay un módulo para ello, aunque no lo he probado:

http://drupal.org/project/special_menu_items

Pantalla en blanco en el Webform de Drupal

Tenía un formulario en Drupal hecho con el módulo Webform. Cuando daba al botón de enviar no me iba a la ventana de confirmación, sino que me salía la típica venta en blanco de Drupal (vamos, que el navegador se quedaba en blanco).

Como casi siempre me ocurre en Drupal, casi me vuelvo loco encontrando una solución. Por fin encontré una solución en el siguiente enlace:

http://community.contractwebdevelopment.com/drupal-blank-screen-after-submit

Lo que pasaba era que anteriormente había modificado el archivo "template.php" de mi plantilla de Drupal, con el fin de añadir un código de php. El error fue añadir el código entero previamente, incluyendo los caracteres de apertura y cierre <?php   ?>. Todo se solucionó cuando añadí el código dentro de los que ya existían, justo antes de <?php.

Por lo visto, según explican en el enlace adjunto, no debe haber ningún espacio después de ?>, vamos, que sólo haya un sólo cierre, y por lo tanto una sola apertura del código php.

Hay todo un hilo de Drupal en que explican posibles causas a la pantalla en blanco:

http://drupal.org/node/158043

Elementos de menú que enlazan a la página actual

Estaba volvíendome loco buscando cómo conseguir que los botones padre de mi menú no enlazasen a ninguna página (el equivalente a un enlace href="#").
 
Encontré la solución en el siguiente enlace:
 
 
Simplemente basta con editar el archivo template.php del tema de drupal elegido, y escribir al comienzo el siguiente código:
 
<?php
function phptemplate_menu_item_link($link) {
  if (empty(
$link['localized_options'])) {
   
$link['localized_options'] = array();
  }
    if(
$link['href'] == "<front>")    {
    return
$link[title];
    }
    else
    {
      return
l($link['title'], $link['href'], $link['localized_options']);
    }
}

?>
 
Posterioremente descubrí que el hecho de copiar este código al principio del archivo template.php me provocaba un error en el módulo webform: se producía la típica pantalla en blanco de Drupal cuando el formulario intentaba abrir la ventana de confirmación del envío. La solución fue simplemente copiar la función dentro de la apertura de código <?php que ya incluía la plantilla.

Error en el módulo Link Image Field de Drupal

Buscaba un módulo que me permitiese añadir imágenes con enlace a Drupal. Encontré el módulo Link Image Field

El problema fue que no me funcionaba correctamente, y me salía el siguiente error:

warning: Parameter 1 to theme_linkimagefield_widget() expected to be a reference, value given

Todo se solucionó con las instrucciones que encontré en Widget does not show up:

  • Edita el archivo linkimagefield_widget.inc en la línea 180.
  • Edita function theme_linkimagefield_widget(&$element) {
  • Quita & para que quede como function theme_linkimagefield_widget($element) {

Habilitando urls limpios en Drupal

Para poder habilitar urls limpias en Drupal, dentro de la configuración de php en el servidor Apache, tuve que hacer un par de cambios dentro del archivo httpd.conf:

1)

AllowOverride None
a
AllowOverride All

2)

#LoadModule rewrite_module modules/mod_rewrite.so
a
LoadModule rewrite_module modules/mod_rewrite.so

Con el primer cambio queda habilitado el archivo .htaccess dentro del direcctorio raíz de drupal, y así puede leer las órdenes que se refieren a la reescritura de urls.

Para más información leer el asunto http://drupal.org/node/15365

Migrar de servidor un sitio de Drupal

Acabo de subir mi sitio de Drupal desde mi servidor local al servidor de mi alojamiento web. El siguiente enlace me ha sido de bastante utilidad:

http://www.javiermaties.com/sipuedo/2008/06/26/migrar-un-sitio-drupal-a-otro-servidor/

Yo he seguido los siguientes pasos:

  • instalar en Drupal, aún en mi servidor local, el módulo Backup and Migrate, que en concreto lo he utilizado para exportar una copia de la base de datos de mi sitio;
  • en el servidor remoto he creado una nueva base de datos. A continuación, desde el panel de administración de las bases de datos de mi servidor remoto, he importado dentro de la nueva base de datos las tablas que había exportado anteriormente;
  • utilizando FileZilla, he subido al servidor remoto vía ftp todos los archivos que componen mi sitio de Drupal;
  • dentro del servidor remoto, he editado el archivo sites\default\settings.php, y he cambiado los datos correspondientes al nuevo nombre de la base de datos (no he tenido que cambiarlo), y el nombre del host de las bases de datos de mi servidor remoto, así como el nombre y contraseña de acceso. Por cierto, tuve que habilitar el permiso de escritura para poder hacer este cambio (luego lo quité dicho permiso, por seguridad).
  • finalmente, accedí a la dirección http de mi sitio y actualicé el nuevo sitio con update.php: www.misitio.com/update.php

Aún tuve que hacer algún ajuste más:

  • ir a Configuración del sitio > Sistema de archivos y cambiar la ruta de la carpeta temporal, ya que aún apuntaba a mi servidor local (y me daba el mensaje de error en el "ImageCache Temp Directory").

Tras estas operaciones el sitio me ha funcionado sin problemas.

Páginas de administración de acceso en Drupal

Tras habilitar el módulo admin-menú para un rol, tenía el problema de que tras iniciar un usuario de dicho rol no me aparecían las opciones administrativas.

Después de estar volviéndome loco descubrí que tenía que habilitar el permiso módulo system > páginas de administración de acceso para dicho rol.

Distribuir contenido