Paneles sin Panels en Drupal 8

Posted by Charlotte León on 26 de Agosto de 2016
Development
Strategy & Architecture

La estabilidad de los paneles en Drupal 8 está mejorando cada día. Pero en caso de que quieras construir algo similar a una página con paneles, sin necesidad de utilizar paneles... puedes hacerlo con el uso de un controlador y una plantilla twig personalizado.

Twig es el nuevo motor de plantillas introducido en Drupal 8. Twig nos proporciona una forma rápida y segura para organizar la lógica de PHP de una manera que hace que sea más sencillo para los desarrolladores de plantilla. (Más información disponible en http://twig.sensiolabs.org )

Con la ayuda de la consola de Drupal generamos un módulo personalizado con el siguiente comando:

$ drupal generate:module [options]

También generamos un controlador:

$ drupal generate:controller [options]

** Las opciones para la generación variarán dependiendo de lo que necesitas. **

A continuación, habilitamos el módulo personalizado  y el módulo twig_tweak:

$ drush en custom_module twig_tweak -y

En el directorio de módulos, en el módulo personalizado que acabamos de crear, nos encontramos con el directorio src/Controller y con el nuevo controlador de clase (es decir ResourceLinks.php)

 

<?php
namespace Drupal\custom_module\Controller;
use Drupal\Core\Controller\ControllerBase;
/**
 * Class ResourceLinks.
 *
 * @package Drupal\custom_module\Controller
 */
class ResourceLinks extends ControllerBase {
  /**
   * Page.
   *
   * @return array
   *   Render array for the page
   */
	public function page() {
		return [
			'#theme' => 'custom_resource_links',
		];
	}
}

Y en nuestro archivo custom.module es nuestro hook_theme:

<?php

use Drupal\Core\Routing\RouteMatchInterface;

/**
 * Implements hook_help().
 */
function custom_module_help($route_name, RouteMatchInterface $route_match) {
  switch ($route_name) {
    // Main module help for the custom_module module.
    case 'help.page.custom_module':
      $output = '';
      $output .= '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t('The Custom module provides custom configuration') . '</p>';
      return $output;

    default:
  }
}

/**
 * Implements hook_theme().
 */
function custom_module_theme($existing, $type, $theme, $path) {
	return [
		'custom_resource_links' => [
			'variables' => [],
		],
	];
}

La copia en el módulo personalizado es muy básica.  La versión actual de la plantilla residirá en el tema personalizado para el sitio. Una versión de la plantilla se requiere en el módulo personalizado. Pero queremos mantener todas nuestras plantillas personalizadas en el tema personalizado. Así que basta con añadir un par de líneas muy básicas en la plantilla del módulo.

file: custom-resource-links.html.twig

<div class="resource-links"></div>

The full contents of the template in your custom theme:

{{ drupal_block('resource_links_introduction') }}
<h2> {% trans %}Resources by Type{% endtrans %}</h2>
<div class="match-height col-sm-6">
    <h4>Type of links:</h4>
    {{ drupal_block('views_block__resource_links_block_1') }}
</div>
<div class="match-height col-sm-6">
    {{ drupal_block('resource_links_instruction') }}
</div>

 

¿Está buscando construir o personalizar un sitio de Drupal? Escríbanos sobre su proyecto y nos pondremos en contacto con usted dentro de 48 horas.

Si desea obtener más información sobre por qué Drupal es el sistema de gestión de contenido de código abierto más utilizado en el mundo, visite drupal.org/about.


Paneles sin Panels en Drupal 8