включить класс Jfactory во внешний php-файл, Joomla

Я пишу модуль для Joomla, на данный момент мне действительно нужно иметь возможность подключиться к базе данных с помощью Jfactory. Обычно можно просто использовать $db = JFactory::getDBO(); , но ошибка PHP говорит мне, что класс JFactory не включен. Поэтому теперь мне нужно знать, как включить этот класс JFactory . Я пробовал пару предложений, найденных в Интернете, но пока не был успешным. Это код (он отлично работает на автономном уровне)

  <?php // server info $server = 'localhost'; $user = 'ss'; $pass = 'oo'; $db = 'ss'; $connection = mysql_connect($server, $user, $pass) or die ("Could not connect to server ... \n" . mysql_error ()); mysql_select_db($db) or die ("Could not connect to database ... \n" . mysql_error ()); if(isSet($_POST['username'])) { $username = $_POST['username']; $username = mysql_real_escape_string($username); $sql_check = mysql_query("SELECT Username FROM users WHERE Username='$username'"); if(mysql_num_rows($sql_check)) { echo '<font color="#cc0000"><STRONG>'.$username.'</STRONG> is already in use.</font>'; } else { echo 'OK'; } } ?> 

Надеюсь, моя проблема понятна вам. Ваша помощь будет высоко оценена.

Попытка 1

 <?php include('../../../../configuration.php'); include('../../../../libraries/joomla/factory.php'); $config =& JFactory::getConfig(); // server info $server2 = $host; $user2 = $user; $pass2 = $password; $db2 = $db; $connection = mysqli_connect($server2, $user2, $pass2) or die ("Could not connect to server ... \n" . mysqli_error ()); mysqli_select_db($db2) or die ("Could not connect to database ... \n" . mysqli_error ()); if(isSet($_POST['username'])) { $username = $_POST['username']; $username = mysql_real_escape_string($username); $sql_check = mysql_query("SELECT username FROM #__users WHERE username='$username'"); if(mysql_num_rows($sql_check)) { echo '<font color="#cc0000"><STRONG>'.$username.'</STRONG> is already in use.</font>'; } else { echo 'OK'; } } ?> в <?php include('../../../../configuration.php'); include('../../../../libraries/joomla/factory.php'); $config =& JFactory::getConfig(); // server info $server2 = $host; $user2 = $user; $pass2 = $password; $db2 = $db; $connection = mysqli_connect($server2, $user2, $pass2) or die ("Could not connect to server ... \n" . mysqli_error ()); mysqli_select_db($db2) or die ("Could not connect to database ... \n" . mysqli_error ()); if(isSet($_POST['username'])) { $username = $_POST['username']; $username = mysql_real_escape_string($username); $sql_check = mysql_query("SELECT username FROM #__users WHERE username='$username'"); if(mysql_num_rows($sql_check)) { echo '<font color="#cc0000"><STRONG>'.$username.'</STRONG> is already in use.</font>'; } else { echo 'OK'; } } ?> в <?php include('../../../../configuration.php'); include('../../../../libraries/joomla/factory.php'); $config =& JFactory::getConfig(); // server info $server2 = $host; $user2 = $user; $pass2 = $password; $db2 = $db; $connection = mysqli_connect($server2, $user2, $pass2) or die ("Could not connect to server ... \n" . mysqli_error ()); mysqli_select_db($db2) or die ("Could not connect to database ... \n" . mysqli_error ()); if(isSet($_POST['username'])) { $username = $_POST['username']; $username = mysql_real_escape_string($username); $sql_check = mysql_query("SELECT username FROM #__users WHERE username='$username'"); if(mysql_num_rows($sql_check)) { echo '<font color="#cc0000"><STRONG>'.$username.'</STRONG> is already in use.</font>'; } else { echo 'OK'; } } ?> 

но это тоже не работает.

попытка 2 (успешная)

 include('../../../../configuration.php'); $jc = new JConfig(); $table = 'users'; $users = $jc->dbprefix . $table; // connect to the database $mysqli = new mysqli($jc->host, $jc->user, $jc->password, $jc->db); в include('../../../../configuration.php'); $jc = new JConfig(); $table = 'users'; $users = $jc->dbprefix . $table; // connect to the database $mysqli = new mysqli($jc->host, $jc->user, $jc->password, $jc->db); 

Теперь все работает так, как я хочу. Теперь единственное: безопасность. Я не слишком уверен в том, что это хакерское доказательство. Может кто-нибудь это проверить? благодаря 🙂

Я уверен, что вы это поняли, но, возможно, это было бы полезно для кого-то еще

Чтобы использовать класс базы данных joomla (даже если вы знаете, что это не рекомендуется :)), вам нужно сначала определить три константы, например:

 define( '_JEXEC', 1 ); define( 'DS', DIRECTORY_SEPARATOR ); define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] ); 

Затем вам нужно включить три файла, например:

 require_once( JPATH_BASE . DS . 'includes' . DS . 'defines.php' ); require_once( JPATH_BASE . DS . 'includes' . DS . 'framework.php' ); require_once( JPATH_BASE . DS . 'libraries' . DS . 'joomla' . DS . 'factory.php' ); $mainframe =& JFactory::getApplication('site'); 

РЕДАКТИРОВАТЬ

Вы можете включить только два файла:

 define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] ); // define JPATH_BASE on the external file require_once( JPATH_BASE . DS . 'libraries' . DS . 'import.php' ); // framework require_once( JPATH_BASE . DS . 'configuration.php' ); // config file 

Наконец, используйте класс joomla, например:

 $db = JFactory::getDBO(); 

Для доступа к информации о базе данных Joomla необходимо включить («configuration.php»). Этот файл конфигурации joomla содержит всю информацию о доступе к базе данных.

класс JFactory, определенный в этой папке «joomlaRootFolder / libraries / joomla / factory.php»

Недавно libraries/joomla/factory.php были удалены, что вызывало все скрипты, которые использовали require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' ); потерпеть неудачу. Поскольку это все еще используется в принятом и наиболее распространенном ответе здесь, пришло время для обновления …

Вам больше не нужен класс JDatabaseFactory для использования функций базы данных Joomla через JFactory::getDBO(); как класс JFactory предоставляет их и получает уже включенное.

Этих пяти строк достаточно :

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

Вы снова сможете это сделать:

 $db =& JFactory::getDBO(); $query = "SELECT ..."; $db->setQuery($query); $db->query();