Здравствуй
Я пытаюсь понять, как лучше всего выполнить скрипт 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 } ...
Здесь вы можете увидеть все другие связанные с пользователем события.