Drupal 8 как добавить форму поиска в шапку сайта?

Главные вкладки

Аватар пользователя loup54 loup54 18 октября 2017 в 18:43

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

<?php<section class="row clearfix">
        <div class="branding layout-container">
          <div class="site-branding">{{ page.header }}</div>
          {% if page.ad_space %}
            <div class="advertisement">{{ page.ad_space }}</div>
            {% endif %}
            {% if page.search %}
            <div class="search">{{ page.search }}</div>
            {% endif %}
        </div>
      </section>?>

Лучший ответ

Аватар пользователя loup54 loup54 18 октября 2017 в 19:05

Извиняюсь,господа, сам налогал, нечаянно в регионах прописал двойную кавычку, вот так search: "Search'

Комментарии

Аватар пользователя VasyOK VasyOK 19 октября 2017 в 5:58

Чем плохо?

Хулиган, я во многом не разбираюсь, но данный HTML код перебрасывает на страницу поиска нужной фразы в D8. Да, я знаю, можно форму поиска в шаблоне вывести, можно на JS данный редирект сделать.

Аватар пользователя ХулиGUN ХулиGUN 19 октября 2017 в 12:43

VasyOK wrote:

Чем плохо?

Ну так ты попробуй когда просто /search/node и когда /search/node?keys
Если форма отправляется по get , то всё что после ? тебе и так достроится спецификацией

Аватар пользователя ХулиGUN ХулиGUN 19 октября 2017 в 20:18

VasyOK wrote:

Не понял т.е. как?

Если метод формы get, то при сабмите она соберёт все поля по {name}={value} и самостоятельно построит query_string. т.е. конструкцию вида name1=val1&name2=val2&name3=val3 и отправка формы произойдёт по {action}?{query_string}.
Поэтому я и спросил, что зачем тебе в экшене ?key, если инпут с таким именем присутствует в форме? Андерстенд?

Аватар пользователя ХулиGUN ХулиGUN 19 октября 2017 в 22:55

VasyOK wrote:

ноу

Ты издеваешься?

<form method="get" action="{{action}}">
    <input name="key" value="3" />
</form>
Action                 >>>    Переход
-------------------------------------------
/search                >>>    /search?key=3
/search?key            >>>    /search?key=3
/search?key=2          >>>    /search?key=3
/search?other_key=2    >>>    /search?key=3

А теперь?

Аватар пользователя ХулиGUN ХулиGUN 20 октября 2017 в 1:26

VasyOK wrote:

нет не издеваюсь, но чтоб прописывать {{action}} нужно в код темы лезть

А теперь вся последовательность:
VasyOK wrote:

Можно и без PHP.
VasyOK wrote:

"/search/node?keys"

Я wrote:

Зачем query_string в action формы?

... и т.д.

Откуда вообще у тебя в голове возникло в экшн гет формы засунуть ?keys? Тупой копипаст? Попробовал, сработало, можно задвигать? Учите мат. часть, а не полагайтесь на магию!

Аватар пользователя ХулиGUN ХулиGUN 20 октября 2017 в 1:29

VasyOK wrote:

но чтоб прописывать {{action}} нужно в код темы лезть

{{ action }} Это не твиг переменная, это обыкновенный плейсхолдер, и ниже приведена табличка соответствий, что будет если вместо {{ action }} проставить то или иное значение и засабмитить форму

Аватар пользователя oleg90990 oleg90990 20 октября 2017 в 10:07

Что за фигню я читал в комментах? Ребята это Drupal 8 в тегах, вот решение:

1) Добавляем %theme_name%.info.yml регион если нужно
2) Указываем его в файле page.html.twig
3) Кеш
4) тут /admin/structure/block добавляем форму в новый регион

<?php<form action="/search/node?keys" method="get">
   <input type="search" name="keys" placeholder="Поиск по сайту"> 
 </form>?>

Drupal 8 же в тегах и у автора. Так не хорошо делать.

Аватар пользователя ХулиGUN ХулиGUN 20 октября 2017 в 12:31

oleg90990 wrote:

Так не хорошо делать

Кроха сын к отцу пришёл, и спросила кроха...

oleg90990 wrote:

1) Добавляем %theme_name%.info.yml регион если нужно

2) Указываем его в файле page.html.twig

3) Кеш

4) тут /admin/structure/block добавляем форму в новый регион

Ещё один)))
То есть написать html напрямую в page.tpl низя?, обязательно создавать регион, к нему блок с тем же html, Карл. Как считаешь, что быстрее отрендерится, html в page.tpl или когда друпал слазит в бд, достанет оттуда данные блока, создаст из данных рендер, потом создаст рендер региона с этим блоком и только потом выплюнет в шаблон?

Аватар пользователя ХулиGUN ХулиGUN 20 октября 2017 в 14:39

oleg90990 wrote:

Причем тут page.tp?

Ну так ты сам же предлагал, что просто написать html плохо и нужно создавать регион и добавить в него блок, хотя ТС сам написал ниже, что у него просто ошибка синтаксиса была
loup54 wrote:

Извиняюсь,господа, сам налогал, нечаянно в регионах прописал двойную кавычку, вот так search: "Search'


Он её сам нашёл и исправил.
Затем @VasyOK предложил просто использовать чистый html, вместо рендера региона и блока. Такой вариант так же возможен, и так как форма GET никакой csrf_protection не нужен. Далее у нас был ликбез по работе с html формами, после чего ты влез и сказал
oleg90990 wrote:

Так не хорошо делать.

Собственно, почему нехорошо? Я привёл аргументы со своей стороны, что чистый html отработает быстрее. Если поиск нужен не на всех страницах, то можно рассматривать вариант с регионом и то, не думаю, что нельзя проверить условия прямо в шаблоне или в ставить чистый html в шаблон региона.
Итак, почему нехорошо? Иначе фигня - это твой коммент, который был написан неподумавши