#php #mysql #ajax #joomla
#php #mysql #ajax #joomla
Вопрос:
Я создаю компонент для Joomla 1.6.
У меня проблема с подключением к базе данных.
Я отправил данные в php-файл под названием rating.php с помощью ajax; Данные без проблем отправляются в файл. Однако данные не отправляются, если я оставляю строку
определено ('_JEXEC') или die ('Ограниченный доступ');
но я получаю сообщение «ограниченный доступ».
Во-вторых, даже когда я закомментирую предыдущую проверку, я не могу подключиться к своей базе данных внутри этого php-файла, очевидно, потому что я не могу вызвать переменные Joomla (например, getDBO ()) внутри файла. Что я могу сделать, чтобы решить эти 2 проблемы?
Спасибо
Ответ №1:
Joomla установит _JEXEC только при просмотре вашего сайта через index.php . Другими словами, Joomla ничего не будет делать с файлами, которые находятся «вне» Joomla. _JEXEC не будет установлен, и база данных не будет подключена.
Чтобы решить проблему, я бы включил страницу Joomla, чтобы база данных была загружена:
<?php
ob_start();
require 'index.php';
ob_end_clean();
// Rating code
?>
Этот код включает домашнюю страницу вашего сайта и использует буферизацию вывода, чтобы фактически не выводить ваш сайт. Вам не нужно проверять наличие _JEXEC, потому что единственная причина, по которой он используется, — убедиться, что кто-то не обращается напрямую к файлу, не проходя через Joomla. В вашем случае _JEXEC не имеет значения.
Чтобы ускорить ваш скрипт, замените index.php со ссылкой на внутреннюю страницу с минимальным содержанием. Домашние страницы, как правило, работают медленнее, чем внутренняя страница.
Я не тестировал этот код, но он должен работать.
Ответ №2:
Если вы разрабатываете компонент, всегда неплохо отправлять свои запросы через «index.php «, вместо какого-либо другого файла. Таким образом, вы уверены, что фреймворк загружен и вы можете использовать любую из его функций при обработке запроса. Другим преимуществом является упрощенное обслуживание (особенно для больших расширений), потому что легче следить за рабочим процессом, когда у вас одна и та же точка входа для всех запросов.