Выполнить скрипт PHP внутри Joomla! cms один раз – перенаправление на основе геоданных

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

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

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

НЕ изменяйте шаблон, это сделает трюк, но не подходит.

Я советую вам создать плагин, см. Документы Joomla о плагинах . Ниже приведен порядок выполнения событий.

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

Чтобы предотвратить выполнение сценария дважды для каждого пользователя, задайте состояние пользователя, см. Документацию Joomla для состояний . Вы также можете использовать session $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 ); } } } 

Просто помните, что в Joomla 3.x (согласно документам ), чтобы проверить информацию о пользователе перед событием «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 } ... 

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