Обязательный выбор города

26 сентября 2014 в 20:52

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

Комментарии

Города в таксономии. Через views вывожу их. Предоставляю пользователю выбрать город. Необходимо запомнить выбор и выводить инфу для этого города.
Прописывать в url, например http://сайт/выбранный_город/остальные_страницы. А в views вытаскивать через критерий фильтрации. Я на правильном пути или есть лучшее решение?

26 сентября 2014 в 22:29

Rules, Session Context
и придумать как форму выбора показать..
Тут наверное проще немного покодить..
Хотя, если кодить, то предыдущие два модуля - лишние-))

26 сентября 2014 в 22:30

"nasferatu" wrote:
А как передать через views значение в $_SESSION['city']?

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

26 сентября 2014 в 23:03

"nasferatu" wrote:
Но есть ли возможность все же передать значение через views?

еще раз повторяю - вьюс будет брать значение контекстного фильтра из значения (допустим куки), которое будет записано при выборе города

26 сентября 2014 в 23:07

drupby, очередное спасибо. Буду пробовать.

Все равно не понял, простите...
Подключил плагин. А дальше застрял. Если не затруднит, опишите подробно как это сделать.

27 сентября 2014 в 0:25

"nasferatu" wrote:
А дальше застрял

а дальше дело за малым - написать скрипт
или же

/**
 * 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'];
}

27 сентября 2014 в 0:33

Если нет желания много кодить, то сборка из модулей:

Но проще сделать свой модуль Smile

27 сентября 2014 в 4:06

вот только я не стал бы в данном случае использовать webform, проще сделать свою кастомную форму и ее выводить, нужно учитывать, что вебформ все данные пишет в базу данных
и писать значение лучше в куки , все ж таки для анонимов скорее данное решение

27 сентября 2014 в 4:35

Пока еще не дорос до написания своих модулей, хотя есть знания php, еще не достаточно разобрался в структуре drupal.

Nikit, что-то я не нашел, где в валидейт можно запихнуть значение в сессию.

27 сентября 2014 в 9:12

Чтобы не сохранял в 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: Всё описанное в этом комментарии - небезопасно Smile

10 ноября 2015 в 11:49

Можно сделать через views global filter + небольшой скрипт или модуль, который будет выводить форму при первом посещении сайта.

27 сентября 2014 в 13:35

"nasferatu" wrote:

как я понял, чтоб внести в сессию или в куки значение, необходимо писать свой код.

Ты делаешь сайты под заказ для клиентов и наконец то стало доходить, что мышкой не накликаешь заказ?

27 сентября 2014 в 18:16

"nasferatu" wrote:
это мое хобби

любое хобби подразумевает обширные знания в своей области, будь то радиолюбительство или нумизматика или любое другое
тем более пример кода я писал, дело за копипастом и минимальной мозговой деятельностью

27 сентября 2014 в 18:42

"drupby" wrote:
любое хобби подразумевает обширные знания в своей области

Это уже профессионализмом в этой области попахивает.
А любое хобби начинается почти всегда с нуля.

"drupby" wrote:
тем более пример кода я писал, дело за копипастом и минимальной мозговой деятельностью

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

27 сентября 2014 в 19:28

"nasferatu" wrote:

нооо..личных разборок не надо нам)

это мы просто в ожидании пока ты напишешь 4 строки кода

27 сентября 2014 в 20:03

"nasferatu" wrote:
)) тогда запасайтесь словами и терпением, за код сяду только с понедельника

На самом деле, если есть необходимый минимальный опыт чёнить покодит.. там делов немного..
основной тормоз - собственная психология

27 сентября 2014 в 21:21

"drupby" wrote:
/**
* 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'];
}

вернулся к первому своему модулю

<?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)

29 сентября 2014 в 21:01
function webform_cookie_form_alter(&$form, &$form_state, $form_id) {
  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'] содержит отправленные данные
}

29 сентября 2014 в 21:19

Спасибо 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].

Можно заставить отображать куки по умолчанию для всех пользователей?

29 сентября 2014 в 23:14

хотел написать, что последняя версия, но нет, оказывается уже как месяц есть 4.0. Стоит 3.2. Обновляюсь.

вывожу список городов и с куки подхватывает выбранный город и ставит его активным.

ПС. После обновления до 4.0 вообще куки как токены не признает.

29 сентября 2014 в 23:57

чтобы была возможность менять в любое время город.

Есть например сотня городов, в каждом есть городе есть партнеры, которые периодически могут меняться. Вывожу список городов, чтоб посетитель мог выбрать нужный город и посмотреть этих партнеров. А вывод этих партнеров осуществляю через views, как и писал ранее.

ПС. Как вариант, вывести блок, где вывести cookie['city'], а на него повесить popup окно с webform. Тогда в выподающем списке необязательно отображать активным выбранный город.

30 сентября 2014 в 0:30

Рассматривал, но не получилось организовать то, что надо. У меня несколько блоков на странице будут зависить от выбранного города.

30 сентября 2014 в 9:43