Enlace a facebook.
digitalDot diseño webLogo Diseño Web digitalDot

Cómo migrar Drupal 7 a Drupal 8

21/01/2019

Migrar Drupal 7 a 8 por digitalDot

¿Quién de vosotros tiene una web con Drupal?, pues seguro que estaréis al tanto de los recientes fallos de seguridad que se han descubierto en Drupal 7.

Dichos fallos han sido uno de los motivos por los que en digitalDot hemos comenzado a migrar webs de la versión 7 a Drupal 8, además, de por las mejoras en usabilidad y en funcionalidades que ofrece la versión 8.

Si trabajáis con Drupal os vamos a enseñar cómo cambiar de Drupal 7 a Drupal 8 para que podáis hacer vosotros mismos la migración.

Cambiar Drupal 7 por Drupal 8

Para comenzar el proceso migración debemos crear una web bajo este motor, Drupal 8, siguiendo las instrucciones de instalación.

Una vez tenemos nuestra versión instalada accedemos a la web de gestión.

Recordad que los paneles de administración en Drupal son añadiendo /user lo cual os recomendamos cambiar para evitar ataques de fuerza bruta.

Una vez dentro debemos acceder a la opción de Extender donde podemos encontrar todos los módulos y funcionalidades de Drupal.

Migración drupal por digitalDot

Aquí encontraremos 3 módulos para facilitarnos el proceso de traspasar una instalación en Drupal 6 o 7 a la versión Drupal 8.

Migración drupal 7. digitalDot

Entramos en la url /upgrade

migración drupal 8. digitalDot

Donde al darle a Continuar deberemos establecer los datos de conexión de la base de datos y versión.

migración drupal 7 a 8

Tras realizar una comprobación de los módulos de actualización y ver aquellos que son compatibles se lanzara el proceso de migración.

proceso migración drupal. digitalDot

¿En qué se diferencia Drupal 7 de Drupal 8?

Uno de los parámetros que cambia, como novedad, es la cache de renderizado de los temas o diseños elegidos. Si vamos a maquetar o programar un Template debemos primeramente deshabilitarlo.

La guía oficial la podéis encontrar en la página de Drupal.

Copiamos el fichero example.setting.local.php por setting.local.php dentro de la carpeta sites de nuestra página web.

migración a drupal 8 por digitalDot

Ahora sobre el fichero setting.php descomentamos la línea

De drupal 7 a 8 por digitalDot

Y descomentamos la siguiente línea

Migración a drupal 8

Deshabilitamos la cache dinámica

cache dinámica drupal

Para poder tener el control cambiaremos las líneas de css y js

linea css drupal

por

linea js drupal

En esta ocasión permitiremos la ejecución de módulos en test

módulos test drupal

Finalmente lo hacemos por comandos tras instalar el Drupal Console siguiendo este procedimiento:

migración drupal 7 a 8

Algunos códigos de programación que cambian y sus equivalencias son:

Para conseguir la ruta del tema

<?php echo $base_dir; ?>

por

{{base_path ~ directory}}

Para traducir un texto dentro de nuestra plantilla

<?php print t('traducir-drupal8'); ?>

por

{{ 'traducir-drupal8'|t }}
<?php print $site_slogan; ?>

No podemos olvidarnos del SEO y uno de los puntos que necesitaremos, para un correcto posicionamiento orgánico en Drupal 8, será activar las URLs amigables.

Para ello descargamos y lo descomprimimos sobre la carpeta Modules

Necesitaremos cubrir la dependencia del módulo ctools y el módulo Token.

Ahora ya tendremos el módulo para instalar

url amigable drupal

Vamos al módulo de URL amigables y activamos que autogenere alias para el contenido, bloques o vistas en Configuración>Search and Metadata -> url aliases

urls amigables drupal

Configuramos la forma de separadores, palabras a excluir y caracteres máximos por URL

configuración drupal 8

Si queremos crear Drupal en varios idiomas

drupal idiomas

Uno de los problemas que hemos encontrado en esta última versión, y que es fácil de resolver, es que la opción de traducir los menús está desactivada, por lo que si vamos a trabajar con una página web en varios idiomas será recomendable activar las traducciones sobre contenido, menú y bloques.

idiomas drupal

Otro de los cambios a la hora de programar es la llamada a variables globales.

Antiguamente era:

global $language;

que cambia a:

$language = \Drupal::languageManager()->getCurrentLanguage();

Para conseguir el ID de nuestro idioma usaremos:

$language->getId()

Otro de los cambios es la obtención de los datos de usuario:

En Drupal 7 era:

Global $user

Y en Drupal 8

$account = \Drupal::currentUser();

Otra diferencia entre las dos versiones de Drupal es que en Drupal 8 cambia la sintaxis al registrar operaciones en el visor de sucesos, pasando de ser:

watchdog ('my_module', $message, array (), WATCHDOG_ERROR);

a

\Drupal::logger('my_module')->notice($message);

Una de las utilidades que hemos visto desaparecer en Drupal 7 ha sido su forma peculiar de redireccionar una página web. Se ha remplazado:

Drupal_goto(“www.google.es”);

por

use Symfony\Component\HttpFoundation\RedirectResponse;

return new RedirectResponse("$base_url/bigmat/proyectos");

Otra de sus novedades son los cambios en conexiones a base de datos MYSQL. Una consulta SELECT en la versión Drupal 6 y 7 tenía este formato:

$result = db_select($tabla, 'n')

        ->condition('activo', 0)

        ->extend('TableSort')

        ->extend('PagerDefault')

        ->limit(15)

        ->fields('n');

para Drupal 8 la consulta SELECT es:

$query = \Drupal::database()->select($tabla, 'u');

        $query->fields('u');

        $query-> condition('activo', 0);

        $result = $query->execute()->fetchAll();

Para debugear una consulta cambiamos:

Dpq($query);

por

$demo = $listvotos->addTag('debug')->execute();

print_r($demo->queryString);die;

Ahora os vamos a mostrar cómo crear un markup. Este elemento es muy útil cuando intentas crear un modal en Drupal o para crear enlaces personalizados.

  $form['account']['submit_cancel'] = array(

                '#type' => 'item',

                '#markup' => '<a href="'.$base_url.'">'.$this->t('Cancel').'</a>',

            );

Uno de los puntos al que más nos ha costado acostumbrarnos son los access_denied, en esta versión de Drupal 8:

if(!user_access('Acceso Cursos')){

drupal_access_denied();

}

Lo sustituimos por:

$account = \Drupal::currentUser();

$permisos = \Drupal::currentUser()->hasPermission('Acceso Cursos');

if(!$permisson){

throw new AccessDeniedHttpException();

}

Por último, no queremos dejar de comentar el cambio de colocación de enlaces en tablas.

Sin duda Drupal 8 ofrece nuevas funciones que en cuanto a organización y estructura están mejor en esta nueva actualización del core de Drupal, pero hemos de decir que esta no ha sido la que más nos ha convencido.

foreach ($results as $result) {

$output[] = [

'Title' => new FormattableMarkup('<a href=":link">@name</a>',

[':link' => $result->url,

<a href="mailto:'@name'">'@name'</a> => $result->titulo]),

'VALIDATE' => $validado,

];

}

Después de mostraros todos estos cambios, esperamos que os haya servido de ayuda a todos aquellos que os adentráis en el mundo del desarrollo web y más en concreto de este potente CMS.

Si tenéis alguna duda o queréis hacernos algún comentario no os cortéis y contactad con el equipo de desarrollo de Drupal de digitalDot escribiéndoles a [email protected]

mejoras en drupal 8. digitalDot

crossmenuchevron-down