Использование собственного скрипта и интеграция с Joomla 1.6-2.х

Сегодня решил поделиться опытом подключения стороннего PHP-скрипта с интеграцией в Joomla 1.6-2.5 версий. Для простоты изложения приведу реальную задачу, которую пришлось решать написанием ряда скриптов и в дальнейшем их связать между собой. Несмотря на некоторые недостатки, которые имею место быть, я все же изложу свои практические решения.

Задача
Создать калькулятор некого продукта на базе фреймворка Jquery и связать с порталом, который работает на базе ядра Joomla 1.6. Реализовать возможность использования калькулятора только для зарегистрированных и авторизованных пользователей портала.

Решение
Поставленная задача при знании дела решается несложно, при условии, что известно модель и варианты ее решения.

1) Сначала я написал непосредственно скрипт калькулятора в коде HTML+JavaScript. В результате получился какой-то целевой файл calc.php (не забудьте назначить 755 атрибуты прав доступа к файлу скрипта). Согласно структуры каталогов Joomla я решил не помещать скрипт в какой-то существующий каталог, а создать новый, скажем, CALCULATOR и разместил его в корневом каталоге портала на базе Joomla:
---Корневой_каталог_портала
     |
     | ---- CALCULATOR
                |-- calc.php
     | ---- components
     | ---- libraries
     | ---- ......
     | ---- templates
     | - .....
     | - index.php

2) Далее нужно позаботиться о коде, который будет перед запуском калькулятора проверять статус пользователя портала. Конечно же в этом случае нет смысла писать кучу кода для прямого доступа к базе банных портала и проверять по базе активные сессии (конечно же при условии, что сессии хранятся в базе данных портала). Нам известно, что существует структурированное описание Joomla API, которое четко описывает классы, методы и переменные, которые при соблюдении определенных правил можно использовать в собственных скриптах, подобно calc.php

В моем случае необходимо позаботиться об использовании встроенной функции проверки статуса и, по возможности, идентификации авторизованного пользователя. Выясняем, что нам подходит хорошо для решения задачи класс JFactory. Приведу теперь сразу код полноценного скрипта оценки статуса текущего пользователя. Этот код будет заключен в отдельный файл, checkstatus.php.

<?php
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__));
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
/* Создание приложения на базе основного класса JFactory*/
$mainframe =& JFactory::getApplication('site');
/* Проверка глобального статуса текущего пользователя. Логический 0 - гость*/
if (JFactory::getUser()->id == 0)
die("Для просмотра этой информации необходимо пройти авторизацию/регистрацию на сайте.");
?>
 

3) Теперь возникает вопрос куда можно поместить созданный php-скрипт checkstatus.php. Чтобы скрипт корректно работал, его надо корректно разместить в каталогах с Joomla. Существует несколько вариантов размещения такого самописного файла, равно как и вообще создания приложений для Joomla. Начиная с версии Joomla 1.6, система самостоятельно просматривает новые файлы модели и корректно отдает им запрошенные переменные и функции ядра. Самое простое и корректное размещение нашего файла будет в корне портала с Joomla. Важно соблюсти описание служебных переменных, объявления классов и их использования с нотацией специальных переменных системы Joomla, например, DS (directory separator, т.е. разделитель каталогов в описании пути - знак "/"). 

---Корневой_каталог_портала
     |
     | ---- CALCULATOR
                |-- calc.php

     | ---- components
     | ---- libraries
     | ---- ......
     | ---- templates
     | - .....
     | - index.php
     | - checkstatus.php

4) Теперь остается последний этап интеграции с ранее созданным скриптом калькулятора, лежащего вне модели Joomla. Для этого в начале скрипта calc.php  прописываем функцию принудительного использования скрипта проверки статуса пользователя.

<?php include '../../checkstatus.php'; ?>

5) Теперь при попытке пользователя вызвать скрипт посредством прямого указания URL: http://s-i-t-e.ru/CALCULATOR/calc.php первоначально будет вызван скрипт проверки статуса пользователя. Если пользователь - гость, то для него сеанс дальнейшей загрузки сценария калькулятора будет прерван функцией die(). Данный момент не очень хороший, т.к. в этом случае гость будет полностью лишен возможности просматривать остальное содержимое портала. Для решения моей задачи данного метода вполне достаточно, т.к. я использую вызов калькулятора в модальном всплывающем окне (плагин Modalazer). 

Если у вас есть вопросы по данной, то создайте тему в моем форуме и я постараюсь ответить.