Программное удаление пунктов меню в Drupal 10: подробное руководство

В Drupal 10 управление пунктами меню является важным аспектом создания хорошо структурированного веб-сайта. Хотя административный интерфейс обеспечивает интуитивно понятный способ добавления и удаления пунктов меню, могут возникнуть ситуации, когда вам придется выполнять эти действия программным способом. В этой статье мы рассмотрим несколько способов удаления пунктов меню с сайта Drupal 10 на примерах кода.

Методы программного удаления пунктов меню:

  1. Использование интерфейса MenuLinkManager:

    use Drupal\Core\Menu\MenuLinkManagerInterface;
    /
    * Removes all menu items from a specific menu.
    *
    * @param string $menuName
    *   The machine name of the menu.
    */
    function remove_menu_items($menuName) {
    // Get the menu link manager service.
    $menuLinkManager = \Drupal::service('plugin.manager.menu.link');
    // Load all menu links for the specified menu.
    $menuLinks = $menuLinkManager->loadLinksByRoute('<front>', $menuName);
    // Delete each menu link.
    foreach ($menuLinks as $menuLink) {
    $menuLink->delete();
    }
    }
  2. Использование сущности MenuLinkContent:

    use Drupal\menu_link_content\Entity\MenuLinkContent;
    /
    * Removes all menu items from a specific menu.
    *
    * @param string $menuName
    *   The machine name of the menu.
    */
    function remove_menu_items($menuName) {
    // Load all menu links for the specified menu.
    $menuLinks = MenuLinkContent::loadByProperties(['menu_name' => $menuName]);
    // Delete each menu link.
    foreach ($menuLinks as $menuLink) {
    $menuLink->delete();
    }
    }
  3. Использование EntityQuery:

    use Drupal\Core\Entity\EntityTypeManagerInterface;
    /
    * Removes all menu items from a specific menu.
    *
    * @param string $menuName
    *   The machine name of the menu.
    */
    function remove_menu_items($menuName) {
    // Get the entity query service.
    $entityQuery = \Drupal::service('entity.query');
    // Load all menu links for the specified menu.
    $menuLinkIds = $entityQuery->get('menu_link_content')
    ->condition('menu_name', $menuName)
    ->execute();
    // Load and delete each menu link.
    $menuLinks = \Drupal::entityTypeManager()
    ->getStorage('menu_link_content')
    ->loadMultiple($menuLinkIds);
    foreach ($menuLinks as $menuLink) {
    $menuLink->delete();
    }
    }

Программное удаление пунктов меню в Drupal 10 может быть достигнуто различными методами. В этой статье мы рассмотрели три различных подхода: использование MenuLinkManagerInterface, сущности MenuLinkContent и EntityQuery. В зависимости от ваших конкретных требований и предпочтений в области кодирования вы можете выбрать метод, который лучше всего соответствует вашим потребностям. Используя эти методы, вы можете эффективно управлять пунктами меню на своем сайте Drupal 10.