Jump to content


Photo
* * * * * 2 votes

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

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

14 replies to this topic

#1 DMTR3000S

DMTR3000S
  • JBZoo User (rus)
  • User rate: 110.7
  • posts: 1044
  • topics: 44

Posted 31 July 2015 - 20:24

*
POPULAR

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

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

 

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

screen01.png

 

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

screen02.png

 

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

 

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

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

 

Шаг первый

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

screen03.png

 

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

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

 

Шаг второй

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

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

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

screen04.png

 

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

screen05.png

 

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

screen06.png

 

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

 

Шаг третий

Не будем забывать, что мы подготовили только места для данных в 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

 

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

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

 

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

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

screen08.png

 

Шаг пятый

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

Чтобы данные из профиля 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

 

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

 

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


  • 14

#2 zeus07

zeus07
  • JBZoo User (rus)
  • User rate: 6.6
  • posts: 1090
  • topics: 172

Posted 02 August 2015 - 00:30

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


  • 1

#3 woodman

woodman
  • JBZoo User (rus)
  • User rate: 38.4
  • posts: 648
  • topics: 59

Posted 02 August 2015 - 01:06

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


  • 0

#4 DMTR3000S

DMTR3000S
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 110.7
  • posts: 1044
  • topics: 44

Posted 02 August 2015 - 06:57

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

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

 

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

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

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


  • 0

#5 woodman

woodman
  • JBZoo User (rus)
  • User rate: 38.4
  • posts: 648
  • topics: 59

Posted 02 August 2015 - 12:38

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

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

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


  • 1

#6 zeus07

zeus07
  • JBZoo User (rus)
  • User rate: 6.6
  • posts: 1090
  • topics: 172

Posted 02 August 2015 - 12:41

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


  • 0

#7 DMTR3000S

DMTR3000S
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 110.7
  • posts: 1044
  • topics: 44

Posted 02 August 2015 - 13:03

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

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


  • 0

#8 zeus07

zeus07
  • JBZoo User (rus)
  • User rate: 6.6
  • posts: 1090
  • topics: 172

Posted 02 August 2015 - 22:29

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


  • 2

#9 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 01 October 2015 - 06:01

*
POPULAR

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



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


#10 Sandmansss

Sandmansss
  • JBZoo User (rus)
  • User rate: 1.5
  • posts: 111
  • topics: 26

Posted 12 March 2019 - 16:32

Хотел бы добавить к вышеизложенному.

 

 

Шаг пятый

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

Чтобы данные из профиля 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');

Надо еще в файле 

/media/zoo/applications/jbuniversal/cart-elements/core/order/order.php

Также найти переменную $whiteList  и добавить в нее нужные нам значения.

 

Причем порядок полей должен быть идентичным.

к примеру у меня 

/media/zoo/applications/jbuniversal/framework/helpers/jbfield.php

$whiteList = ['name', 'surname', 'fathername', 'username', 'email', 'phone', 'registerDate', 'lastvisitDate']; 

/media/zoo/applications/jbuniversal/cart-elements/core/order/order.php

$whiteList = [$user->name, $user->surname, $user->fathername, $user->username, $user->email, $user->phone, $user->registerDate, $user->lastvisitDate];

Видимо с 2015 были внесены изменения.

Но вдруг всеже, кто-то захочет воспользоваться рецептом


  • 0





Also tagged with one or more of these keywords: автозаполнение, профиль, 220, рецепт

Click to return to top of page in style!