avatar

Поле «телефон» при регистрации

Опубликовал в блог Дополнения и модули для Simpla CMS
0
Достаточно часто при реализации интернет-магазина на cms Simpla появляется необходимость добавить в карточку товара поле «Телефон» покупателя. Реализовав это, мы получаем сразу несколько плюсов: при оформлении заказа на странице корзины данные имени, почты и телефонного номера уже автоматически будут загружены и пользователю не придется повторно их вводить, телефонные номера пользователей попадают в профиль и в админку, а значит могут быть выгружены — а это уже ценная база данных.

По аналогии с предложенным методом можно добавить в профиль пользователя (и/или при регистрации) любое дополнительное поле. Начнем…

Создаем поле в базе данных:
ALTER TABLE s_users ADD phone varchar(20) AFTER name

Далее в файле /api/Users.php ищем:
$query = $this->db->placehold("SELECT u.id, u.email, u.password, u.name, u.group_id, u.enabled, u.last_ip, u.created, g.discount, g.name as group_name FROM __users u
		                                LEFT JOIN __groups g ON u.group_id=g.id 
						WHERE 1 $group_id_filter $keyword_filter ORDER BY $order $sql_limit");

Меняем на:
$query = $this->db->placehold("SELECT u.id, u.email, u.password, u.name, u.phone, u.group_id, u.enabled, u.last_ip, u.created, g.discount, g.name as group_name FROM __users u
		                                LEFT JOIN __groups g ON u.group_id=g.id 
						WHERE 1 $group_id_filter $keyword_filter ORDER BY $order $sql_limit");

Ищем:
$query = $this->db->placehold("SELECT u.id, u.email, u.password, u.name, u.group_id, u.enabled, u.last_ip, u.created, g.discount, g.name as group_name FROM __users u LEFT JOIN __groups g ON u.group_id=g.id $where LIMIT 1", $id);

Меняем на:
$query = $this->db->placehold("SELECT u.id, u.email, u.password, u.name, u.phone, u.group_id, u.enabled, u.last_ip, u.created, g.discount, g.name as group_name FROM __users u LEFT JOIN __groups g ON u.group_id=g.id $where LIMIT 1", $id);


Далее ищем в файле /view/RegisterView.php:
elseif($user_id = $this->users->add_user(array('name'=>$name, 'email'=>$email, 'password'=>$password, 'enabled'=>$default_status, 'group_id'=> $id !=1, 'last_ip'=>$_SERVER['REMOTE_ADDR'])))

меняем на:
elseif($user_id = $this->users->add_user(array('name'=>$name, 'email'=>$email, 'password'=>$password, 'enabled'=>$default_status, 'phone'=>$this->request->post('phone'), 'group_id'=> $id !=1, 'last_ip'=>$_SERVER['REMOTE_ADDR'])))


В файле /view/UserView.php ищем:
elseif($user_id = $this->users->update_user($this->user->id, array('name'=>$name, 'email'=>$email)))

Меняем на:
elseif($user_id = $this->users->update_user($this->user->id, array('name'=>$name, 'email'=>$email, 'phone'=>$this->request->post('phone'))))

ищем:
$this->design->assign('email', $this->user->email);

добавляем ниже:
$this->design->assign('phone', $this->user->phone);

ищем:
$this->design->assign('email', $this->user->email);

добавляем ниже:
$this->design->assign('phone', $this->user->phone);


Далее в файле /simpla/UserAdmin.php ищем:
$user->email = $this->request->post('email');

добавляем ниже:
$user->phone = $this->request->post('phone');


Открываем файл /view/CartView.php и ищем:
$this->design->assign('email', $this->user->email);

ниже добавляем:
$this->design->assign('email', $this->user->email);


Далее в файле /simpla/design/html/user.tpl ищем:
<li><label class=property>Email</label><input name="email" class="simpla_inp" type="text" value="{$user->email|escape}" /></li>

ниже добавим:
<li><label class=property>Телефон</label><input name="phone" class="simpla_inp" type="text" value="{$user->phone|escape}" /></li>


В файле /simpla/design/html/users.tpl ищем:
<div class="user_email cell">
	<a href="mailto:{$user->name|escape}<{$user->email|escape}>">{$user->email|escape}</a>	
</div>

ниже добавим:
<div class="user_phone cell">
	{$user->phone|escape}
</div>


В файле /simpla/design/css/style.css ищем код #list .user_name, и меняем ширину на 140px.
В файле /ваш_шаблон/html/register.tpl после:
<input type="text" name="email" data-format="email" data-notice="Введите email" value="{$email|escape}" maxlength="255" />

добавим:
<label>Телефон</label>
<input type="text" name="phone" data-format=".+" data-notice="Введите телефон" value="{$phone|escape}" maxlength="20" />


В файле /ваш_шаблон/html/user.tpl после:
<input data-format="email" data-notice="Введите email" value="{$email|escape}" name="email" maxlength="255" type="text"/>

добавим:
<label>Телефон</label>
<input data-format=".+" data-notice="Введите телефон" value="{$phone|escape}" name="phone" maxlength="20" type="text"/>


На странице покупателей в админке можно включить поиск покупателя по номеру телефона. Для этого в файле /api/Users.php ищем:
$keyword_filter .= $this->db->placehold('AND (u.name LIKE "%'.$this->db->escape(trim($keyword)).'%" OR u.email LIKE "%'.$this->db->escape(trim($keyword)).'%"  OR u.last_ip LIKE "%'.$this->db->escape(trim($keyword)).'%")');

меняем на:
$keyword_filter .= $this->db->placehold('AND (u.phone LIKE "%'.$this->db->escape(trim($keyword)).'%" OR u.name LIKE "%'.$this->db->escape(trim($keyword)).'%" OR u.email LIKE "%'.$this->db->escape(trim($keyword)).'%"  OR u.last_ip LIKE "%'.$this->db->escape(trim($keyword)).'%")');

ищем:
$keyword_filter .= $this->db->placehold('AND u.name LIKE "%'.$this->db->escape(trim($keyword)).'%" OR u.email LIKE "%'.$this->db->escape(trim($keyword)).'%"');

меняем на:
$keyword_filter .= $this->db->placehold('AND u.phone LIKE "%'.$this->db->escape(trim($keyword)).'%" OR u.name LIKE "%'.$this->db->escape(trim($keyword)).'%" OR u.email LIKE "%'.$this->db->escape(trim($keyword)).'%"');


Идем в файл /simpla/ajax/export_users.php и после:
'email'=>            'Email',

добавим:
'phone'=>          'Телефон',


Уфф… На этом все.
1 комментарий RSS
avatar
Привет — блудил блудил — по скриптам по файлам, вроде все по инструкции — но ни как не могу вывести строку в всплывающем меню регистрации, но потом дошло до меня что в index.tpl в нем лежит всплывающее окно регистрации, так что у кого другой шаблон сайте имейте ввиду.
Да еще минусик один — в базу данных вносятся номер тел. без проверки тоесть дублируются. плохо. Как исправить?
<!------------------------ /compare ------------------------>
	<div id="registration"  style="display: none;">
		<div>
			<div class="popup styleforsmallpopup">
				<div class="popup_head back0">Регистрация</div>
				{if $error}
				<div class="message_error">
					{if $error == 'empty_name'}Введите имя
					{elseif $error == 'empty_email'}Введите email
					{elseif $error == 'empty_phone'}Введите Номер тел.
					{elseif $error == 'empty_password'}Введите пароль
					{elseif $error == 'user_exists'}Пользователь с таким email уже зарегистрирован
					{elseif $error == 'captcha'}Неверно введена капча
					{else}{$error}{/if}
				</div>
				{/if}
				<div class="popup_dashed">
					<div class="popup_body">
						<form  name="regform" action="/user/register" method="post">
							<input type="text" placeholder="Введите имя" value="{$name|escape}" data-notice="Введите имя" name="name" data-format=".+" class="textinput40 back1">
							<input type="password" placeholder="Пароль" autocomplete="off" type="password" name="password" data-format=".+" data-notice="Введите пароль"  class="textinput40 back1">
							<input type="text" placeholder="Номер Тел."   name="phone" data-format=".+"    data-notice="Введите телефон" value="{$phone|escape}" maxlength="20" class="textinput40 back1"/>
							<input type="text" placeholder="Адрес e-mail" name="email" data-format="email" data-notice="Введите email"   value="{$email|escape}" class="textinput40 back1">
							<div style="margin-bottom: 10px" class="clearfix"></div>
							<input type="text" id="comment_captcha" type="text" name="captcha_code" value="" data-format="\d\d\d\d" data-notice="Введите капчу" class="textinput40 back1 textinput_captcha">
							<div class="captcha"><img class="captcha_image" alt="CAPTCHA" src="captcha/image.php?{math equation='rand(10,10000)'}"/></div> 
							<a href="#" class="btn2 submit clear">Регистрация</a>
							<input type="submit" value="Регистрация" name="register" class="none1">
						</form>
					</div>
					<div class="popup_foot">
						<a class="js_fancy_window" href="#fancyauth" >Авторизация</a>
					</div>
				</div>
			</div>
		</div>
	</div>
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.