noname

noname

+24
Репутация
-10
Рейтинг
#1 Автоопределение региона, города 14 октября 2019 в 09:33
Доброе время суток. Подойдет ли такой код для определения Региона, Города ipgeobase.ru ?
1
  1. /* Пример работы
  2.  * [!ipgeobase? &info=`city`!]
  3.  * Возможные параметры для info: inetnum, country, city, region, district, lat, lng
  4.  *
  5.  *[!if? &is=`[!ipgeobase!]:=:Москва` &then=`@TPL:имя_чанка`!]
  6.  */
  7.  
  8. $info = isset($info) ? $info : 'city';
  9.  
  10. //проверяем есть ли куки
  11. if(empty($_COOKIE['city']) || $_COOKIE['city']=="undefined") {
  12.  
  13. //получаем ip пользователя
  14. $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
  15. $ip = explode(", ", $ip);
  16. $ip = isset($ip[1]) ? $ip[1] : $ip[0];
  17.  
  18. //запрашиваем информацию с сервера
  19. $url = "http://ipgeobase.ru:7020/geo?ip=".$ip;
  20. $xmlstr = file_get_contents($url);
  21. $xml = new SimpleXMLElement($xmlstr);
  22.  
  23. //сохраняем все данные в куки
  24. $geo['inetnum'] = (string)$xml->ip[0]->inetnum;
  25. $geo['country'] = (string)$xml->ip[0]->country;
  26. $geo['city'] = (string)$xml->ip[0]->city;
  27. $geo['region'] = (string)$xml->ip[0]->region;
  28. $geo['district'] = (string)$xml->ip[0]->district;
  29. $geo['lat'] = (string)$xml->ip[0]->lat;
  30. $geo['lng'] = (string)$xml->ip[0]->lng;
  31.  
  32. setcookie('inetnum',$geo['inetnum'],time()+36000000);
  33. setcookie('country',$geo['country'],time()+36000000);
  34. setcookie('city',$geo['city'],time()+36000000);
  35. setcookie('region',$geo['region'],time()+36000000);
  36. setcookie('district',$geo['district'],time()+36000000);
  37. setcookie('lat',$geo['lat'],time()+36000000);
  38. setcookie('lng',$geo['lng'],time()+36000000);
  39.  
  40. } else {
  41.  
  42. $geo['inetnum'] = $_COOKIE['inetnum'];
  43. $geo['country'] = $_COOKIE['country'];
  44. $geo['city'] = $_COOKIE['city'];
  45. $geo['region'] = $_COOKIE['region'];
  46. $geo['district'] = $_COOKIE['district'];
  47. $geo['lat'] = $_COOKIE['lat'];
  48. $geo['lng'] = $_COOKIE['lng'];
  49.  
  50. }
  51. return $geo[$info];
  52.  
Скрипт срабатывет 1 раз и далее уже берет значение из куков, это в разы уменьшает нагрузку.
2
  1. <?php
  2.  
  3. /**
  4.  * Возвращает информация об IP адресе
  5.  */
  6. function get_ip_info($ip)
  7. {
  8. $postData = "
  9. <ipquery>
  10. <fields>
  11. <all/>
  12. </fields>
  13. <ip-list>
  14. <ip>$ip</ip>
  15. </ip-list>
  16. </ipquery>
  17. ";
  18.  
  19. $curl = curl_init();
  20.  
  21. curl_setopt($curl, CURLOPT_URL, 'http://194.85.91.253:8090/geo/geo.html');
  22. curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
  23. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  24.  
  25. $responseXml = curl_exec($curl);
  26. curl_close($curl);
  27.  
  28. if (substr($responseXml, 0, 5) == '<?xml')
  29. {
  30. $ipinfo = new SimpleXMLElement($responseXml);
  31. return $ipinfo->ip;
  32. }
  33.  
  34. return false;
  35. }
  36.  
  37. // пример использования
  38. $ipinfo = get_ip_info($_SERVER['REMOTE_ADDR']);
  39. echo $ipinfo->city; // город
  40. echo $ipinfo->region; // регион
  41. echo $ipinfo->district; // федеральный округ РФ
  42.  
  43. ?>
/system/controllers/geo/iplookups/ipgeobase.php
  1. <?php
  2. class icmsIpgeobase {
  3.  
  4. public static $title = 'ipgeobase.ru';
  5.  
  6. public static function detect ($ip) {
  7.  
  8. $xml = file_get_contents_from_url('http://ipgeobase.ru:7020/geo?ip='.$ip);
  9. if(!$xml){ return false; }
  10.  
  11. $out = simplexml_load_string($xml);
  12. if(!$out){ return false; }
  13.  
  14. $data = array();
  15.  
  16. if($out && is_object($out) && !empty($out->ip[0])){
  17. foreach ($out->ip[0] as $key=>$value) {
  18. $data[$key] = (string)$value;
  19. }
  20. }
  21.  
  22. return $data;
  23.  
  24. }
  25.  
  26. }
#2 Проблема с картинками 13 октября 2019 в 20:37

Неужели у меня у одного такая проблема?

Capitan
Не только у Вас, из набора изображений в списке отображает всех записей.
#3 Компонент рассылка email, а есть ли он? 13 октября 2019 в 20:25
Есть REST сервис у самого viber. Можно из любого скрипта или программы посылать сообщения. Полное описание здесь — viber.github.io/docs/api/rest-bot-api/
В zabbix нужно настроить событие и привязать к нему свой скрипт, который будет посылать сообщения. Да, также это можно делать и из питона — developers.viber.com/docs/api/python-bot-api/
#4 Редактирование выбранного ПОЛЯ с фронта. Возможно? 12 октября 2019 в 13:42
Я только за развитие этого форума, развитие cms. Ничего личного. С "порчей" буду писать в пяти сообщениях обо всем в одной теме с кучей редактирований
#5 Редактирование выбранного ПОЛЯ с фронта. Возможно? 12 октября 2019 в 12:27
Узнайте ещё про материалы, размеры, наклейки )) Кому-то можно писать про майки (функционал, поля), другим нет? У меня все.
#6 Редактирование выбранного ПОЛЯ с фронта. Возможно? 12 октября 2019 в 12:02
Футболки делятся по производителю, товар один, цена одна на этот товар, выбор цветов можно сделать полем цвет. Или у футболок разных цветов разная цена? Может понадобится массовое изменение полей цена разных производителей по одной и той же цене. Для каталога, магазина, услуг не помешал бы фильтр по полям.
#7 Редактирование выбранного ПОЛЯ с фронта. Возможно? 12 октября 2019 в 11:52
Содержимое полей одинаковое в нескольких материалах? Редактирование записей из списка записей есть в шаблоне Гудтема, например, есть вопросы с полями от dwd, join в виджет фильтр.
#8 РЕШЕНО, но как? 12 октября 2019 в 11:45
/forum/thread32394-1.html#317552, закрыто, а всем интересно решение.
#9 Компонент рассылка email, а есть ли он? 12 октября 2019 в 00:26
Идея то полезная и правильная.
#10 Компонент рассылка email, а есть ли он? 11 октября 2019 в 22:04

Есть другой пример: пришло 2-4 запроса дружбы, 2-4 лайка и т. д, а система рассылки будет ждать полгода-год, пока не появится 3-5 уведомлений

Loadырь
Если это будет возможно настроить админу или пользователю — то будет оптимально ) Важность ЛС \ добавления контента и тд может зависеть от тематики \ направленности сайта, а отправлять емейл по времени наверно лучший вариант.
PS вероятно можно слать уведомления в месседжеры через поля в профиле.
#11 Компонент рассылка email, а есть ли он? 11 октября 2019 в 21:58

отправлять в заданное время с нужным периодом письмо с накопившимися уведомлениями

Loadырь
нужен какой-то интервал времени \ количества, чтобы было не напряжно и не совсем поздно получить уведомление.

Да, мы все умрём.

Ris
это да
#12 Компонент рассылка email, а есть ли он? 11 октября 2019 в 21:53

Не понял, что имеется в виду.

Ris
Пришел запрос о дружбе, прислано одно письмо на почту о предложении от одного человека, кто-то поставил лайк записи пользователя, пришло письмо. Чтобы сократить количество писем каждому пользователю и количество писем в общем, возможно было бы лучше объединить события в одно письмо. Например, пришло 3-5 запросов дружбы, 3-5 лайков за запись и тд — пришло одно письмо о n количестве событий \ уведомлений.
PS такое есть например в pinterest: ваших пинов сохранили 1 или 15. + есть рассылка похожего контента досок, которые есть у пользователя.
#13 Компонент рассылка email, а есть ли он? 11 октября 2019 в 21:44
Ris а можно ли собирать события, уведомления до 3-5 штук и только потом отсылать по емейл с аватаром, превью картинки и тд? Если есть ограничения на хостингах и возможно на почте, а пользователь может в профиле выставить уведомлять "только по емейл", то получится беда.
#14 Ссылка входа на стене 11 октября 2019 в 15:28

Гость вообще там не сможет ничего написать!

Дмитрий Баринов
В 2,12,2 Комментарии — Опции — Разрешить комментирование гостям
Но лучше если не стоит галка "Разрешить комментирование гостям", то чтобы Гостям выводило "Войти" и "Регистрация" .
PS профиль и стена малофункциональны, тип контента лучше.
#15 Ссылка входа на стене 11 октября 2019 в 14:18

Что вы выдумываете?

Дмитрий Баринов
Удалил комментарий, стало писать: Нет комментариев. Ваш будет первым! Войдите или зарегистрируйтесь чтобы добавлять комментарии. Какая разница есть или нет комментариев если Гость не знает как написать комментарий?
🍪Мы используем файлы cookie для работы сайта. Читать подробнее.