Автор Тема: Определение IP адреса  (Прочитано 66 раз)

07 Апрель 2018, 14:01:19
  • Ветеран
  • *****
  • Сообщений: 1015
  • Репутация: +5/-1
  • Иногда заглядываю
    • Просмотр профиля
    • Помощь патентообладателям по продаже патентов.
PS  1.5.3.1
В БД в таблице customer_message есть столбец с IP корреспондентов,
но везде опущены точки в адресе поэтому не понятно какой адрес.
Как сделать чтобы ip-адрес запоминался в полном объеме?
Не боги горшки обжигают, не зачем им такой хренью заниматься.
07 Апрель 2018, 16:55:02
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 1112
  • Репутация: +5/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
Хранения ip в БД.
Хранить ip как plain text (например, 127.0.0.1) неудобно и непрактично. Потому принято использовать функцию ip2long, которая преобразовывает ip адрес в целое число (127001).
При показе адреса используют обратную функцию long2ip. Она конвертирует сетевой адрес в строку стандартного Internet-формата с точкой.
Вопрос как на экзамене по php.
08 Апрель 2018, 10:33:32
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 1015
  • Репутация: +5/-1
  • Иногда заглядываю
    • Просмотр профиля
    • Помощь патентообладателям по продаже патентов.
Возможно, к сожалению экзамены по PHP не сдавал, так как не изучал.

И что куда вписать, чтобы в БД показывался нормальный адрес.
Вижу эти адреса при заходе на сервер по FTP, в админке они не отображаются.
Может быть как то с помощью этой функции их можно вывести в админку?
Не боги горшки обжигают, не зачем им такой хренью заниматься.
08 Апрель 2018, 10:52:11
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 33154
  • Репутация: +26762/-0
    • Просмотр профиля
Сохраняет адрес в файле AdminCustomerThreadsController.php
$cm->ip_address = (int)ip2long(Tools::getRemoteAddr());Если нужно показать где-то в адмике добавьте обратную функцию l
long2ip ($customer->ip_address);
08 Апрель 2018, 13:18:27
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 1015
  • Репутация: +5/-1
  • Иногда заглядываю
    • Просмотр профиля
    • Помощь патентообладателям по продаже патентов.
В файл /admin/tabs/AdminCustomerThreads.php

вставил код:
('<b>'.$this->l('ip_adress:').'</b> '.'long2ip ($customer->ip_address);'.'<br />')В админке пишет:  ip_adress: long2ip ($customer->ip_address);

почему-то не переводит в адрес.
Не боги горшки обжигают, не зачем им такой хренью заниматься.
08 Апрель 2018, 13:29:34
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 1180
  • Репутация: +15/-1
  • Сообщество PrestaShop
    • Просмотр профиля
В файл /admin/tabs/AdminCustomerThreads.php
Такие файлы только в prestashop 1.4, а вы писали, что у вас версия  1.5.3.1
В 1.5 папка /admin/tabs/ пустая.
08 Апрель 2018, 14:18:31
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 1015
  • Репутация: +5/-1
  • Иногда заглядываю
    • Просмотр профиля
    • Помощь патентообладателям по продаже патентов.
Это верно, у меня несколько разных сайтов на разных версиях.
Так вот, в версии 1.5.3.1 в файле /admin/themes/default/template/controllers/customer_threads/message.tpl 
{if empty($message.ip_adress)}
<dl>
<dt>{l s='ip_adress customer:'}</dt>
                                <dd>{long2ip ($customer->ip_address)}</dd>
</dl>
{/if}

выводит все нули 0.0.0.0

а в версиях 1.4.х.х в файле /admin/tabs/AdminCustomerThreads.php
'<b>'.$this->l('ip_adress customer:').'</b> '.'long2ip ($customer->ip_address);'.'<br />'строка функции не преобразуется ip адрес.

Здесь получилось получить адрес 0.0.0.0
'<b>'.$this->l('ip_adress customer:').'</b> '.long2ip ($customer['ip_address']).'<br />'
В первом случае файл .tpl во втором .php

Как все-таки сделать чтобы показывал ip адресата.
Не боги горшки обжигают, не зачем им такой хренью заниматься.
08 Апрель 2018, 14:57:56
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 33154
  • Репутация: +26762/-0
    • Просмотр профиля
Нули потому что не определена переменная "ip_address". В контроллере AdminCustomerThreadsController.php нужно определить переменную и передать в шаблон.
$customer = new Customer($thread->id_customer);
$tpl->assign(array(
    'customer' => $customer
08 Апрель 2018, 16:10:09
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 1015
  • Репутация: +5/-1
  • Иногда заглядываю
    • Просмотр профиля
    • Помощь патентообладателям по продаже патентов.
Добавил все это в контроллер но все равно
не хочет включаться для PS 1.5.3.1.

Что значит не определена переменная "ip_address".
Как ее переопределить и передать в шаблон?
Не боги горшки обжигают, не зачем им такой хренью заниматься.