¿Cómo creo y uso un gancho personalizado?

10

Publiqué una pregunta aquí , que tenía una sugerencia, pero no hubo respuesta. ¿Alguien tiene algún consejo sobre cómo implementar un enlace personalizado en Drupal 8 que permitirá a otros módulos actualizar una tabla de contenido creada por un módulo principal? La tabla de contenido será una lista desordenada.

Kevin Nowaczyk
fuente
2
Eche un vistazo a la sección bajo "Para definir un gancho:" aquí , ¿eso ayuda?
Clive
Solo parcialmente. Esto explica cómo crear un enlace para que lo use la función secundaria, pero nada sobre cómo el módulo principal representa el contenido. ¿El padre usa un controlador para agregar contenido a, digamos, $ output ['table_of_contents'] y luego el gancho del padre agrega los datos que se devuelven del niño a esta matriz?
Kevin Nowaczyk
2
@KevinNowaczyk depende del propósito del gancho. Un gancho no es específico para el renderizado, pero puede usarse para ello. Si desea crear un enlace personalizado para proporcionar contenido e invoca el enlace en el lugar donde necesita el contenido, funcionará. Y debido a que el gancho es personalizado y nuevo para su función, debe definir cómo debe proporcionar sus resultados. Luego, si invoca el enlace durante la función de representación principal, puede recibir los resultados en un formato utilizable.
Neograph734

Respuestas:

8

Esta sección reside en un controlador en el módulo principal:

$plugin_items = [];
// Call modules that implement the hook, and let them add items.
\Drupal::moduleHandler()->alter('flot_examples_toc', $plugin_items);
if (count($plugin_items > 0)) {
  $output['plugins'] = [
    '#title' => 'Plugins',
    '#theme' => 'item_list',
    '#items' => $plugin_items,
  ];
}

Y esto reside en el archivo hijo [módulo] .module.

use Drupal\Core\Url;

function mymodule_flot_examples_toc_alter(&$item_list) {
  $options = [
    ':one' => Url::fromRoute('flot_spider_examples.example')->toString(),
  ];
  $item_list[] = t('<a href=":one">Spider Chart</a> (with spider plugin)', $options);
}

El padre crea una matriz y se la pasa a los niños por referencia. Pueden alterar la matriz agregándole elementos. El padre luego lo agrega a la matriz de renderizado.

Kevin Nowaczyk
fuente
5

Solo por simplicidad si desea crear y usar un enlace personalizado en drupal 8 para que otros desarrolladores lo usen

primero para ayudar a otros a definir el uso de su enlace en el archivo mymodule.api.php, este enlace puede actuar sobre cualquier cosa requerida.

ejemplo:

 // my hook 
 function hook_mymodule_alter_something(array &$data) {
   // here others will make a module that will call this to alter "$data"
 }

entonces cuando sea necesario en su módulo.

 \Drupal::moduleHandler()->invokeAll('mymodule_alter_something', [&$data]);

entonces el otro desarrollador puede hacer uso de esto llamando

function MYOTHERMODULE_mymodule_alter_something($data) {
Taggart Jensen
fuente