SinglWolf

Выпадающее окно register/profile и доработка страницы регистрации

Recommended Posts

Хотел задать вопрос по выпадающему окно register/profile, вызвал окно и увидел, что кнопка "Регистрация" не видна. Искал по стилям, не нашёл где регулировать высоту окна. Шаблон Realia.

post-2647-0-77690000-1429255975_thumb.pn

 

Этот баг виден только на Яндекс-браузере. В остальных (IE,FF, Google Chrome) всё ОК. 

 

А теперь вопрос.

Посетитель решил зарегистрироваться. Но он должен ознакомиться с (варианты):

  1. Публичной офертой
  2. Правилами на сайте
  3. Лицензионным соглашением

У Вас это не реализовано, а это актуально. Это касается и статической страницы регистрации.

Подскажите как это сделать. Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Высоту блока модального окна можно подогнать вот этим стилем

 

/template/frontend/realia/css/realia-blue.css

#prettyLogin .modal-body {  /* max-height: 800px; */  height: 700px;}

А вот про правила, оферты и прочее, будем делать в новых версиях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Высоту блока модального окна можно подогнать вот этим стилем

 

/template/frontend/realia/css/realia-blue.css

#prettyLogin .modal-body {  /* max-height: 800px; */  height: 700px;}

А вот про правила, оферты и прочее, будем делать в новых версиях.

Про стиль спасибо.

Про остальное. Опять покерфейс.

Трудно подсказать где и как подправить код окна и страницы регистрации? Кто-то себя бил пяткой в грудь и уверял, что код открыт...

Где поставить чекбокс с привязкой к кнопке "Регистрация" и лейбл "С условиями согласен"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Суть задачи - разместить на форме регистрации контрольный чекбокс состояние которого будет определять возможность нажатия кнопки завершения регистрации и невыбраное состояние которого не даст пройти процесс регистрации до конца. Рядом с чекбоксом разместить ссылку на какие-то доки или страницы с ознакомительной информацией.

 

В чистом виде задача не решаема, поэтому придется немного смодернизировать код системы. Для избежания перегрузки всплывающего окна снесем всю регистрацию в полноценную страницу.

 

Основной объект - файл /apps/system/lib/system/user/register_using_model.php

Дополнительно нам понадобится файл /template/frontend/realia/register_user.tpl - шаблон точки входа регистрации.

 

1. Регистрация по своей сути - это заполнение полей модели user. Поэтому основой выступаем именно эта модель.

Добавляем на нее поле типа checkbox с системным именем iam_agree, галочкой обязательно к заполнению и снятой галочкой Хранить в таблице.

 

2. В /apps/system/lib/system/user/register_using_model.php в функции _defaultAction() в самом конце функции находим строки

$rs = $this->get_form($form_data[$this->table_name], 'new', 0, '', SITEBILL_MAIN_URL.'/register/');return $rs;

которые заменяем на

if(file_exists(SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$this->getConfigValue('theme').'/register_user.tpl')){global $smarty;$smarty->assign('register_form', $this->get_form($form_data[$this->table_name], 'new', 0, '', SITEBILL_MAIN_URL.'/register/'));return $smarty->fetch(SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$this->getConfigValue('theme').'/register_user.tpl');}else{return $this->get_form($form_data[$this->table_name], 'new', 0, '', SITEBILL_MAIN_URL.'/register/');}

Смысл: мы ищем в папке шаблона файлик страницы регистрации и если находим, то компилим его в разметку и выдаем на гора. Если нет, то ведем себя как и раньше, выдавая просто форму.

 

3. Подобные манипуляции проделаем и с функцией _new_doneAction(), где вместо строки

return $rs;

ставим

if(file_exists(SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$this->getConfigValue('theme').'/register_user.tpl')){global $smarty;$smarty->assign('register_form', $rs);return $smarty->fetch(SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$this->getConfigValue('theme').'/register_user.tpl');}else{return $rs;}

Смысл аналогичный.

 

4. Переходим к шаблону страницы регистрации  /template/frontend/realia/register_user.tpl примерный код которого тут http://pastebin.com/jchtk1W8.

 
Это привычный файл шаблона в котором обязательным является только строка
4:  {$register_form}
все остальное призвано либо украсить, либо выполнить нашу миссию.
 
Поскольку мы не можем вставить в форму ничего лишнего в обход модели, то мы воспользуемся скриптом, что бы прикрепить ссылку на Правила\Оферту к нашему чекбоксу. Саму ссылку мы размечаем вне формы в строке 7, и по ее id скриптом переносим ее на форму.
 
Так же в скрипте мы проверяем состояние добавленого чекбокса и гасим-активируем кнопку отправки формы в зависимости от его состояния. Там же в скрипте мы блокируем отправку формы при невыбраной галочке.
 
Естественно, после отправки на сервер, галочка опять будет проверена, что бы нас не обманули (за это отвечает галочка Обязательное поле в настройках элемента модели, то не имеет смысла в обычных условиях, но то, что надо в данном случае.).
 
Мы получим что-то вроде
Agentstvo_nedvyzhymosty2.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добавляем тайтл для страницы регистрации.

Поскольку регистрация - это функция, а не приложения, то какого-то кармана для настроек под него нет. Поэтому добавить заголовок мы может прямо в зоне точки входа.

 

В /template/frontend/realia/main/main.php находим точку входа регистрации

if ( !$has_result && preg_match('/^register/', $REQUESTURIPATH) ) {...//тут все что уже есть между скобок$this->template->assert('title', 'Регистрация'); //Это мы добавляем от себя в заголовок страницы$this->template->assert('meta_title', 'Мета заголовок для регистрации'); //... и для эстетов ))}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ПС. Регистрацию из всплывающего окна я бы вообще вырезал.

Как её вырезать и оставить таб входа на сайт?

Кстати, а как эту всплывашку для своих нужд использовать? Как вызывать? Где подшаманить поля и т.д. Удобно применить для формы, типа "Напишите нам", "Заказать звонок" или "Заказать услугу".

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Само всплывающее окно лежит в /template/frontend/realia/login_register.tpl

а управляющие скрипты от него в /template/frontend/realia/js/interface.js

 

Но само всплывание окна отсюда http://bootstrap-ru.com/javascript.php#modals.

Эта библиотека подключена, так что можно пихать их по всему шаблону невозбранно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мы получим что-то вроде

 

Не получилось...  :(

post-2647-0-05401700-1429325140_thumb.pn

Блин... Вместо надписи "регистрация", на кнопке "сохранить", капчи нет...

И, кстати, в выпадающем окне регистрации капчи тоже нет.

Вроде форма регистрации,

и странный селектбокс

 Группа*выбрать группу

и поля

"новый пароль" и "повторите новый пароль"

Мдя...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Добавлен ли в модель user чекбокс под галочку? Если да, от какие права видимости на него поставлены?

2. Поле группа - поставьте на нее права видимости в модели data - Для админов.

3. Нет капчи на форме? Добавьте поле с системным именем captcha  и типом captcha в модель user через редактор форм.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почти получилось! Спасибо.

post-2647-0-91315900-1429341900_thumb.pn

Осталось разобраться с полями про новый пароль и кнопку "сохранить".  :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Названия полей паролей можно изменить через Редактор форм. Но тогда они изменятся и в редактировании профиля.

Есть еще вариант сделать отдельную модель, похожую на user, чисто под регистрацию пользователя, куда поместить только нужные для регистрации поля, типа той же галочки, что бы она не фигурировала в форме редактирования профиля. Там же можно задать те же поля под пароли, но уже с другими меткам.

 

Для переименования кнопки в данным момент можно воспользоваться только методом локализации модуля регистрации, в котором и указать новое имя для кнопки. Тогда можно даже и изменение имен полей паролей вложить туда же и не делать отдельную модель.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Названия полей паролей можно изменить через Редактор форм. Но тогда они изменятся и в редактировании профиля.

Есть еще вариант сделать отдельную модель, похожую на user, чисто под регистрацию пользователя, куда поместить только нужные для регистрации поля, типа той же галочки, что бы она не фигурировала в форме редактирования профиля. Там же можно задать те же поля под пароли, но уже с другими меткам.

Идею понял, спасибо. Только как подменить/вызвать эту модель, например, я создам reg_user вместо user, в коде?

 

Для переименования кнопки в данным момент можно воспользоваться только методом локализации модуля регистрации, в котором и указать новое имя для кнопки. Тогда можно даже и изменение имен полей паролей вложить туда же и не делать отдельную модель.

С этого места по подробнее, пожалуйста.  :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Идею понял, спасибо. Только как подменить/вызвать эту модель, например, я создам reg_user вместо user, в коде?

 

С этого места по подробнее, пожалуйста.  :)

 

Я предполагаю так.

Поскольку эта модель может быть востребованой, то имя ее должно быть универсально. Планировал user_register (и лучше придерживаться этого именования), что бы они в Редакторе форм становились рядом с user (не чужие же друг другу).

 

Эта модель должна по сути иметь 4 must have поля - newpass, newpass_retype, login и email полностью идентичные таким же из user. Я привел системные имена. Имена меток значения не имеют, а вот системные имена имеют, так как эти данные будут проэцироваться на одноменные колонки в таблице пользователей, куда на такие же поля аналогично будет проецироваться и модель user, для редактирования профиля, например.

 

Главное отличие модели user_register от user - первая не нуждается в реальной таблице, поэтому в ее заголовке жать кнопку Создать таблицу не нужно. Страшного ничего не будет, но и новой таблицы в БД не требуется.

 

Внедрение.

 

/apps/system/lib/system/user/register_using_model.php

есть строка

 $form_data = $this->data_model;

Она встречается в _defaultAction() и в _new_doneAction() почти в самом начале. Это подключение модели для формирования формы регистрации. В таком виде берется модель user, так как регистрация - это потомок пользователя. Что бы распаралелить это место, мы эту строку заменяем (в  _defaultAction() и в _new_doneAction()) на

if(file_exists(SITEBILL_DOCUMENT_ROOT.'/apps/table/admin/admin.php') && file_exists(SITEBILL_DOCUMENT_ROOT.'/apps/columns/admin/admin.php') && file_exists(SITEBILL_DOCUMENT_ROOT.'/apps/table/admin/helper.php') ){require_once SITEBILL_DOCUMENT_ROOT.'/apps/table/admin/helper.php';$ATH=new Admin_Table_Helper();$form_data=$ATH->load_model('user_register', false);}if(!$form_data || empty($form_data)){$form_data = $this->data_model;}else{$form_data[$this->table_name] = $form_data['user_register'];}

Т.е. запрашиваем редактор форм на наличии модели user_register и, если таковая есть, и в ней есть поля, то мы "рабочую" модель user подменяем нашей оптимизированной.

 И дальше код работает с нашей моделью регистрации так, как будто это родная user.

 

Не следует забывать, что модель user_register не наследует, а подменяет модель user. И если вы добавите поля с "Хранить в таблице" в модель user_register, но не предусмотрите таких же полей в user (а именно по ней формируется таблица под пользователей в БД), то получите ошибку на запросе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пока совсем не запутался, создавать модель user_register и править код не стал, ибо фигня получается.
Захожу в профиль админа
post-2647-0-15811300-1429391845_thumb.pn
Жму кнопку "изменить профиль"
post-2647-0-38770800-1429391894_thumb.pn
Кстати, поле для старого пароля тоже надо, естественно с проверкой.
При залогиненом админе пускает по адресу /register
post-2647-0-64139200-1429392161_thumb.pn
По логике нужно отсылать в /account/profile/

Винегрет, короче... :(

ЗЫ. Пытался делать чекбокс видным только незареганым, так он вообще пропал с формы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

При залогиненом админе пускает по адресу /register

 

Не может форма из редактирования профиля отправлять на /register. В принципе не может. Но я еще и у себя проверил. Отправляет на профиль. Больше там ничего не меняли, кроме описаного мной?

 

ЗЫ. Пытался делать чекбокс видным только незареганым, так он вообще пропал с формы.

 

 

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

 

Группа Незарегистрированные - не означает гостей, а означает некоторую специфичную группу на сайте.

 

 

ПС. "залогиненный админ" значит, что был вход с логином-паролем админа на фронт сайта? Или был вход в админку, а потом просто переключена страница на фронт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не может форма из редактирования профиля отправлять на /register. В принципе не может. Но я еще и у себя проверил. Отправляет на профиль. Больше там ничего не меняли, кроме описаного мной?

 

 

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

 

Группа Незарегистрированные - не означает гостей, а означает некоторую специфичную группу на сайте.

 

 

ПС. "залогиненный админ" значит, что был вход с логином-паролем админа на фронт сайта? Или был вход в админку, а потом просто переключена страница на фронт?

Я в коде ничего, кроме ваших правок, не применял, ибо совсем бардак будет.

По поводу групп. Для гостей нет группы? :blink: Нонсенс. Зато есть таинственная группа масонов - "Группа Незарегистрированные"   :)

В бесплатном движке форума PHPBB даже для ботов есть группа.

"залогиненный админ" означает, что зашёл через на сайт с главной страницы. Предварительно делал выход из админки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

abushyk собака gmail.com

Закиньте main.php из папки шаблона

+

/apps/system/lib/system/user/register_using_model.php

+

/apps/system/lib/system/user/profile_using_model.php

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

action="/account/profile/"

Пока не поставлю чекбокс (который там не нужен), пишет "Не заполнено поле С условиями регистрации согласен".

5. После нажатия сохранения сносит на страницу регистрации - Нет, остаётся в /account/profile/

Кстати, когда жму на ссылку "Личный кабинет", фигня получается

post-2647-0-76250400-1429433577_thumb.pn

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
При залогиненом админе пускает по адресу /register

 

 

Все. Я только теперь понял, что не верно понял смысл это фразы.

 

Пока не поставлю чекбокс (который там не нужен), пишет "Не заполнено поле С условиями регистрации согласен".

 

 

Вот собственно почему я описывал принцип использования user_register а не написал сразу, что "это невозможно".)))

 

Кстати, когда жму на ссылку "Личный кабинет", фигня получается

 

 

Спорно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спорно.

Да хотя бы список ссылок должен появиться

  • Добавить объявление
  • Мой профиль
  • Мои объявления
  • Сообщения: 0 (0)
  • Мои баланс (0 руб.)

 

, а не "Мои объявления"

Личный кабинет должен быть "кабинетом", а не яблочным огрызком!

Я так понимаю, мои мытарства с регистрацией пользователей "членов масонской ложи" так и не закончатся...  :(

 

И регистрации не получается!

post-2647-0-05128100-1429436805_thumb.pn

Это кошмар какой-то...

Изменено пользователем SinglWolf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

post-2647-0-24273900-1429438128_thumb.pn

И тут засада.

Кстати, почему сложность пароля ограничена только пятью любыми символами, а?

Люди, если получится регистрация, конечно, будут платить денюжку. А взломать пароль "12345", например, как 2 пальца об асфальт.

Мне не жаль потраченных денег, мне жаль угробленного времени...  :angry:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ERROR ON INSERT - это значит, что ошибка произошла на уровне вставки в БД. Например в модели пользователя есть поля, которых нет в таблице в БД (рассинхронизация), либо поля, которые не планировалось сохранять в БД отмечены галочкой Хранить в таблице, либо менялись типы полей в модели, но в БД остались несовместимые.

 

В /apps/system/lib/admin/users/user_object_manager.php в 286 строке

$this->riseError('ERROR ON INSERT'); сделайте замену на $this->riseError($DBC->getLastError()); что бы открыть ошибку. И повторите регистрацию.

 

А взломать пароль "12345"

 

 

так же как и 1234567890

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

так же как и 1234567890

Это уже стёб пошёл? Хотябы одну бкуву и в разных регистрах можно добавить? :blink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас