Chcę renderować obraz jako obraz tła za pomocą wbudowanego stylu w gałązce. Utworzyłem pole o nazwie bg_image i załączyłem je do standardowej zwykłej strony.
Po wielu godzinach kręcenia się, byłem w stanie uzyskać adres URL obrazu w pliku node.html.twig
{{ file_url(node.field_bg_image.0.entity.uri.value) }}
ale nie mogłem zmusić go do działania wewnątrz pola - field-bg_image.html.twig
Czy mogę mimo to pobrać węzeł, aby uzyskać obraz?
Jak mogę uzyskać adres URL obrazu jako styl wbudowany? Pomyślałem, że może mogę przekazać zmienną z pola - field-bg_image.html.twig do image.html.twig, a następnie po prostu renderować
{{ uri }}
zamiast
<img{{ attributes.addClass(classes) }} />
ale nie mogłem zmusić go do przekazania zmiennej, chyba że użyję opcji include
{% include 'image.html.twig' with {'image': image, 'isFromField': isFromField} %}
(isFromField jest prawdą, jeśli pochodzi z pola - field-bg_image.html.twig) Ale to też nie działało. Obraz nigdy nie był renderowany w ten sposób.
Byłbym bardzo zadowolony, gdybyś mógł pomóc - moja wiedza na temat PHP jest bardzo podstawowa. Dzięki
Odpowiedzi:
Zmienna
node
jest wstępnie ładowana tylko w szablonie węzła (i szablonie strony, jeśli adres URL zawiera węzeł). Teraz, jeśli chcesz uzyskać dostęp do pól węzłów w szablonie pól, musisz spojrzeć w inne miejsce:field.html.twig:
element['#object']
jest jednostką nadrzędną w szablonie pola i można uzyskać dostęp do dowolnego pola z tego elementu (w twoim przypadku węzła).Jeśli chcesz uzyskać dostęp do surowych wartości z rzeczywistego pola, lepiej postępować zgodnie z logiką gałązki pola i uzyskać dostęp do wartości wewnątrz pętli przedmiotów bezpośrednio z obiektu pola pola
#item
:Edycja: Uzyskaj adres URL stylu obrazu
Zainstaluj moduł Twig Tweak, a będziesz mógł użyć adresu URL, aby uzyskać adres URL stylu obrazu:
źródło
Wystarczy wspomnieć, że jeśli chcesz zrobić to samo w jednym z nowych niestandardowych bloków, działa to:
źródło
Używam tego kodu w moim pliku .theme:
Można to poprawić. Sprawdzam pole obrazu i ładuję jego adres URL stylem obrazu.
Następnie w moim węźle - plik page.html.twig mam to:
Ponownie, przydałaby się poprawa. dzięki
źródło
Zrobiłbym to w inny sposób. W Twojej funkcji wstępnego przetwarzania węzła:
Następnie w szablonie (węzeł - NODETYPE.html.twig) po prostu renderuj obraz w ten sposób:
Chociaż, jeśli kiedykolwiek będziesz musiał renderować dużą liczbę obrazów, radzę załadować style do tablicy przed zapętleniem każdego obrazu. Mówię to, ponieważ miałem poważne problemy z czasem ładowania, ponieważ musiałem załadować ponad 300 obrazów i dla każdego obrazu ładowałem styl osobno zamiast ładować je wszystkie przed, oto przykład, ta sama podstawa jak powyżej:
Następnie w szablonie (węzeł - NODETYPE.html.twig) po prostu renderuj obrazy w ten sposób:
Naprawdę tego nie testowałem i robię to z głowy, więc może zawierać błędy, możesz mnie ostrzec, więc naprawię to :-).
źródło
Odniosłem pewien sukces przy użyciu modułu obrazu tła, gdy pozwala na to przypadek użycia. Korzystam z jednej z tych opcji kodu, gdy potrzebuję dostosowanej struktury DOM.
źródło