Подскажите, пожалуйста, как организовать при загрузке сайта обязательный выбор города.
Скорее всего модальное окно со списком городов, но пока нет даже идей, как это сделать.
Города в таксономии. Через views вывожу их. Предоставляю пользователю выбрать город. Необходимо запомнить выбор и выводить инфу для этого города.
Прописывать в url, например http://сайт/выбранный_город/остальные_страницы. А в views вытаскивать через критерий фильтрации. Я на правильном пути или есть лучшее решение?
Rules, Session Context
и придумать как форму выбора показать..
Тут наверное проще немного покодить..
Хотя, если кодить, то предыдущие два модуля - лишние-))
А как передать через views значение в $_SESSION['city']?
через вьюс ничего не надо передавать - он должен брать значения из кук или сессии, которые будут записываться при выборе города юзером во всплывающем окне
https://www.drupal.org/project/popup_onload - покажет попап-окно colorbox при загрузке страницы в первый раз, есть возможность настроить макс.кол-во дней, через которое нужно показать еще раз.
вот только я не стал бы в данном случае использовать webform, проще сделать свою кастомную форму и ее выводить, нужно учитывать, что вебформ все данные пишет в базу данных
и писать значение лучше в куки , все ж таки для анонимов скорее данное решение
любое хобби подразумевает обширные знания в своей области, будь то радиолюбительство или нумизматика или любое другое
тем более пример кода я писал, дело за копипастом и минимальной мозговой деятельностью
любое хобби подразумевает обширные знания в своей области
Это уже профессионализмом в этой области попахивает.
А любое хобби начинается почти всегда с нуля.
"drupby" wrote:
тем более пример кода я писал, дело за копипастом и минимальной мозговой деятельностью
это понятно, но зачем изобретать велосипед, если его уже мог кто-то придумать и этот кто-то явно обладает большим знанием, чем я и врядли я лучше на своей стадии написал бы.
Но теперь, когда понятно, что нужно изобретать велосипед, буду делать это.
function webform_cookie_webform_submit($form, &$form_state){
dpm($form_state);// для использования dpm() нужен включенный модуль devel // $form_state['values']['submitted'] содержит отправленные данные }
Спасибо drupby и всем кто помогал. Мой первый, хоть и маленький, модуль написан.
Но всплыла очередная проблема. Может есть готовое решение.
В webform смущает эта надпись в токенах Значение по умолчанию: In addition to %get and %post, the following super tokens may be used, though only with logged-in users: %server, %cookie, and %request. For example %server[HTTP_USER_AGENT] or %session[id].
Можно заставить отображать куки по умолчанию для всех пользователей?
чтобы была возможность менять в любое время город.
Есть например сотня городов, в каждом есть городе есть партнеры, которые периодически могут меняться. Вывожу список городов, чтоб посетитель мог выбрать нужный город и посмотреть этих партнеров. А вывод этих партнеров осуществляю через views, как и писал ранее.
ПС. Как вариант, вывести блок, где вывести cookie['city'], а на него повесить popup окно с webform. Тогда в выподающем списке необязательно отображать активным выбранный город.
Комментарии
Лично меня всегда разражали такие штуки. Не проще ли по айпишнику автоматом выбирать город? Если мне надо будет, я потом сменю.
Смотрите https://www.drupal.org/project/geoip, https://www.drupal.org/project/smart_ip
хозяин-барин, просит сделать
Plazik, спасибо, по ip не подходит, обязательно выбор
Напомните барину, что яндексогугл очень не любит насильные попапы.
Пытался сказать, но барина видимо это не сильно тревожит.
Будем пытаться насильно привить это ему.
Города в таксономии. Через views вывожу их. Предоставляю пользователю выбрать город. Необходимо запомнить выбор и выводить инфу для этого города.
Прописывать в url, например http://сайт/выбранный_город/остальные_страницы. А в views вытаскивать через критерий фильтрации. Я на правильном пути или есть лучшее решение?
Rules, Session Context
и придумать как форму выбора показать..
Тут наверное проще немного покодить..
Хотя, если кодить, то предыдущие два модуля - лишние-))
drupby, спасибо большое.
А как передать через views значение в $_SESSION['city']?
через вьюс ничего не надо передавать - он должен брать значения из кук или сессии, которые будут записываться при выборе города юзером во всплывающем окне
спасибо, об этом уже подумал.
Но есть ли возможность все же передать значение через views?
еще раз повторяю - вьюс будет брать значение контекстного фильтра из значения (допустим куки), которое будет записано при выборе города
понятно.
уже не соображаю.
Подскажите тогда, как яерез webform передать значение в $_SESSION['city']?
можно с помощью javascript http://xandeadx.ru/blog/drupal/308
или же добавить свою submit функцию форме и там записывать
drupby, очередное спасибо. Буду пробовать.
Все равно не понял, простите...
Подключил плагин. А дальше застрял. Если не затруднит, опишите подробно как это сделать.
а дальше дело за малым - написать скрипт
или же
* Implements hook_form_alter().
*/
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'XXX') {
$form['#submit'][] = 'MYMODULE_webform_submit';
}
}
function MYMODULE_webform_submit($form, &$form_state) {
$_COOKIE['city'] = $form_state['values']['city'];
}
Уже попробую завтра, сегодня мозг не выдержал. Спасибо за неравнодушие и помощь.
Если нет желания много кодить, то сборка из модулей:
Но проще сделать свой модуль
вот только я не стал бы в данном случае использовать webform, проще сделать свою кастомную форму и ее выводить, нужно учитывать, что вебформ все данные пишет в базу данных
и писать значение лучше в куки , все ж таки для анонимов скорее данное решение
Пока еще не дорос до написания своих модулей, хотя есть знания php, еще не достаточно разобрался в структуре drupal.
Nikit, что-то я не нашел, где в валидейт можно запихнуть значение в сессию.
Чтобы не сохранял в DB, попробуйте этот https://www.drupal.org/sandbox/sense/1895002 (еще есть https://www.drupal.org/project/webform_clear, но там после отправки email). Если не умеете git clone, приаттачил текущуб версию как webform_nosave.zip.
Насчёт webform validation ошибся, придётся использовать закрытый https://www.drupal.org/project/webform_php - качаете через "View all releases".
Warning: Всё описанное в этом комментарии - небезопасно
Можно сделать через views global filter + небольшой скрипт или модуль, который будет выводить форму при первом посещении сайта.
как я понял, чтоб внести в сессию или в куки значение, необходимо писать свой код.
Ты делаешь сайты под заказ для клиентов и наконец то стало доходить, что мышкой не накликаешь заказ?
drupby, нет, это не мой бизнес, это мое хобби.
любое хобби подразумевает обширные знания в своей области, будь то радиолюбительство или нумизматика или любое другое
тем более пример кода я писал, дело за копипастом и минимальной мозговой деятельностью
нет - я культурней и обоснованней
Это уже профессионализмом в этой области попахивает.
А любое хобби начинается почти всегда с нуля.
это понятно, но зачем изобретать велосипед, если его уже мог кто-то придумать и этот кто-то явно обладает большим знанием, чем я и врядли я лучше на своей стадии написал бы.
Но теперь, когда понятно, что нужно изобретать велосипед, буду делать это.
ну чтобы скатиться до твоего уровня мне еще далеко
нооо..личных разборок не надо нам) мир и дружба
это мы просто в ожидании пока ты напишешь 4 строки кода
)) тогда запасайтесь словами и терпением, за код сяду только с понедельника
drupby, столица?
ну тогда все свободны до понедельника
да, про это..просто не вчитывался сначала в логин
На самом деле, если есть необходимый минимальный опыт чёнить покодит.. там делов немного..
основной тормоз - собственная психология
orion76, согласен...поэтому с понедельника обязательно возьмусь за это.
С таким логином нельзя обижаться на грубость)
Вот она, какая мужская дружба)
вернулся к первому своему модулю
<?phpfunction webform_cookie_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'webform_client_form_2') {
$form['#submit'][] = 'webform_cookie_webform_submit';
print_r($form);
}
}
function webform_cookie_webform_submit($form, &$form_state) {
echo 'submit';
}?>
до echo 'submit' не доходит, такое чувство, что где-то теряется здесь:
<?phpArray ( [0] => webform_client_form_pages [1] => webform_client_form_submit [2] => webform_cookie_webform_submit )?>
в настройках webform стоит No redirect (reload current page)
if ($form_id == 'webform_client_form_2') {
$form['#submit'][] = 'webform_cookie_webform_submit';
}
}
function webform_cookie_webform_submit($form, &$form_state) {
dpm($form_state);// для использования dpm() нужен включенный модуль devel
// $form_state['values']['submitted'] содержит отправленные данные
}
Спасибо, помогает. Читал про этот модуль, но в нужный момент совсем про него забыл.
Спасибо drupby и всем кто помогал. Мой первый, хоть и маленький, модуль написан.
Но всплыла очередная проблема. Может есть готовое решение.
В webform смущает эта надпись в токенах Значение по умолчанию:
In addition to %get and %post, the following super tokens may be used, though only with logged-in users: %server, %cookie, and %request. For example %server[HTTP_USER_AGENT] or %session[id].
Можно заставить отображать куки по умолчанию для всех пользователей?
какая у тебя версия webform?
зачем тебе значение куки по умолчанию использовать?
хотел написать, что последняя версия, но нет, оказывается уже как месяц есть 4.0. Стоит 3.2. Обновляюсь.
вывожу список городов и с куки подхватывает выбранный город и ставит его активным.
ПС. После обновления до 4.0 вообще куки как токены не признает.
так если посетитель выбрал город и он записан в кукис, то зачем ему форму опять подсовывать?
чтобы была возможность менять в любое время город.
Есть например сотня городов, в каждом есть городе есть партнеры, которые периодически могут меняться. Вывожу список городов, чтоб посетитель мог выбрать нужный город и посмотреть этих партнеров. А вывод этих партнеров осуществляю через views, как и писал ранее.
ПС. Как вариант, вывести блок, где вывести cookie['city'], а на него повесить popup окно с webform. Тогда в выподающем списке необязательно отображать активным выбранный город.
Вы views global filter не посмотрели? Он как раз для таких вещей...
Рассматривал, но не получилось организовать то, что надо. У меня несколько блоков на странице будут зависить от выбранного города.