Добрый день!
Правлю форму с помощью hook_form_alter():
<form action="/search/node" method="get" id="search-block-form" accept-charset="UTF-8" data-drupal-form-fields="edit-keys">
Как поменять в самой форме значения action и method?
Добрый день!
Правлю форму с помощью hook_form_alter():
<form action="/search/node" method="get" id="search-block-form" accept-charset="UTF-8" data-drupal-form-fields="edit-keys">
Как поменять в самой форме значения action и method?
Я СДЕЛАЛ!)))))
С помощью js. Запутался из-за неопытности да, месяц работаю программистом )
До этого только мечтал о должности прогера и смотрел видеокурсы на сколько позволяло своб. время + немного копался в разных движках.
Моя задача заключалась в том, что на сайте есть поисковая форма, если вбить в неё запрос, то тебя должно перенаправить на другой сайт с этим запросом, где этот запрос в url'e будет значением ключа.
Вроде бы задача легкая, но проблема в том, что к запросу нужно добавить ещё дополнительные key=val перед и после.
Т.е. запрос выглядит так: http://domain.name/some_url.html#{key1:val1,key2:наш_запрос,key3:val3}
В итоге {key1:val1,key2:наш_запрос,key3:val3} в js разбил на 3 части.
1 часть в переменную (var1), 2 часть наш запрос (query), 3 часть тоже в переменную (var2).
И после нажатия на submit, вызываю функцию где всё это дело складывается и уходит windows.location.href="http://domain.name/some_url.html#"+var1+query+var2
Скорее всего это очень плохой пример) Но для меня это прорыв
Комментарии
https://api.drupal.org/api/drupal/elements/8.2.x
Я просто html вписал.
http://drupal.ru/node/134608
Спасибо, создал пользовательский блок с новой формой и уже его кастомизирую (а то так получалось, что я ломал встроенный блок поиска )
Но возникла ещё проблема , у input'а поискового поля, куда вбивается сам запрос, есть атрибут name. Мне нужно чтобы в него записалось перед запросом строка и после.
Грубо говоря так на php бы выглядело:
<?php echo "<input name = $var1$query$var2>"?>
Как такое сделать в 8 друпале?
В моем понимании в поиск пользователь вбивает только одну строку.
Строка перед и строка после - это не стандартный вариант поиска. Хотя я слабо представляю как это выглядит и если бы делал поиcк по нескольким строкам воспользовался бы раскрытыми фильтрами views или search api
В общем крутил в голове и так и сяк, понял как правильно поставить вопрос!
Как в друпале 8, сохранить и изменить поисковый запрос в переменную, перед отправкой в action тега form?
Т.е. так:
1. Посетитель вбил запрос в форму
2. Запрос сохранился в переменной
3. Переменная проходит через функцию urlencode() + добавляются ещё строки
4. На выходе получается измененная переменная, которая отправляется в action
Всё это легко делается в своём кастомном модуле
Зачем всё это? Вам не хватает переменной в теле запроса? При get отправке и так в форма будет сабмититься на /action_url?key=value
По сабжу хочется выразится своей любимой цитатой про универсальные интерфейсы, но уверен, решат, что это оскорбление(((
Спасибо, буду пробовать создать свой модуль, просто пока до такого уровня ещё друпал не осознал.
Делается это для того, чтобы в url'е передать запрос определенного вида на другой сайт, если запрос будет отличаться, то на той стороне поиск просто не сработает (на сколько мне известно, поиск реализовали на Java, поэтому такие требования).
Так экшн зачем менять и добавлять в него гет параметры? Отправка формы get запросом на урл domain.name/some_url (экшн формы) и так проставит все поля этой формы в ?key=val&key2=val2
Лично моё мнение, что Вы запутались по незнанию или неопытности. Попробуйте описать конкретно свою задачу без всяких абстракций - велика вероятность того, что вас направят на правильный путь и предложат более изящные решения
Я СДЕЛАЛ!)))))
С помощью js. Запутался из-за неопытности да, месяц работаю программистом )
До этого только мечтал о должности прогера и смотрел видеокурсы на сколько позволяло своб. время + немного копался в разных движках.
Моя задача заключалась в том, что на сайте есть поисковая форма, если вбить в неё запрос, то тебя должно перенаправить на другой сайт с этим запросом, где этот запрос в url'e будет значением ключа.
Вроде бы задача легкая, но проблема в том, что к запросу нужно добавить ещё дополнительные key=val перед и после.
Т.е. запрос выглядит так: http://domain.name/some_url.html#{key1:val1,key2:наш_запрос,key3:val3}
В итоге {key1:val1,key2:наш_запрос,key3:val3} в js разбил на 3 части.
1 часть в переменную (var1), 2 часть наш запрос (query), 3 часть тоже в переменную (var2).
И после нажатия на submit, вызываю функцию где всё это дело складывается и уходит windows.location.href="http://domain.name/some_url.html#"+var1+query+var2
Скорее всего это очень плохой пример) Но для меня это прорыв
Да. JS - Это должен быть самый крайний метод, когда вообще других способов нет)
Зачем вам тогда друпал форма? Почему не просто в шаблон не вставить html?
<form action=" http://domain.name/some_url.html" method="get"></form>
При отправке формы по get очерёдность параметров не важна
Вы уверены, что это правильно? get параметры передаются в url после "?" и разделяются амперсандом "&", но никак не через хеш "#".
Если действительно формат должен быть через хеш, в таком случае напишите точный пример, в противном случае вы можете для своих перед и после сделать скрытые инпуты и просто сабмитить)))
Он не нужен был, я выше как раз отписался что создал пользовательский блок html
Запрос должен был быть именно с хешем, без знака вопроса, без амперсандов
key=val, здесь между ключом и значением вместо равно обязательно должно было передаваться двоеточие (из-за этого тег form вообще решил не использовать).
Собственно точный пример:
http://domain.name/some_url.html#{"dictionaryName":null,"mode":"SIMPLE","query":"фыва","type":"NEAR","sortOrder":"desc","sortField":"document_date_edition","simpleSearchFieldsBundle":"test2"}
Жирным пометил место, куда подставляется введенный пользователем запрос.
+ на всё что дальше хеша, нужно пропустить через urlencode и в итоге получаем такой запрос:
http://domain.name/some_url.html#%7B%22dictionaryName%22:null,%22mode%22...
P.S. Форум не дает цитировать х..лиGUN'а, пишет:
Не используйте матерные или агрессивные слова