Chcę dodać klasę do <a>
znacznika pola, które składa się z łącza i tekstu. (Jest to pole typu Link .) Nazwa tego pola to content.field_c_button_link.
W pliku szablonu chcę dodać coś takiego.
{{ content.field_c_button_link.0.addClass('button blue') }}
Jak mogę poprawnie dodać klasę?
Zgodnie z odpowiedzią Patricka Scheffera spojrzałem na ustawienia dla pola, w którym mogę dodać dodatkowe klasy CSS, ale nie mogłem ich znaleźć. To jest zrzut ekranu tego, co mogę edytować w polu linku.
entities
8
theming
navigation
maidi
źródło
źródło
'#field_name'
zamiast'#name'
.Najłatwiejszym sposobem na osiągnięcie tego jest użycie jednego z tych dwóch modułów.
1. Klasa łącza - moduł klasy łącza zapewnia nowy formularz widżetu dla pola typu Link. Ten widget umożliwia edytorowi dodanie klasy do pól Link dołączony do ich treści.
2. Atrybuty linku - widget Atrybuty linku zapewnia dodatkowy widget dla pola linku znalezionego w rdzeniu Drupala. Widżet umożliwia użytkownikom ustawianie atrybutów w łączu.
Ponadto moduł zmienia domyślne pole linku treści linku do menu, aby użyć tego widgetu, umożliwiając również linkom menu posiadanie atrybutów
identyfikator, klasa, nazwa, cel, rel, klucz dostępu
Po włączeniu jednego z tych dwóch elementów możemy ustawić ustawienia widżetu dla pola „Link” w obszarze „Zarządzaj wyświetlaniem formularza” dla danego pola łącza.
Zobacz załączony obraz w celach informacyjnych.
Po ustawieniu wprowadź każdą klasę oddzieloną spacją w polu, które pojawia się w momencie tworzenia treści.
źródło
Jeśli edytujesz to pole linku w swoim typie treści (admin / structure / types / manage / your_contenttype / fields / field_c_button_link), istnieje pole Dodatkowe klasy CSS .
Jednak wprowadzone tutaj klasy dotyczą wszystkich łączy utworzonych za pomocą „field_c_buton_link”. Jeśli chcesz dodać klasę do jednej konkretnej lokalizacji, możesz rzucić okiem na hook_preprocess_field] lub nawet theme_link.
Edytować:
W Drupal 8 jest także pole theme_preprocess_field . Myślę więc, że możesz zrobić coś takiego:
Nie testowałem tego, więc myślę, że musisz wprowadzić pewne poprawki, aby to zadziałało.
źródło
Aby dodać do powyższej odpowiedzi Tony'ego Fislera, w Drupal 8.1.2 musiałem sprawdzić #field_name zamiast name, aby dodać klasę. To działa dla mnie.
Dzieje się tak, jeśli chcesz klasę na
<a>
znaczniku. Oferowane rozwiązanie klasy łącza jest łatwiejsze, ale kiedy próbowałem, dotyczyło tylko klasy do opakowania a. Tak więc, jeśli używasz na przykład Bootstrap, moduł klasy łącza nie działałby.źródło
if ($element['#field_name'] == 'field_link') { foreach ($variables['items'] as $key => $item){ $variables['items'][$key]['content']['#options']['attributes']['class'][] = 'blarg'; } }
Możesz użyć klasy Project Link, która pozwala dodawać klasy w polu Link. Należy ustawić widżet na „Połącz z klasą”. Zobacz zrzut ekranu.
źródło
Aby to zrobić gałązką za pomocą szablonu pola (tj.
field--field-c-button-link.html.twig
)Zwykle szablon pola zapętla Twoje linki, używając:
Ale możesz to zmienić na coś takiego:
osobno zajmując się tytułem linku i adresem URL.
źródło
Łatwo jest utworzyć własny formatyzator, który zastąpi formatyzator linków. Chociaż teraz, gdy widzę, że istnieje moduł dla tego ( Link ), możesz z niego skorzystać, ponieważ możesz ustawić go na poziomie pola, a nie jako ustawienie w formatyzatorze. Pomyślałem jednak, że może to być przydatne dla kogoś, kto chce zbudować własny program do formowania linku, w którym można dodać klasę.
źródło
Nadal testuję to pod kątem błędów, ale umieszczenie tego w pliku .theme doda nazwę pola jako klasę dla wszystkich pól. Dotyczy to Drupala 8.2:
Wydaje się, że każdy temat powinien zawierać coś, co ułatwi stylizację.
źródło
Wszystkie pozostałe rozwiązania dodają klasy do opakowania pola. Ten dodaje klasę do samego
<a>
znacznika:źródło
Oto proste rozwiązanie -
źródło