0 Пользователей и 1 Гость просматривают эту тему.
  • 22 Ответов
  • 520 Просмотров
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
Всем привет!
Если я не ошибаюсь, то в старых версиях Joomla (1.5-2.5) была возможность загрузки сайта на нужном языке в зависимости от местоположения юзера. Сейчас же в настройках только две опции: язык сайта/настройки браузера.
Возможно я ошибаюсь, и те настройки, о которых я говорю были исключительно для JoomFish, которой я раньше пользовался.

Как бы там ни было, прошу помощу. Может кто знает, как такое реализовать.
Если подробнее: русский язык должен быть только для России, для остальных стран — английский.

Заранее всем спасибо!
*

Gerostrat

  • Захожу иногда
  • 361
  • 2 / 0
  • Свидетель чайной ложки
здра. так было на форуме чего-то такое
[Решено] Смена языка сайта по IP
Там очень ограниченное количество запросов можно делать к тому сайту для определения страны по IP. После определённого количества запросов сайт будет отдавать код 429 или что-то такое...
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
effrit, Gerostrat
Спасибо за подсказки! Я находил тот пост, на который вы ссылаетесь, но не был уверен, что это именно то, что нужно мне.
К тому же, я не понял, что делать с этим кодом. Модифицировать какой-то стандартный плагин, или же это код отдельного плагина?
*

effrit

  • Легенда
  • 9730
  • 1070 / 13
  • effrit.com
можно сделать болванку и в неё вставить
http://inet-reklama.com/sozdanie-plagina.html

или в любой системный плагин добавить
вот это и то, что внутри (если в нем нет одноименной функции. если есть, то добавить только сам код)
Код
public function onAfterInitialise(){
}
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
Вот это уже понятнее! Спасибо. Буду пробовать.
*

Gerostrat

  • Захожу иногда
  • 361
  • 2 / 0
  • Свидетель чайной ложки
ну так надо в сессию или куку записывать значение, а не злоупотреблять хорошими сервисами  ;)
Можно, это да. Но дело в том, что для каждого посетителя нужно заново определять страну, а если посещаемость 5к в сутки? 10к? 30к?
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
Товарищи, в моём случае, если будет 100 посетителей в сутки, то это будет праздник.
Так что пока-что мне и этого будет достаточно, если смогу реализовать это решение с куками.
*

sivers

  • Завсегдатай
  • 1082
  • 138 / 0
Товарищи, в моём случае, если будет 100 посетителей в сутки, то это будет праздник.
А потом вас настигнет успех, посещалка вырастет до 500 и тут сайт загнется из-за невозможности работы с внешним сервисом )
Попробуйте SxGeo - он тоже определяет город/страну по IP, но ищет в своей локальной базе. Ее можно обновлять время от времени. Наберите это в поиске - первым же результатом будет Sypex Geo. Скрипт бесплатный и базы (раньше точно) тоже.

Упс. По ссылке выше именно про эту библиотеку и пишут. Ладно...
На связи в телеге @sivers
*

Gerostrat

  • Захожу иногда
  • 361
  • 2 / 0
  • Свидетель чайной ложки
Есть модуль, работающий с базами Maxmind GeoIP https://dev.maxmind.com/geoip/geoip2/geolite2/
Базы бесплатные, но нужно региться уже.
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
Gerostrat, зарегился, но как скачать не понял пока что :dry:
И что за модуль такой, который с этими базами работает?
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
effrit
Не получилось у меня его задействовать.
Взял код плагина, вставил его в заглушку, предварительно сгенерированную на сайте по вашей ссылке.
После установки плагина, к сожалению, я им воспользоваться не смог.
Во-первых он устанавливается не в /system/ плагины а в /authentication/, из-за чего при попытке авторизации сразу ошибку выдаёт. Ну то ладно ) Авторизация не нужна будет.
Во-вторых, если я правильно понял, надо ещё как-то подключать SxGeo.php, а в нутри него ещё есть ссылка на SxGeo.dat. Как всё это слепить в кучу, я не понял, и написал в личку pavel2950, от которого пока что жду ответ  ^-^

Я нашёл другой, в чём-то аналогичный, плагин: https://github.com/betweenbrain/Freegeoip-Plugin/releases
До 10 000 запросов можно в час делать.
Вот его код:
[свернуть]
Вот доступные переменные, которые он возвращает:
[свернуть]

Я попробовал, по аналогии с плагином Павла, взять данные из переменной freegeoip_country_code и заменить $uri, но совершенно ничего не вышло.
Возможно я не в той функции пытаюсь это сделать. Буду благодарен, если подскажете, как сделать, чтоб этот плагин вывел где-нибудь хотябы код текущей страны. А дальше я уже буду сам копать.
« Последнее редактирование: 11.02.2020, 18:04:05 от goga_pgasovav »
*

sivers

  • Завсегдатай
  • 1082
  • 138 / 0
Не знаю зачем оно вам. Но я б делал вообще без плагинов. Сперва настроил бы стандартную многоязычность джумлы, чтоб в адресе добавлялось /en/, /ru/, /ua/ и т.д., а потом добавил бы в корень сайта файл defines.php - он запускается до инициализации джумлы (и раньше всех ее плагинов, соответственно). В этом файле подключил бы библиотеку sxGeo, чтоб не тянуть ничего извне и не иметь ограничений по запросам. Из нее получал бы код страны и подменял адресный uri через $_SERVER['REQUEST_URI'] - именно его потом парсит джумла, чтоб язык подключался на одних и тех же (визуально для пользователя) ссылках без языковой метки. Если метка в ссылках нужна, то последний пункт заменить на редирект на ту же ссылку, только с подмененным языком.
На связи в телеге @sivers
*

effrit

  • Легенда
  • 9730
  • 1070 / 13
  • effrit.com
ну камон!
в генераторе плагина жмем на События, в Группе выбираем System и ставим галку напротив onAfterInitialise.
там же не просто кнопка "сделать зашибись", а с опциями...  ;D
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
sivers, effrit,
Камрады, ещё раз спасибо за помощь! Вопрос считаю закрытым. Всё получилось.  :D

В общем, если кому-то ещё понадобится нечто подобное, то вот инструкция:
1. Идём сюда: Смена языка сайта по IP и берём код из поста.
2. Создаём пустой плагин и вставляем в него этот код. Плагин можно сгенерировать тут: http://inet-reklama.com/sozdanie-plagina.html В "Событиях" обязательно выбрать группу 'system'.
3. В плагине меняем условия на те, которые вас будут устраивать.
4. Иждём сюда: https://sypexgeo.net/ru/download/ и качаем Sypex Geo API (Sypex Geo для PHP 5.2+) и Базы данных для Sypex Geo 2.2 (в моём случае — Sypex Geo Country, для определения страны)
5. В корень папки с плагином нужно положить эти два файла.
На этом всё.
« Последнее редактирование: 11.02.2020, 21:47:43 от goga_pgasovav »
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
Не прошло и полгода, как я возвращаюсь к вам со своими бедами  ;D
Короче говоря, всё работало как часы, НО! Переключение языков перестало работать. Что логично, т.к. сколько бы мы не переключали язык, при загрузке страницы плагин всё равно подменит его в зависимости от местоположения.

Я в PHP совсем не силён, и кукиз тем более никогда не использовал с помощью PHP (хотя в JS постоянно ими пользуюсь).
Модифицировал код вот так:

Код: php
<?php
defined('_JEXEC') or die;

class PlgSystemAutochangelang extends JPlugin {
    public function onAfterInitialise() {
        $app = JFactory::getApplication();
        if ($app->isSite()) {
            $uri = $_SERVER['REQUEST_URI'];           

            include_once __DIR__.'/SxGeo.php';

            $SxGeo = new SxGeo( __DIR__ .'/SxGeo.dat', SXGEO_BATCH | SXGEO_MEMORY);
            $get_country = $SxGeo->getCountry($_SERVER['REMOTE_ADDR']);
           
            if (!isset($_COOKIE['jcountry'])) {
                setcookie('jcountry', $get_country, time() + 2592000, '/');
                if ($get_country != 'RU' && strpos($uri, '/ru/')!== false) {
                    $uri = str_replace('/ru/', '/en/', $uri);
                } elseif ($get_country == 'RU' && strpos($uri, '/en/')!== false) {
                    $uri = str_replace('/en/', '/ru/', $uri);
                }
            }

            if ($uri != $_SERVER['REQUEST_URI']) {
                header('HTTP/1.1 303 See Other');
                header('Location: '.$uri);
                exit();
            }
        }
    }
}
?>

После этого языки переключаются как положено, но местоположение Россия никогда не срабатывает, хотя в куках записывается код страны 'RU'.
Как только убираю из кода проверку куки, то определение местоположения снова работает, а переключение языков — нет.
Отсюда вопрос: что я делаю не так?  :o
« Последнее редактирование: 12.02.2020, 17:54:02 от goga_pgasovav »
*

effrit

  • Легенда
  • 9730
  • 1070 / 13
  • effrit.com
в момент переключения языков на js запиши куку "не_юзать_автомат".
код внутри плагина оберни в условие на проверку наличия этой куки...
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
effrit,
Ну так по логике моего кода и так проверка с условием (если я нигде не ошибся):

1. Проверяю, наличие куки, если её НЕТ то идём дальше
2. Устанавливаем куку, делаем принудительное переключение языка

Если кука существует, то и происходить дальше не должно ничего.
Или я не прав?  *ОХ-Х-Х*
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
Ну это просто какое-то наваждение  :'(
Перенёс проверку в самое начало кода, но всё равно не работает.
Как только убираю !isset($_COOKIE['jcountry']) сразу заводится! :dry:
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
Разробрался!
Вот финальный код
[свернуть]
Кроме этого, хотелось бы добавить, что на каждую ссылку языка в «переключателе» необходимо повесить установку кукис через JS.
Я это сделал так:
Код: js
$('#language a').on('click', function(e) {
        $.cookie('jcountry', '1', { expires: 30, path: '/' });
});

P.S.: Значение куки значения не имеет ) Пардон за каламбур. Без этого скрипта работать будет, но с глюками.
P.S.2: Само собой, для работы jQuery c кукис, надо подключить соответствующий плагин. Я уже много лет использую этот: https://github.com/carhartl/jquery-cookie
« Последнее редактирование: 12.02.2020, 18:51:51 от goga_pgasovav »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

В шапке сайта появился "левый" баннерый

Автор dron

Ответов: 8
Просмотров: 257
Последний ответ 02.04.2020, 20:02:06
от dron
Загрузка моб.версии сайта на десктопе посетителя по умолчанию?

Автор Cassini

Ответов: 0
Просмотров: 67
Последний ответ 02.04.2020, 13:34:34
от Cassini
Импорт сайта в Joomla

Автор ZerGO

Ответов: 8
Просмотров: 255
Последний ответ 29.03.2020, 17:37:02
от gartes
Как вывести название группы дополнительных полей на фронте сайта?

Автор SolopoV

Ответов: 2
Просмотров: 109
Последний ответ 23.03.2020, 07:23:27
от SolopoV
Модуль входа в мобильной версии сайта

Автор bigbelka

Ответов: 2
Просмотров: 107
Последний ответ 20.03.2020, 07:55:10
от AlexB