Перейти к содержимому


Фотография
* * * * * 2 Голосов

Добавление полей в профиль пользователя Joomla и настройка автозаполнения полей в JBZoo

автозаполнение профиль 220 рецепт

Сообщений в теме: 8

#1 DMTR3000S

DMTR3000S

Отправлено 31 July 2015 - 20:24

*
Популярное сообщение!

Я очень долго собирался оформить этот рецепт, но врождённая лень работа отнимала всё время. Сегодня мне в личку напомнили, дескать, "где рецепт деньги, Лебовски?" и я понял - пора! :)
 
Пролог и он же лирическое отступление.
 
Интернет-магазин обязан быть удобным и должен учитывать пожелания любимого ленивого клиента.

Несомненно, одной из удобнейших фишек является автозаполнение форм для зарегистрированных пользователей: зарегистрировался, заполнил поля с ФИО и адресом, и при дальнейших покупках всё это подставляется автоматом.

 

Передо мной встала задача реализовать такую штуку, и несмотря на то, что в JBZoo 220 есть в настройках опция "Брать значение из профиля пользователя", я упёрся в непонимание и несправедливость со стороны стандартного профиля Joomla, в котором полей для заполнения - два с половиной. Вот как он выглядит:

Прикрепленный файл  screen01.png   51.1К   0 Количество загрузок:

 

Меня такой расклад совершенно не устраивал. Погуглив и полазив по форуму я нашёл решение, где подключался плагин "Профиль", который добавляет-таки поля к стандартному набору:

Прикрепленный файл  screen02.png   65.08К   0 Количество загрузок:

 

Однако, там начисто отсутствуют поля для ФИО, например. Конечно, можно было просто переопределить языковые константы, что я и сделал (в качестве эксперимента скорее - я точно знал, что этот способ уже меня бесит), но такая убогая костыльность не вариант, я дисциплину люблю, а любые посторонние ненужности от сайта в виде левых плагинов всегда стараюсь отрЭзать.

 

Перейдём к решению:

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

 

Шаг первый

Итак, первоочередная задача - попасть в phpmyadmin, чаще всего на хостингах юзается именно он (а если нет - то вы бородатый одмин и инструкции вам не нужны). Находим таблицу t_users, щёлкаем по ней, видим примерно следующую картину:

Прикрепленный файл  screen03.png   260.08К   0 Количество загрузок:

 

Это не что иное, как таблица, в которой Joomla хранит профили пользователей. Имя, логин, пароль, статус, дата последнего входа и т.п. информация пишется именно сюда. Всего-то и нужно добавить свои поля.

Важно: у вас префикс t_ будет какой-то свой, не суть, ключевое слово - users

 

Шаг второй

Добавим в таблицу свои параметры. Точнее, не сами параметры, а места в базе данных под них, чтобы было где хранить :)

Я буду добавлять поля 3 поля -"Имя", "Фамилия" и "Адрес".

Под табличкой видим область для добавления новых записей. У меня их 3, поэтому я ставлю 3 (ваш Кэп), отмечаю "В конец таблицы" и щёлкаем кнопку "Вперёд":

Прикрепленный файл  screen04.png   262.73К   0 Количество загрузок:

 

После этого, в открывшемся поле для редактирования задаём в колонке "Имя" - названия параметров латинскими буквами, "Тип" выставляем в VARCHAR, "Длину" - по своему усмотрению: к примеру, если у вас есть будет в профиле поле "Возраст" - логично, чтобы его длина была двум символам. Для имени и фамилии я задал длину в 50 символов, а для адреса отвёл 200. Остальные поля от греха подальше можно не трогать. Вот как это выглядит у меня:

Прикрепленный файл  screen05.png   30.48К   0 Количество загрузок:

 

Жмём справа внизу кнопку "Сохранить", снова зайдём в таблицу users и увидим следующую картину:

Прикрепленный файл  screen06.png   283.39К   0 Количество загрузок:

 

Поздравляю, мы подготовили в базе места для новых полей в профиле :)

 

Шаг третий

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

 

Давайте откроем конфигурационный файл, который отвечает непосредственно за вывод полей в форме - registration.xml, который лежит по адресу  /components/com_users/models/forms, и найдём в нём вот такой кусок кода:

<field
	name="name"
	type="text"
	description="COM_USERS_REGISTER_NAME_DESC"
	filter="string"
	label="COM_USERS_REGISTER_NAME_LABEL"
	required="true"
	size="30"
/>

Немножко разберёмся. Эта запись отвечает за выведение поля "Имя" в форме регистрации пользователя и подсказывает джумле, в какую таблицу базы класть введённое значение. Расскажу что тут для чего:

  • name - это название ячейки базы данных, в которую будут закидываться данные из формы.Помните, я делал три поля в SQL и называл их firstname, family и address? Вот, name говорит джумле, в какую ячейку класть данные.
  • type - тип данных
  • description - подсказка
  • filter - валидация введённого значения
  • label - подпись к полю формы
  • required - обязательность заполнения данного поля. true - обязательно, false - нет. Если выставлено тру - около поля появится звёздочка и форма не отправится, пока не будет заполнено поле (Ваш Кэп)
  • size - ширина поля формы

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

<field
	name="name"
	type="text"
	description="COM_USERS_REGISTER_NAME_DESC"
	filter="string"
	label="COM_USERS_REGISTER_NAME_LABEL"
	required="true"
	size="30"
/>
		
<field
	name="firstname"
	type="text"
	description="Введите имя"
	filter="string"
	label="Имя"
	required="true"
	size="30"
/>
		
<field
	name="family"
	type="text"
	description="Введите фамилию"
	filter="string"
	label="Фамилия"
	required="true"
	size="30"
/>
		
<field
	name="address"
	type="text"
	description="Введите адрес"
	filter="string"
	label="Адрес"
	required="true"
	size="30"
/>

Сохраним файл и перейдём на сайт туда, где у вас осуществляется регистрация пользователей. Я делаю всё это на демке JBZoo, поэтому форма входа коряво гордо висит посередине страницы, но не суть. А главное, что мы видим - в форме появились вожделенные поля!

Прикрепленный файл  screen07.png   84.63К   0 Количество загрузок:

 

Порядок их выведения вы можете настроить прям в xml файле. Просто расставьте поля в нужном порядке.

Примечание: я сделал не совсем корректно - у меня было стандартное поле с именем, а я прикрутил ещё одно, поторопился :(

 

Шаг четвёртый

Теперь добавим отображение этих полей в админке, в менеджере пользователей. Для этого идём в  /administrator/components/com_users/models/forms и берём за жабры файл user.xml. Действуем там по старой схеме, не забываем сохранить файл с изменениями, и после манипуляций у нас получится вот так:

Прикрепленный файл  screen08.png   51.86К   0 Количество загрузок:

 

Шаг пятый

Но и это ещё не всё! (с)

Чтобы данные из профиля Joomla подхватывались в JBZoo, нужно зайти в  /media/zoo/applications/jbuniversal/framework/helpers и файле jbfields.php добавить в массив $whiteList через запятую названия наших ячеек в SQL. В моём случае это firstname, family и address:

$whiteList  = array('name', 'username', 'email', 'registerDate', 'lastvisitDate', 'firstname', 'family', 'address');

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

Прикрепленный файл  screen10.png   131.33К   0 Количество загрузок:

 

Как-то так. Да, кстати - не забывайте про бэкапы и помните, что всё это вы делаете на свой страх и риск, и всё такое.

 

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


  • 14

#2 zeus07

zeus07

Отправлено 02 August 2015 - 00:30

Великолепный рецепт. Автору большой респект за проделанную работу! Эта доработка очень пригодится. Но хотелось бы кое-что уточнить. Этот рецепт работает только для формы заказа. А что, если необходимо, чтобы данные подставлялись в поля доставки? Как быть в этом случае? У меня сейчас как раз такая ситуация, когда поле с адресом и городом используется только в блоке Информация для доставки, и хотелось бы, чтобы оно автоматом заполнялось.


  • 1

#3 woodman

woodman

Отправлено 02 August 2015 - 01:06

А если сделать профили на зушке? Там полей - хоть отбавляй.


  • 0

#4 DMTR3000S

DMTR3000S

Отправлено 02 August 2015 - 06:57

что, если необходимо, чтобы данные подставлялись в поля доставки?

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

 

А если сделать профили на зушке? Там полей - хоть отбавляй.

Эм, а как будет происходить регистрация? В JBZoo всё, что касается управлением пользователей, отдано в руки Joomla. Как делить пользователей на группы, как настраивать почтовые рассылки, уведомления?

Или я туплю? :)


  • 0

#5 woodman

woodman

Отправлено 02 August 2015 - 12:38

Эм, а как будет происходить регистрация? В JBZoo всё, что касается управлением пользователей, отдано в руки Joomla. Как делить пользователей на группы, как настраивать почтовые рассылки, уведомления?

Или я туплю? :)

Плагин ZooAuthor связывает профили пользователей джумлы с Zoo. Да. регистрацией занимается сама CMS, но вот профиль юзера можно настроить полями как обычный материал.


  • 1

#6 zeus07

zeus07

Отправлено 02 August 2015 - 12:41

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


  • 0

#7 DMTR3000S

DMTR3000S

Отправлено 02 August 2015 - 13:03

Плагин ZooAuthor связывает профили пользователей джумлы с Zoo. Да. регистрацией занимается сама CMS, но вот профиль юзера можно настроить полями как обычный материал.

Хм, про плагин этот я запамятовал, спасибо за напоминание. Интересно, как именно он работает - копирует в таблицу users данные, или просто связывает. Будем посмотреть, хотя, меня полностью устраивает и вариант с ручным добавлением пока. 


  • 0

#8 zeus07

zeus07

Отправлено 02 August 2015 - 22:29

Мда, моих знаний PHP конечно не хватает, чтобы понять, как реализовано это. Но по идее нужно в поле доставки дописать кусок кода, который отвечает вот за это http://clip2net.com/s/3lB2qYw


  • 2

#9 SmetDenis

SmetDenis

Отправлено 01 October 2015 - 06:01

*
Популярное сообщение!

Новый элемент для доставки по мотивам этого рецепта - http://forum.jbzoo.c...iz-profilya-po/
Элемент появился благодаря zeus07, за что ему большое спасибо!
  • 5
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как моно скорее!


— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.






Темы с аналогичным тегами автозаполнение, профиль, 220, рецепт

Click to return to top of page in style!