Выполнить PHP-скрипт внутри Joomla! cms Once - перенаправление на основе гео - PullRequest
0 голосов
/ 09 октября 2010

Привет
Я пытаюсь найти лучший способ выполнить скрипт PHP внутри Joomla!
Я хочу перенаправить пользователей, если они не из страны X (уже есть база данных и скрипт)
Я нашел это расширение, но я хочу сделать свой собственный материал http://bit.ly/daenzU

1) Как я мог выполнить скрипт один раз для каждого посетителя?Работаете с Cookies?
2) Как я поставлю скрипт внутри Joomla!Шаблон, я буду изменять шаблоны / XXX / index.php
3) На основе 2), Joomla!загружает templates / XXX / index.php каждый раз при загрузке страницы, поэтому я должен избегать повторного выполнения сценария перенаправления для пользователя

Заранее благодарен за ваши идеи и предложения

Ответы [ 2 ]

2 голосов
/ 30 октября 2014

Просто помните, что в Joomla 3.x (согласно docs ), чтобы проверить информацию о пользователе перед событием 'Login', вам нужно создать свой плагин в 'контекст аутентификации.То есть ваш плагин должен быть в root_to_joomla / plugins / authentication / myplugin / myplugin.php '.

Также ваш плагин должен быть классом с именем PlgAuthenticationMyplugin, он должен расширять базовый класс плагинов' JPlugin'и должен иметь открытый метод с именем' onUserAuthenticate '.

<?php
...
class PlgAuthenticationMyplugin extends JPlugin {
...
    public function onUserAuthenticate($credentials, $options, &$response)
    {
        //your code here (check the users location or whatever)
    }
....

Если вы хотите сделать это после события входа в систему, ваш плагин должен находиться в контексте пользователя, в root_to_joomla / plugins / user / myplugin /myplugin.php.И должен иметь открытый метод 'onUserLogin'.

<?php
class PlgUserMyplugin extends JPLugin {
...
    public function onUserLogin($user, $options)
    {
        //your test goes here
    }
...

Вы можете увидеть все другие связанные с пользователем события здесь .

0 голосов
/ 12 октября 2010

НЕ модифицируйте шаблон, это поможет, но не в том месте.

Советую создать плагин, см. Документация Joomla по плагинам .Вот порядок выполнения событий событий.

Создайте системный плагин и внедрите метод onAfterInitialise.В этом методе добавьте весь свой код.

Чтобы предотвратить выполнение сценария дважды для каждого пользователя, установите пользовательское состояние, см. Документацию Joomla для состояний .Вы также можете использовать сеанс $session = JFactory::getSession(), см. Документацию .

Вот код ... для вашего плагина.

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.plugin.plugin' );

class plgMyPlugin extends JPlugin {

    //
    public function __construct(){
        //  your code here
    }

    //
    public function onAfterInitialise(){
        $app = JFactory::getApplication();

        //
        $state = $app->getUserStateFromRequest( "plgMyPlugin.is_processed", 'is_processed', null );
        if (!$state){
            //  your code here
            //  ....

            //  Set the Steate to prevent from execution
            $app->setUserState( "plgMyPlugin.is_processed", 1 );
        }


    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...