Joomla — Как подключиться к БД после получения данных с помощью Ajax в файле php

#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 «, вместо какого-либо другого файла. Таким образом, вы уверены, что фреймворк загружен и вы можете использовать любую из его функций при обработке запроса. Другим преимуществом является упрощенное обслуживание (особенно для больших расширений), потому что легче следить за рабочим процессом, когда у вас одна и та же точка входа для всех запросов.