Cuando pensar deja de
Hasta hace poco, escribir un texto, comparar varias opciones o resolver una duda exigía recorrer un…
Buscar
Hasta hace poco, escribir un texto, comparar varias opciones o resolver una duda exigía recorrer un…
La personalización se ha convertido en una promesa habitual en muchos productos digitales. Poder…
La medición en marketing ha servido muchas veces para mirar hacia atrás: revisar resultados,…
En el Drupal 7 había algunas opciones sencillas de implementar esta funcionalidad. Tenías el Admin_theme o el themeKey para cambiar de Tema según tu propia regla. Que yo sepa, estos módulos no tienen una versión oficial para el Drupal 8. Así que he tenido que implementar la funcionalidad en un módulo básico personalizado. La interfaz ThemeNegotiatorInterface de Drupal 8 proporciona una forma en el que los desarrolladores pueden crear su propia clase para gestionar el cambio de tema.
Recibe las últimas novedades directamente en tu correo. Sin spam.
Así es como me ha funcionado (solo el código):
mi_modulo.info.yml
name: Mi Modulo
description: 'Switches the active theme based on the users or roles.'
type: module
core: 8.x
services:
theme.negotiator.mi_modulo:
class: Drupal\mudar_tema\Theme\MiModuloNegotiator
tags:
- { name: theme_negotiator, priority: 10 }
/**
* @file
* Contains \Drupal\mi_modulo\Theme\MiModuloNegotiator.
*/
namespace Drupal\mi_modulo\Theme;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Theme\ThemeNegotiatorInterface;
class MiModuloNegotiator implements ThemeNegotiatorInterface {
/**
* @param RouteMatchInterface $route_match
* @return bool
*/
public function applies(RouteMatchInterface $route_match)
{
return $this->negotiateRoute($route_match) ? true : false;
}
/**
* @param RouteMatchInterface $route_match
* @return null|string
*/
public function determineActiveTheme(RouteMatchInterface $route_match)
{
return $this->negotiateRoute($route_match) ?: null;
}
/**
* Función responsable por seleccionar un tema
* @param RouteMatchInterface $route_match
* @return bool|string
*/
private function negotiateRoute(RouteMatchInterface $route_match)
{
$userRolesArray = \Drupal::currentUser()->getRoles();
if (in_array("developer", $userRolesArray))
{
return 'seven';
}
return false;
}
}
Comentarios