Доступ к полям ноды в page.html.twig

Аватар пользователя y-vo y-vo 23 июня в 11:30

Приветствую. Есть необходимость переписать вывод именно страницы ноды, нужно чтоб до материала, во всю ширину страницы выводилось изображение(обложка) и ссылка, все это поля ноды. Есть ли какая то возможность получить их значение в page.html.twig? Или может быть вопрос можно решить как то по другому?

0 Thanks

Лучший ответ

Аватар пользователя Alex_Sorokin Alex_Sorokin 26 июня в 20:02
1

так а в чем проблема?

у вас верстка есть? вы просто выводите поле с изображением в шаблоне page.html.twig

Вот например два вопроса по вашей теме, и там уже есть ответы:
https://stackoverflow.com/questions/45344282/render-field-directly-in-pa...
https://drupal.stackexchange.com/questions/188122/render-a-node-field-in...

Если вы совсем новичок, то расшифрую: вставляете в ваш код переменную {{ node.title.value }} и тогда выведется заголовок страницы. Заменяете title на машинное имя вашего поля с картинкой, и выведется картинка.
Если хотите вывести картинку в виде url, то можно попробовать такой способ:
{{ file_url(node.field_some_image.entity.fileuri) }}

все зависит от того, как сделана ваша верстка если она есть.

Комментарии

Аватар пользователя widla widla 23 июня в 13:41
1

Можешь посмотреть в моем вопросе: Темизация таксономии в page.html.twig, только я вот пока не разберусь как наименование термина таксономии вытащить. И вот еще можно здесь почитать, как вытаскивать многие вещи для темизации.

Аватар пользователя y-vo y-vo 25 июня в 18:13

Спасибо, второй день что то пробую по разному и совсем ничего не выводится...
Пробую так:

<?phpfunction enygs_preprocess_page(&$variables) {
if (
$node = \Drupal::request()->attributes->get('node')) {
    
$variables['wallp_image'] = $node->field_image;
}
}
?>

это код в .theme
а это прописываю в файле шаблона page.html.twig
{{wallp_image}}
В итоге ничего не происходит. Хотел через kint() адрес изображения получать и просто в итоге выводить кодом это дело, но kint() по какой то причине у меня не работает в шаблонах нод, только в шаблонах страниц.

Аватар пользователя Alex_Sorokin Alex_Sorokin 26 июня в 20:02
1

так а в чем проблема?

у вас верстка есть? вы просто выводите поле с изображением в шаблоне page.html.twig

Вот например два вопроса по вашей теме, и там уже есть ответы:
https://stackoverflow.com/questions/45344282/render-field-directly-in-pa...
https://drupal.stackexchange.com/questions/188122/render-a-node-field-in...

Если вы совсем новичок, то расшифрую: вставляете в ваш код переменную {{ node.title.value }} и тогда выведется заголовок страницы. Заменяете title на машинное имя вашего поля с картинкой, и выведется картинка.
Если хотите вывести картинку в виде url, то можно попробовать такой способ:
{{ file_url(node.field_some_image.entity.fileuri) }}

все зависит от того, как сделана ваша верстка если она есть.

Аватар пользователя y-vo y-vo 27 июня в 19:13

Большое спасибо, полезная информация. Вывести правда именно изображение у меня таким образом не получилось, страница выводится так как будто слетели стили. А вот текстовые поля таким образом выводятся отлично.
В итоге вывел изображение так:
<img src="{{ file_url(node.field_image.entity.fileuri) }}">
Однако проблема в том, что что бы я там не выводил помимо системных тегов, типо {{page.content}}, {{page.left_sidebar}} не видно посетителям, только администратору. Даже если ввожу обычный текст. Первый раз такое вижу. Вот пример моей реализации:

<div class="row top-menu-container">
    <div class="col-lg-3">
        <a href="/" class="menu-brand">Site Name</a>
    </div>
    <div class="col-lg-6">
        {{ page.menu }}
    </div>
    <div class="col-lg-3">

    </div>
</div>
<div class="container">
    {{ page.header }}
</div>
<div class="container">
        the test text // it is't visible for users
        <img src="{{ file_url(node.field_image.entity.fileuri) }}"> // it is't visible for users
    <div class="row">
               
        <div class="col-md-8">
            {{ page.content }}

        </div>
        <div class="col-md-4">

            {{ page.left_sidebar }}
        </div>
       
    </div>

</div>
<div class="footer-cont">
    <div class="row footer-menu-row">
        <div class="col-lg-3">
            <a href="/" id="footer-brand">Site Name</a>
        </div>
        <div class="col-lg-3">
            {{ page.footer }}
        </div>
        <div class="col-lg-3">

        </div>
    </div>

    <div class="footer-copyr-cont">
        <div class="container text-center">
            Site copyrights
        </div>
    </div>
</div>

Может кто то знает с чем подобное может быть связано?

Аватар пользователя Alex_Sorokin Alex_Sorokin 27 июня в 22:31

а сайт локально? можно ли его увидить в интернете? скорее всего там какая-то мелочь, которую вы пропустили из-за невнимательности. Но наугад сложно понять о чем речь..

Аватар пользователя y-vo y-vo 28 июня в 17:04


Добавил использование контекстных ссылок и все заработало. Насколько это критично для безопасности?) Знать бы что именно в данном случае под ними подразумевается.

Аватар пользователя y-vo y-vo 28 июня в 17:53

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