簡體   English   中英

在外部php文件中包含Jfactory類,Joomla

[英]include Jfactory class in an external php file, 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';
}

}
?>

但這也不起作用。

嘗試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);

現在這一切都按我的意願運作。 現在唯一的事情就是:安全。 我不太確定這是黑客證明。 有人可以評論一下嗎? 謝謝 :)

我確定你弄清楚了,但也許對其他人有用

要使用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();

最近, libraries/joomla/factory.php已被刪除,這導致所有使用require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' );的腳本require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' ); 失敗。 由於這仍然在這里被接受和最受歡迎的答案中使用,現在是時候進行更新......

您不再需要JDatabaseFactory類來通過JFactory::getDBO();使用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();

要訪問Joomla的數據庫信息,您應該包含(“configuration.php”)。這個joomla configuaraion文件包含數據庫訪問的所有信息。

在此文件夾“joomlaRootFolder / libraries / joomla / factory.php”中定義的類JFactory

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM