Cómo solucionar en el campo Body de Drupal 7 «Este campo está desactivado porque no tiene permisos suficientes para editarlo»

En Drupal 7 podemos tener un problema después de crear un nuevo rol pues puede darse la circunstancia que los usuarios que tienen ese rol no puedan editar el campo Body, apareciendo el siguiente mensaje dentro del Body: «Este campo está desactivado porque no tiene permisos suficientes para editarlo.». Esto sucede porque nuestro usuario no tiene permisos suficientes para escribir en un campo que puede que esté en Full HTML o Filtered HTML y ese rol sólo tiene permisos para Plain text.

Para solucionarlo tenemos que hacer lo siguiente:

  1. Vamos a Configuración, y en el bloque Autoría de Contenido pinchamos en «Formatos de Texto»
  2. Nos encontraremos con «Filtered HTML», «Full HTML», «Plain text» y puede que «PHP code». Veremos a la derecha si nuestro rol tiene permiso para utilizar Full o Filtered HTML
  3. Empezamos activando para Filtered HTML nuestro Rol y vemos si con esto ya podemos editar el campo Body.
  4. Si siguiera si verse activamos Full HTML para nuestro rol y ya se podrá editar sin problemas el campo Body

Cómo sumar valores de un field collection en un field computed en Drupal 7

Si tenemos un campo field collection con campos como números decimales, números enteros, etc. es posible que queramos sumar esos valores en otro campo Computed.

Por ejemplo imaginemos que tenemos un campo field collection llamado: field_superf y este tiene campo de texto Nombre y un campo decimal llamado field_constr y tenemos los siguientes datos:

Sotano 50,00 m2

Planta baja 60,00 m2

Los valores del campo field_constr los podemos sumar en otro campo Computed escribiendo lo siguiente en el Computed Code (PHP):

$sum = 0;
$wrapper = entity_metadata_wrapper($entity_type, $entity);
foreach($wrapper->field_superf as $collection) {
$sum += $collection->field_constr->value();
}
$entity_field[0]['value'] = $sum;

Donde hemos puesto field_superf ponemos el nombre del campo field collection y donde hemos puesto field_constr ponemos el nombre del campo del que queremos sumar todos sus elementos.

En el Display Code (PHP) ponemos:

$display_output = $entity_field_item['value'];

Al ver el resultado obtendríamos en este caso: 110,00, que es la suma de 50,00 y 60,00 del ejemplo que hemos visto.

Cómo traducir los links Edit, Delete, Add en Field Collection en Drupal 7

Para traducir Edit, Delete, Add en el modulo Field Collection en Drupal 7 podemos perder el tiempo intentándolo buscar en Traducir Interfaz y no encontrarlo.

Field Collection con Edit, Delete y Add
Field Collection con Edit, Delete y Add

Para adaptarlo a nuestras necesidades es mucho más sencillo.Vamos al Tipo de Contenido donde esta el Field Collection y pulsamos en Gestionar Presentación. Buscamos nuestro Field Collection y veremos que tenemos lo siguiente:

Vemos el campo field collection con sus links como Edit, Delete y Add
Vemos el campo field collection con sus links como Edit, Delete y Add

Vemos que tiene como Links: Edit, Delete, Add. Damos al botón de la derecha para editar este campo. Lo pulsamos y vemos esto:

Opciones en Field Collection
Opciones en Field Collection

Cambiamos los valores como queramos (en nuestro caso Editar, Eliminar y Añadir) y guardamos, con lo que vemos esto:

Links de field collection cambiados
Links de field collection cambiados

Ahora si volvemos a la vista de un nodo de este tipo de contenido vemos lo siguiente:

Nodo con los links de field collection traducidos
Nodo con los links de field collection traducidos

Con lo que ya tenemos los links de field collection traducidos.

 

Cómo solucionar si nos ha bloqueado la cuenta del administrador de Drupal 7 después de 5 intentos de introducir la contraseña erroneamente

Nos puede suceder que entremos a una web de Drupal 7 que teníamos olvidada y tras 5 intentos de introducir el usuario y la contraseña incorrecta nos bloquee temporalmente ese usuario. Si no nos funciona Drush y no tenemos acceso al correo electrónico la solución es borrar el contenido de la tabla food, que es donde se guardan los intentos de entrada.
Para hacerlo vamos a phpmyadmin por ejemplo y ejecutamos:

DELETE FROM `flood`;

Después de esto podremos intentar otras 5 veces acceder con nuestro usuario y contraseña.

Cómo actualizar Drupal de 6.28 a 6.29

Hemos seguido los siguientes pasos para actualizar de Drupal 6.28 a Drupal 6.29:

1) Ponemos nuestra web con Drupal 6.28 en mantenimiento

2) Hacemos una copia de seguridad de todo, incluyendo archivos y base de datos

3) Borramos todos los archivos de la instalación antigua (Drupal 6.28) menos lo siguiente:

  • carpeta /sites
  • .htaccess
  • robot.txt

4) Descargamos la versión de Drupal 6.29, la descomprimimos y borramos los siguientes archivos y carpetas

  • .htaccess
  • robot.txt
  • carpeta /sites

5) Subimos esta versión modificada de Drupal 6.29 sobreescribiendo lo que sea necesario

6) Vamos al archivo settings.php y en la línea $update_free_access = FALSE; la cambiamos por $update_free_access = TRUE;

7) Vamos a http://web/update.php para actualizar la base de datos

8) Vamos al archivo settings.php y en la línea $update_free_access = TRUE; la cambiamos por $update_free_access = FALSE;

9) Ponemos el sitio online

Con esto ya tenemos a actualización completada

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 WidgetEntityreference prepopulateInline 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.

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

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 cambiar según el idioma las imágenes del slideshow del theme Danland

Si estamos utilizando el theme Danland en Drupal 6 o 7 puede que necesitemos que el slideshow de la página inicial cambie según estemos en un idioma u otro. Esto puede ser por muchos motivos, por ejemplo, queremos insertar en la imagen con un texto y necesitamos que se muestre este texto de forma correcta en cada idioma.

Para esto tenemos que ir a la ruta donde hemos instalado el theme Danland en Drupal, es decir:
sites/all/themes/danland

Si vamos a la carpeta images y dentro de slideshows: es decir: /images/slideshows nos encontramos por defecto 3 imagenes: noon.jpg, sea.jpg y snow.jpg. Imaginemos que estas imágenes son para el idioma español y para el idioma inglés ponemos en esta carpeta 3 imágenes más: noon_en.jpg, sea_en.jpg y snow_en.jpg.

Ahora en la raíz de Danland editamos el archivo: page.tpl.php. En la línea 82 en Drupal 7 nos encontramos lo siguiente:

<div class="slideshow">
<img src="<?php print $base_path . $directory; ?>/images/slideshows/sea.jpg" width="950" height="355" alt="slideshow 1"/>
<img src="<?php print $base_path . $directory; ?>/images/slideshows/noon.jpg" width="950" height="355" alt="slideshow 2"/>
<img src="<?php print $base_path . $directory; ?>/images/slideshows/snow.jpg" width="950" height="355" alt="slideshow 3"/>
</div>

Vemos que con este código se muestran siempre las imágenes sea.jpg, noon.jpg y snow.jpg. Si queremos que sólo para el idioma español se muestren estas y para el idioma inglés se muestren: noon_en.jpg, sea_en.jpg y snow_en.jpg tenemos que añadir el siguiente código PHP:

<div class="slideshow">
<?php
  global $language;
  if($language->language == "es"){  //Suponiendo que esta en español
     //Pongo las imagenes que quiero que salgan en español
     ?>
<img src="<?php print $base_path . $directory; ?>/images/slideshows/sea.jpg" width="950" height="355" alt="slideshow 1"/>
<img src="<?php print $base_path . $directory; ?>/images/slideshows/noon.jpg" width="950" height="355" alt="slideshow 2"/>
<img src="<?php print $base_path . $directory; ?>/images/slideshows/snow.jpg" width="950" height="355" alt="slideshow 3"/>
<?php
  }  
  else{
?>
<!-- Pongo las imagenes que quiero que salgan en el otro idioma, en este caso el único que tenemos es el inglés -->
<img src="<?php print $base_path . $directory; ?>/images/slideshows/sea_en.jpg" width="950" height="355" alt="slideshow 1"/>
<img src="<?php print $base_path . $directory; ?>/images/slideshows/noon_en.jpg" width="950" height="355" alt="slideshow 2"/>
<img src="<?php print $base_path . $directory; ?>/images/slideshows/snow_en.jpg" width="950" height="355" alt="slideshow 3"/>
<?php
  }
?>
</div>

Con esto ya se vería un slideshow diferente en cada idioma.