Bir menü öğesi türünü değiştirmek için hook_menu_alter () öğesine eşdeğer nedir?


10

Drupal 8'deki menü türünü değiştirmek istiyorum. Drupal 7'de hook_menu_alter kullanarak bunu başarabiliriz.

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

Benzer şekilde Drupal 8'deki menü türünü değiştirmek istiyorum. Nasıl yapabilirim. Teşekkür ederim.



Berdir'in belirttiği gibi, artık menü türü yok. Neleri arşivlemeye çalıştığınızı belirtebilir misiniz?
Linus

Yanıtlar:


7

Linus'un cevabı harika olsa da, özel sorunuz hakkında geri bildirim sağlamaz:

Benzer şekilde Drupal 8'deki menü türünü değiştirmek istiyorum

Drupal 8'de bir menü türü diye bir şey yoktur. Eskiden bir tür olan her şey şimdi tamamen farklı bir şeydir. Güzergahlar, Menü Bağlantıları, Yerel Görevler, Yerel Eylemler. Ve sık sık, birden çok şeyiniz var. Her zaman bir rotanız vardır (7.x bu tür geri aramayı çağırmak için kullanılır). Ayrıca, bu rota için menü bağlantıları, yerel görevler veya eylemler eklersiniz.

Dolayısıyla, bir menü bağlantısını yerel bir göreve, hatta yerel bir göreve giden bir rotaya dönüştüremezsiniz. Yapabileceğiniz tek şey, örneğin bir menü bağlantısını değiştirmek (yukarıda belirtilen rota değişikliği ile ilgisi yoktur) ve bunun yerine yeni bir yerel görev oluşturmaktır.

Bağlantılar ve bunların her birinin nasıl yapılacağı hakkında daha fazla bilgi için Linus'un cevabına bakın.


Haklısın, bundan bahsetmeyi tamamen unuttum. Eklediğiniz için teşekkürler.
Linus

19

Drupal 8'in yeni bir menü sistemi var, artık yok hook_menuve hook_menu_alteryok.

Mevcut bir rotayı değiştirmek isterseniz, Drupal 7'ye kıyasla biraz daha karmaşıktır.

Senin modülde bir sınıf dosyası oluşturmak zorunda YOURMODULE/src/Routing/CLASSNAME.phpolduğunu uzanır 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...
  }
}

Sen alabilir RouteSubsciber örnek olarak düğüm modülünün sınıfını.

RouteSubscriber'ınızın tanınmasına izin vermek için ayrıca YOURMODULE.services.ymlmodül dizininizin kökünde bir dosya oluşturmanız gerekir:

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

Yeni menü sistemi hakkında daha iyi bir fikir edinmek için aşağıdaki makaleleri tavsiye ederim:

Düzenleme: Berdir tarafından belirtildiği gibi , menü sistemi artık D7'nin menü sistemi ile ilgisi olmayan farklı bir yapıya sahip, bu yüzden artık bir menü türü diye bir şey yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.