Как определить JPATH_BASE в плагине? - PullRequest
4 голосов
/ 08 августа 2011

Я хочу получить доступ к среде joomla в моем плагине и добавил эти строки кода (мой источник: http://www.diademblogs.com/content-management-systems/two-ways-to-add-joomla-users-using-your-custom-code):

 define( '_JEXEC', 1 );
 define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root
 define( 'DS', DIRECTORY_SEPARATOR );

 require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
 require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

 $mainframe =& JFactory::getApplication('site');
 $mainframe->initialise();

Но как я могу умело определять переменную JPATH_BASE, когда я программируюплагин (более конкретно: плагин авторизации)?

Я использую Joomla 1.7.

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Ваш плагин выполняется приложением Joomla. Так что вам не нужно определять, просто используйте их.

1 голос
/ 02 мая 2012

Я использую это для модульного тестирования компонентов Joomla, поэтому мой файл всегда будет в папке компонентов, которую я получаю, выполняя:

define('JPATH_BASE', dirname( substr(__FILE__, 0, strpos(__FILE__, 'components') )));

Вот что я положил в начало своего тестового класса для загрузки среды Joomla:

//Load Joomla environment
if (! defined('_JEXEC'))
    define('_JEXEC', 1);
$DS=DIRECTORY_SEPARATOR;
define('DS', $DS);

//Get component path
preg_match("/\\{$DS}components\\{$DS}com_.*?\\{$DS}/", __FILE__, $matches, PREG_OFFSET_CAPTURE);
$component_path = substr(__FILE__, 0, strlen($matches[0][0]) + $matches[0][1]);
define('JPATH_COMPONENT', $component_path);

define('JPATH_BASE', substr(__FILE__, 0, strpos(__FILE__, DS.'components'.DS) ));
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once JPATH_BASE .DS.'includes'.DS.'framework.php';
jimport( 'joomla.environment.request' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

Обратите внимание, что Joomla включит буферизацию вывода, поэтому, если кажется, что ваши тесты не дают результата, просто подождите несколько минут.

...