Qual è l'equivalente di hook_menu_alter () per modificare un tipo di voce di menu?


10

Voglio cambiare il tipo di menu in Drupal 8. In Drupal 7 possiamo ottenere questo risultato usando hook_menu_alter

function module_menu_alter(&$items) {
  $items['admin/config/people/ip-blocking/default'] = array(
    'title' => 'Block IP Address',
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );
}

Allo stesso modo, voglio cambiare il tipo di menu in Drupal 8. Come posso farlo. Grazie.



Come menzionato da Berdir, non esiste più alcun tipo di menu. Puoi forse specificare cosa stai cercando di archiviare?
Linus,

Risposte:


7

Sebbene la risposta di Linus sia ottima, non fornisce feedback sulla tua domanda specifica:

Allo stesso modo voglio cambiare il tipo di menu in Drupal 8

Non esiste un tipo di menu in Drupal 8. Tutto ciò che era un tipo ora è completamente diverso. Percorsi, collegamenti ai menu, attività locali, azioni locali. E spesso hai più cose. Hai sempre un percorso (7.x utilizzato per chiamare questo tipo di callback). Inoltre, aggiungi collegamenti a menu, attività o azioni locali per quel percorso.

Pertanto, ad esempio, non è possibile convertire un collegamento di menu in un'attività locale o persino un percorso in un'attività locale. L'unica cosa che potresti fare è ad esempio modificare un collegamento di menu (che non ha nulla a che fare con il cambio di percorso menzionato sopra) e creare invece una nuova attività locale.

Vedi la risposta di Linus per i collegamenti e ulteriori informazioni su come fare ognuna di queste cose.


Hai ragione, ho completamente dimenticato di menzionarlo. Grazie per l'aggiunta.
Linus,

19

Drupal 8 ha un nuovo sistema di menu, non c'è più hook_menue non c'è hook_menu_alterpiù.

Se vuoi modificare un percorso esistente, è un po 'più complicato rispetto a Drupal 7.

Nel tuo modulo devi creare un file di classe YOURMODULE/src/Routing/CLASSNAME.phpche si estende RouteSubscriberBase:

/**
 * @file
 * Contains \Drupal\YOURMODULE\Routing\RouteSubscriber.
 */

namespace Drupal\YOURMODULE\Routing;

use Drupal\Core\Routing\RouteSubscriberBase;
use Symfony\Component\Routing\RouteCollection;

/**
 * Listens to the dynamic route events.
 */
class RouteSubscriber extends RouteSubscriberBase {

  /**
   * {@inheritdoc}
   */
  protected function alterRoutes(RouteCollection $collection) {
    // Get the route you want to alter
    $route = $collection->get('system.admin_content');

    // alter the route...
  }
}

È possibile prendere la classe RouteSubsciber del modulo nodo come esempio.

Per far riconoscere il tuo RouteSubscriber devi anche creare un YOURMODULE.services.ymlfile nella radice della directory dei tuoi moduli:

services:
  node.route_subscriber:
    class: Drupal\YOURMODULE\Routing\RouteSubscriber
    tags:
      - { name: event_subscriber }

Per avere una visione migliore del nuovo sistema di menu, consiglierei i seguenti articoli:

Modifica: Come menzionato da Berdir , il sistema di menu ora ha una struttura diversa, che non ha nulla a che fare con il sistema di menu di D7, quindi non esiste più un tipo di menu.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.