Автор Тема: Добавление phone_mobil в identity.tpl  (Прочитано 1139 раз)

30 Октября 2014, 13:15:07
  • Старожил
  • ****
  • Сообщений: 265
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Подскажите, может сталкивались с подобным:

Значит в форму редактирования "Персональной информации", шаблон identity.tpl понадобилось добавить поле phone_mobil из формы "Адрес доставки".
Для этого в IdentityController.php добавил строки
$address_delivery = new Address($this->context->cart->id_address_delivery);
$this->context->smarty->assign('phone_mobile', $address_delivery->phone_mobile);
$this->setTemplate(_PS_THEME_DIR_.'identity.tpl');

В шаблоне identity.tpl я вывел поле phone_mobile
<input type="text" class="is_required validate form-control" name="phone_mobile" id="phone_mobile" data-validate="isPhoneNumber" value="{if isset($phone_mobile)}{$phone_mobile}{/if}" />

Как добиться сохранения изменения телефона при нажатии кнопки "Сохранить" в форме?
Дело в том, что в IdentityController.php все работа ведётся с customer, т.е. $this->customer->update()

Мне же нужно добавить возможность обновить информацию в адресе, как то вот так:
$address = new Address();
$address->id_customer = (int)$this->context->customer->id;
передать в $address значение phone_mobile
и сохранить изменения
 $address->save()

Как правильно реализовать подобное?
Напрямую лезть в базу и обновлять  phone_mobile думаю не лучший вариант...
30 Октября 2014, 13:30:05
Ответ #1
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22126
  • Репутация: +17110/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
В личном кабинете клиент может редактировать свои адреса без всяких изменений. Там есть ссылка "Мои адреса", нажимаешь и переходишь на страницу с адресами. Выбираешь адрес и нажимаешь Редактировать. Можно менять и адрес и номера телефонов.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
30 Октября 2014, 13:46:58
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 32995
  • Репутация: +26759/-0
    • Просмотр профиля
В контроллере добавьте проверку и сохранение этой переменной /controllers/front/IdentityController.php
if (Tools::isSubmit('submitIdentity'))
{
....
$phone_mobile = Tools::getValue('phone_mobile');
...
30 Октября 2014, 13:51:47
Ответ #3
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86052
  • Репутация: +25403/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Только личный кабинет это контроллер MyAccountController.php.
30 Октября 2014, 13:55:58
Ответ #4
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86052
  • Репутация: +25403/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В prestashop различаются персональные данные и данные адреса.
Теоефон относится к адресу и редактируется в меню Мои адреса.
30 Октября 2014, 15:04:14
Ответ #5
  • Старожил
  • ****
  • Сообщений: 265
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо, что откликнулись
Значит в контроллере /controllers/front/IdentityController.php
имеем
if (Tools::isSubmit('submitIdentity'))
{
....
$phone_mobile = Tools::getValue('phone_mobile');
...
требуется передать и сохранить $phone_mobile
Вот таким образом $this->customer->phone_mobile = $phone_mobile
я не могу передать параметр т.к. он не относится к customer

Подскажите как передать параметр в $address = new Address(); именно из IdentityController.php ???
Ведь именно там находится параметр phone_mobile
$address->phone_mobile = $phone_mobile

Заранее большое спасибо!
30 Октября 2014, 15:22:26
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 1211
  • Репутация: +30/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Мне же нужно добавить возможность обновить информацию в адресе, как то вот так:
$address = new Address();
$address->id_customer = (int)$this->context->customer->id;
передать в $address значение phone_mobile
и сохранить изменения
 $address->save()
Как правильно реализовать подобное?
Вы же все написали, добавьте после
$phone_mobile = Tools::getValue('phone_mobile');$address = new Address();
$address->id_customer = (int)$this->customer->id;
$address->phone_mobile = $phone_mobile;
$address->save();
30 Октября 2014, 16:29:56
Ответ #7
  • Старожил
  • ****
  • Сообщений: 265
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Не осилил я последний вариант,
помимо перечисленных параметров требуется также указать:
id_country, alias, lastname и т.д., которых попросу нет под рукой...

Сделал вот так:
в секции
if ($this->customer->update())
{

добавил
if ($this->context->cart->id_address_delivery == $this->context->cart->id_address_invoice)
Db::getInstance()->autoExecute('ps_address', array('phone_mobile'=>$phone_mobile), 'UPDATE', 'id_address='.$this->context->cart->id_address_delivery);

Адреса доставки и оплаты одинаковые...
27 Февраля 2015, 17:23:56
Ответ #8
  • Новичок
  • *
  • Сообщений: 24
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
актуально добавления телефона не через адресса, а через личнукю информацию, так как адреса убрали с магазина, ибо магазин виртуальных товаров, для этого я сделал перенос полей с AddressController.php в IdentityController.php

if (Configuration::get('PS_ONE_PHONE_AT_LEAST') && !Tools::getValue('phone') && !Tools::getValue('phone_mobile'))
$this->errors[] = Tools::displayError('You must register at least one phone number.');

вот сюда добавил две строки:
/* Generate years, months and days */
$this->context->smarty->assign(array(
>>>>>> 'one_phone_at_least' => (int)Configuration::get('PS_ONE_PHONE_AT_LEAST'),
>>>>>> 'onr_phone_at_least' => (int)Configuration::get('PS_ONE_PHONE_AT_LEAST'), //retro compat
'years' => Tools::dateYears(),
'sl_year' => $birthday[0],
'months' => Tools::dateMonths(),
'sl_month' => $birthday[1],
'days' => Tools::dateDays(),
'sl_day' => $birthday[2],
'errors' => $this->errors,
'genders' => Gender::getGenders(),
));

этот код с адрес контролера удалил, далее видно что в личной информации поле телефон есть переводиться и требуется обязательно, но сохранения не происходит. Какие функции еще не обходимо добавить в IdentityController.php что бы номер телефона сохранялся?
27 Февраля 2015, 17:40:49
Ответ #9
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 105578
  • Репутация: +39546/-0
    • Просмотр профиля
    • Webstudio UwK
1. Добавить поля в таблицу ps_customer
2. Добавить переменные в класс Customer.php
3. Добавить сохранение этих переменных в IdentityController.php
$this->customer->one_phone_at_least = Tools::getValue('one_phone_at_least');
...
Cоздание интернет сайтов Webstudio UwK