Score:0

Template preprocess to generate Font Awesome markup for menu links

ธง nr

In Drupal 9, I need the ability to prepend Font Awesome icons to menu links.

I have attached Font Awesome 5 JS and CSS assets to my theme via *.libraries.yml.

If I open a menu link in the DOM inspector and edit the markup of a link from this:

<ul class="clearfix nav">
  <li class="nav-item">
    <a href="#comments" class="nav-link nav-link-comments">Comments</a>
  </li>
</ul>

to this:

<ul class="clearfix nav">
  <li class="nav-item">
    <i class="fas fa-comment"></i><a href="#comments" class="nav-link nav-link-comments">Comments</a>
  </li>
</ul>

The Font Awesome JavaScript detects the empty <i class="fas fa-comment"></i> element, and the result looks exactly like what I want it to look like.

However, it's been very tricky to add that markup to the link element programmatically.

I can do it with JavaScript DOM manipulation in a Drupal behavior, but I'd prefer to prepare the markup in Twig and preprocess.

After trying and rejecting a couple of other modules, I am now looking at menu_link_attributes.

It's very easy to add the class .fa-comment to this menu link:

<ul class="clearfix nav">
  <li class="nav-item">
    <a href="#comments" class="fa-comment nav-link nav-link-comments">Comments</a>
  </li>
</ul>

I'm looking at an old forum thread which explains a template preprocess approach to matching classes starting with fa-, and using that value to generate <i> tags with the needed classes. This approach may have worked with Drupal 7.

The THEME_menu_link() preprocess function does not seem to work in D8 and D9, so I am trying to rewrite it using THEME_preprocess_links(). But when I drop a dump($variables); in this function, I do not see all the menu links.

While I'm looking for a different template preprocess function, I thought I'd describe the issue here, in case it's something you've encountered before.

NOTE: This question is technically a duplicate, but the old one never got answered so I think I'm safe to ask it again.

sonfd avatar
in flag
โมดูล [ไอคอนเมนู Font Awesome](https://www.drupal.org/project/fontawesome_menu_icons) น่าจะช่วยได้ อย่างน้อยก็เพื่อเป็นข้อมูลอ้างอิง
Score:0
ธง nr

ฉันไปกับวิธีแก้ปัญหาที่เหมาะสมนี้:

https://github.com/gnikolovski/link_alter

นักพัฒนามีบล็อกโพสต์เกี่ยวกับแนวทางของเขา:

http://dev.studiopresent.com/blog/back-end/altering-menu-links

ปมของมัน (เนื่องจากไม่สนับสนุนคำตอบแบบลิงก์เท่านั้น) สามารถสรุปได้ดังนี้:

ใน Drupal 8 คุณสามารถใช้ไฟล์ hook_link_alter(&$ตัวแปร) ตะขอเพื่อเปลี่ยนลิงค์เมนู [...]แต่ ไม่มีวิธีที่ง่ายในการระบุลิงก์เมนูนี้ คุณไม่สามารถบอกได้ว่าเมนูใดมีลิงก์นี้ ดังนั้นหากคุณไม่ต้องการเปลี่ยนลิงก์ทั้งหมดบนไซต์ของคุณ การใช้เบ็ดนี้เพื่อกำหนดเป้าหมายลิงก์เมนูอย่างแม่นยำเป็นความคิดที่ไม่ดี

เว้นแต่คุณจะเพิ่มตัวระบุ

โชคดีที่คุณสามารถทำได้ง่ายๆ และทำให้ทั้งหมดนี้มีพลังมากขึ้น คุณสามารถใช้ได้ form_alter() hook เพื่อแก้ไขแบบฟอร์มแก้ไขลิงค์เมนูและเพิ่มสิ่งนี้: ป้อนคำอธิบายรูปภาพที่นี่

ขอบคุณ @sonfd สำหรับเคล็ดลับในความคิดเห็น ซึ่งอาจดีกว่า:

https://www.drupal.org/project/fontawesome_menu_icons

เนื่องจากฉันได้แก้ไขปัญหาของฉันแล้วและกำลังจะถึงกำหนดส่ง ฉันจึงอาจไม่ได้ตรวจสอบโมดูลนั้นทันที แต่มันก็ดีที่รู้ว่ามันมีอยู่จริง!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา