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

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

Аватар пользователя nasferatu nasferatu 26 сентября 2014 в 20:52

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

Комментарии

Аватар пользователя nasferatu nasferatu 26 сентября 2014 в 22:29

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

Аватар пользователя Orion76 Orion76 26 сентября 2014 в 22:30

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

Аватар пользователя drupby drupby 26 сентября 2014 в 23:03

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

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

Аватар пользователя drupby drupby 26 сентября 2014 в 23:07

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

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

Аватар пользователя nasferatu nasferatu 27 сентября 2014 в 0:25

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

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

Аватар пользователя drupby drupby 27 сентября 2014 в 0:33

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

Аватар пользователя Nikit Nikit 27 сентября 2014 в 4:06

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

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

Аватар пользователя drupby drupby 27 сентября 2014 в 4:35

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

Аватар пользователя nasferatu nasferatu 27 сентября 2014 в 9:12

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

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

Аватар пользователя Nikit Nikit 10 ноября 2015 в 11:49

Чтобы не сохранял в 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

Аватар пользователя Advin Advin 27 сентября 2014 в 13:35

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

Аватар пользователя drupby drupby 27 сентября 2014 в 18:16

"nasferatu" wrote:

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

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

Аватар пользователя drupby drupby 27 сентября 2014 в 18:42

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

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

Аватар пользователя nasferatu nasferatu 27 сентября 2014 в 19:28

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

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

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

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

Аватар пользователя drupby drupby 27 сентября 2014 в 20:03

"nasferatu" wrote:

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

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

Аватар пользователя Orion76 Orion76 27 сентября 2014 в 21:21

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

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

Аватар пользователя nasferatu nasferatu 29 сентября 2014 в 21:01

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

Аватар пользователя drupby drupby 29 сентября 2014 в 21:19
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'] содержит отправленные данные
}

Аватар пользователя nasferatu nasferatu 29 сентября 2014 в 23:14

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

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

Аватар пользователя nasferatu nasferatu 29 сентября 2014 в 23:57

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

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

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

Аватар пользователя nasferatu nasferatu 30 сентября 2014 в 0:30

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

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

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

Аватар пользователя nasferatu nasferatu 30 сентября 2014 в 9:43

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