TechQA.

Drupal 8 remove extra divs and add custom classes in menu

1.5k views Asked by Niladri Banerjee - Uttarpara At 2019-02-13T05:12:54+00:00 13 February 2019 at 05:12 2025-12-20T19:27:46+00:00

Currently the {{page.primary_menu}} created the extra divs and default d8 classes as below:

<div class="region region-primary-menu">
    <nav role="navigation" aria-labelledby="block-demo-main-menu-menu" id="block-demo-main-menu">
            <h2 class="sr-only" id="block-demo-main-menu-menu">Main navigation</h2>

      
      <ul class="menu menu--main nav navbar-nav">
                      <li class="first">
                                        <a href="#mu-slider" data-drupal-link-system-path="<front>" class="is-active">Home</a>
              </li>
                      <li>
                                        <a href="/drupal8/" data-drupal-link-system-path="<front>" class="is-active">Home</a>
              </li>
                      <li class="last">
                                        <a href="#mu-about-us" data-drupal-link-system-path="<front>" class="is-active">ABOUT US</a>
              </li>
        </ul>
  

  </nav>

  </div>

However, I want to generate the menu structure as like:

<ul id="top-menu" class="nav navbar-nav navbar-right mu-main-nav">
    <li><a href="#mu-slider">HOME</a></li>
    <li><a href="#mu-about-us">ABOUT US</a></li>                       
    <li><a href="#mu-restaurant-menu">MENU</a></li>                       
    <li><a href="#mu-reservation">RESERVATION</a></li>                   
    <li><a href="#mu-gallery">GALLERY</a></li>
    <li><a href="#mu-chef">OUR TEAM</a></li>
    <li><a href="#mu-latest-news">BLOG</a></li> 
    <li><a href="#mu-contact">CONTACT</a></li> 
 </ul>

I've created a file name demo.theme and pasted the code but it did not give me the expected result.

<?php 
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Template\Attribute;

/**
 * Implements hook_preprocess_HOOK() for HTML document templates.
 *
 * Adds body classes if certain regions have content.
 */
function demo_menu_tree(&$variables) {

  return '<ul id="top-menu" class="nav navbar-nav navbar-right mu-main-nav">' . $variables['tree'] . '</ul>';

}

Any suggestion?

drupal drupal-8 drupal-menu
Original Q&A
1

There are 1 answers

0
Nate F. Nate F. On 2019-02-20T23:19:35+00:00 20 February 2019 at 23:19
  1. Make sure you have twig debugging enabled, it will make your life a lot easier, by adding comments to your mark up (which you can see inline in the web inspector). Using those comments you can figure out what you should name your theme file.

  2. Create a new custom twig file in the /templates directory of your theme like so themes/[your-theme-name-here]/templates/menu.html.twig. As a starting point I'd suggest either using the default classy theme menu.html.twig template, or clone use the file referenced inline in the markup comments of your site when you have twig debugging enabled.

  3. Edit the menu.html.twig file to meet your needs, something like this:

{% import _self as menus %}

{#
  We call a macro which calls itself to render the full tree.
  @see http://twig.sensiolabs.org/doc/tags/macro.html
#}
{{ menus.menu_links(items, attributes, 0) }}

{% macro menu_links(items, attributes, menu_level) %}
  {% import _self as menus %}
  {% if items %}
    {% if menu_level == 0 %}
      <ul id="top-menu" {{ attributes.addClass('nav navbar-nav navbar-right mu-main-nav') }}>
    {% else %}
      <ul class="menu">
    {% endif %}
    {% for item in items %}
      {%
        set classes = [
          'menu-item',
          item.is_expanded ? 'menu-item--expanded',
          item.is_collapsed ? 'menu-item--collapsed',
          item.in_active_trail ? 'menu-item--active-trail',
        ]
      %}
      <li{{ item.attributes.addClass(classes) }}>
        {{ link(item.title, item.url) }}
        {% if item.below %}
          {{ menus.menu_links(item.below, attributes, menu_level + 1) }}
        {% endif %}
      </li>
    {% endfor %}
    </ul>
  {% endif %}
{% endmacro %}

Related Questions in DRUPAL

  • Drupal image styles DivisionByZeroError
  • Drupal: MQLSTATE[42000]: Syntax error or access violation: 1142 INSERT command denied to user when accessing any page with a form
  • How can I add taxonomy to uploaded files through an api in Drupal 10
  • How to retrieve taxonomy term name in url instead of id in a drupal view?
  • Save button not displaying in drupal 9
  • how to do ajax callback in custom block, which will fetch records from database dynamically in Drupal 10?
  • Why are my form fields, built using Drupal Next.js Webforms, not displaying the Help Text?
  • Multiple replacement / substitute NGgram string SOLR 8.6
  • Drupal 9 Bartik (default theme) carried over from old Drupal seems to have previously worked but no longer renders HTML properly
  • Getting no State error with simplesamlphp library v 2.13
  • Using the Drupal Cache API for Drupal Entity Caching
  • drupal version issue drupal 8 to drupal 10
  • Why does my pure CSS parallax scrolling stop working on completion of page loading in Drupal 9
  • Getting the value from a multi-select list PHP in Drupal site
  • Parent menu link opens children when clicked, instead of going to link (Drupal)

Related Questions in DRUPAL-8

  • Parent menu link opens children when clicked, instead of going to link (Drupal)
  • How to disable cache in my custom contextual filter code in drupal?
  • group queries running frequently drupal 8
  • How to override page.html.twig in module for my custom page
  • Drupal Schema.org Metatag
  • How to render a specific page using my template mypage.html.twig?
  • Drupal CKEditor5 stripping <style> tags
  • error installing module HybridAuth and Drupal 8-10
  • Exploring Layout Builder Challenges: Crafting a Puzzle-Style layout with Sidebars on Drupal 9-10 using Layout Builder
  • Is there any way to show combined search result from an external api and also internal content from drupal 8
  • How to migrate the content with images from Drupal 8 to Drupal 9 for single content type automatically?
  • How to get the image url to display it in my twig without and with node
  • Drupal 10 views: fields/custom text show translated label for field
  • Conditionally preselect radio button in Drupal Webforms YAML
  • How to Display Translated Content by Language in Drupal Views?

Related Questions in DRUPAL-MENU

  • Drupal 8 remove extra divs and add custom classes in menu
  • Drupal7: Some of the main Menu links not showing if not logged in
  • How do I add a target="_blank" attribute to Footer Menu Block Link in Drupal 7
  • Drupal 7 - Active menu items does not have active-trail class
  • Delete div from menu block drupal 7
  • Drupal 7: calling "menu block" into page.tpl.php
  • Drupal - Set 'user/%/edit/uprofile' to default tab on 'user/%/edit'

Popular Questions

  • How do I undo the most recent local commits in Git?
  • How can I remove a specific item from an array in JavaScript?
  • How do I delete a Git branch locally and remotely?
  • Find all files containing a specific text (string) on Linux?
  • How do I revert a Git repository to a previous commit?
  • How do I create an HTML button that acts like a link?
  • How do I check out a remote Git branch?
  • How do I force "git pull" to overwrite local files?
  • How do I list all files of a directory?
  • How to check whether a string contains a substring in JavaScript?
  • How do I redirect to another webpage?
  • How can I iterate over rows in a Pandas DataFrame?
  • How do I convert a String to an int in Java?
  • Does Python have a string 'contains' substring method?
  • How do I check if a string contains a specific word?

Popular Tags

javascript python java c# php android html jquery c++ css ios sql mysql r reactjs node.js arrays c asp.net json

Trending Questions

  • UIImageView Frame Doesn't Reflect Constraints
  • Is it possible to use adb commands to click on a view by finding its ID?
  • How to create a new web character symbol recognizable by html/javascript?
  • Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
  • Heap Gives Page Fault
  • Connect ffmpeg to Visual Studio 2008
  • Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
  • How to avoid default initialization of objects in std::vector?
  • second argument of the command line arguments in a format other than char** argv or char* argv[]
  • How to improve efficiency of algorithm which generates next lexicographic permutation?
  • Navigating to the another actvity app getting crash in android
  • How to read the particular message format in android and store in sqlite database?
  • Resetting inventory status after order is cancelled
  • Efficiently compute powers of X in SSE/AVX
  • Insert into an external database using ajax and php : POST 500 (Internal Server Error)
  • Privacy
  • Terms
  • Cookies
  • Homegardensmart
  • Math
  • Aftereffectstemplates