Я пытаюсь создать систему входа в систему для приложения Android, которое работает с моим веб-сайтом Joomla. Я пытаюсь сделать это, создав плагин Joomla, который приложение android отправляет почтовые данные в php-файл, который затем аутентифицирует пользователя, чтобы проверить, верны ли учетные данные или нет для входа. Я пытался добиться этой работы весь день, но, похоже, все попытки импортировать JFactory не удались.
У меня есть код ниже, который появляется при первом упоминании JFactory. Моя попытка импортировать его также не работает.
<?php //needed to be commented out otherwise the android application cannot send data to the file //defined('_JEXEC') or die; define('_JREQUEST_NO_CLEAN', 1); define('_JEXEC', 1); define('DS', DIRECTORY_SEPARATOR); if (file_exists(dirname(__FILE__) . '/defines.php')) { include_once dirname(__FILE__) . '/defines.php'; } if (!defined('_JDEFINES')) { define('JPATH_BASE', dirname(__FILE__)); require_once JPATH_BASE.'/includes/defines.php'; } require_once JPATH_BASE.'/includes/framework.php'; require_once JPATH_BASE.'/includes/helper.php'; require_once JPATH_BASE.'/includes/toolbar.php'; require JPATH_BASE.'/library/joomla/factory.php'; $email = $_POST['email']; $password = $_POST['password']; file_put_contents("Log.txt", "got data: ".$email." and ".$password); $credentials->email = $email; $credentials->password = $password; $responce; //error occurs here $db = JFactory::getDbo(); ... ?>
Я рассмотрел другие вопросы об импорте JFactory, но никто из них не работает для меня:
– JFactory, класс JDatabase не найден в /var/www/joomla2.5/database.php
– Класс «JFactory» не найден
– включить класс Jfactory во внешний php-файл, Joomla
Итак, мой упрощенный вопрос: как импортировать JFactory или, по крайней мере, обойти его в этой ситуации? Кто-то чувствует себя умнее меня, который был бы так добр, чтобы ответить на вопрос 🙂
Главная Информация:
Я предлагаю пойти официальным способом Joomla и загрузить приложение. То, что я делал, работает очень хорошо и является рекомендуемым способом Joomla (я не тестировал код ниже, но он должен дать вам отправную точку, поскольку это был экземпляр копирования из нескольких источников в моем коде).
define('_JEXEC', 1); define('DS', DIRECTORY_SEPARATOR); error_reporting(E_ALL | E_NOTICE); ini_set('display_errors', 1); define('JPATH_BASE', dirname(dirname(dirname(__FILE__)))); require_once JPATH_BASE.DS.'includes'.DS.'defines.php'; require JPATH_LIBRARIES.DS.'import.php'; require JPATH_LIBRARIES.DS.'cms.php'; JLoader::import('joomla.user.authentication'); JLoader::import('joomla.application.component.helper'); class MyJoomlaServer extends JApplicationWeb { public function doExecute() { $config = JFactory::getConfig(); $email = $_POST['email']; $password = $_POST['password']; $user = ...;//get the user with the email file_put_contents("Log.txt", "got data: ".$email." and ".$password); $authenticate = JAuthentication::getInstance(); $response = $authenticate->authenticate(array('username' => $user->username, 'password' => $password)); return $response->status === JAuthentication::STATUS_SUCCESS; } public function isAdmin() { return false; } } $app = JApplicationWeb::getInstance('MyJoomlaServer'); JFactory::$application = $app; $app->execute();
Что-то вдоль линий работает для меня. Более примеры платформ можно найти здесь: https://github.com/joomla/joomla-platform-examples/tree/master/web .
попробуй это,
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(); $db = JFactory::getDbo();
Он будет работать, вы пропустили JFactory::getApplication('site');
Надеюсь, поможет..