2013-09-28 2 views
0

Я пытаюсь создать систему входа в систему для приложения Android, которое работает с моим веб-сайтом Joomla. Я пытаюсь сделать это, создав плагин Joomla, который приложение android отправляет почтовые данные в php-файл, который затем аутентифицирует пользователя, чтобы проверить, верны ли учетные данные или нет для входа. Я пытался добиться этой работы весь день, но, похоже, все попытки импортировать JFactory не удались.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 class not found in /var/www/joomla2.5/database.php
- Class 'JFactory' not found
- include Jfactory class in an external php file, Joomla

Так что мой упрощенный вопрос, как сделать I импортировать JFactory или хотя бы обойти его в этой ситуации? Кто-то чувствует умнее меня, кто будет так добр, чтобы ответить на этот вопрос :)

Общая информация:

  • Запуск PHP 5.1.13
  • Joomla 2.5
  • Тестирование на WAMP сервер (локальный)
+0

Предлагаю обновить до PHP 5.3 – Laoneo

ответ

3

Я предлагаю пойти официальный 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.

+0

Работает как очарование! Из-за местоположения файла мне пришлось изменять только «JPATH_BASE». Привет, друг! – Nick

+0

Я не понимаю, почему вы получаете экземпляр «MyJoomlaServer» на третьей последней строке кода. Это в API или по умолчанию? – Nick

+1

Да, это API. – Laoneo

0

попробовать это,

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');

Надеется, что это помогает ..

Смежные вопросы