0

我有基于 joomla ajax 的模块,用于从数据库中获取数据。我想用这个脚本从数据库中获取数据

    $db = JFactory::getDBO();
    $db->setQuery("my query");
    $db->query();
    $res = $db->loadAssocList();

但它给了我这样的错误

    Fatal error: Class 'JFactory' not found in 

然后我把这段代码放在页面的顶部

    defined( '_JEXEC' ) or die( 'Restricted access' );

启用 jFacotry 并按预期启用,但现在我无法进入此页面,因为我收到一条消息“受限访问”。

我应该怎么做才能克服这个问题。

4

3 回答 3

1

据我了解您的问题,您想在外部文件中使用 Joomla 方法并调用该文件以通过 ajax 获取数据。如果我是正确的,那么我想说的是,在默认的 Joomla 环境下,您可以直接调用任何外部文件函数到模块。此外,您不能直接使用 Joomla 方法从数据库中获取结果而不包括库文件。

建议:当我遇到同样的问题时,一件事对我有用。我已经制作了一个自定义组件并在其中定义了任务,以从数据库中获取我的数据并通过 ajax 将该任务调用到我的模块中并显示结果。这东西对我有用。

尝试对任何自定义或现有组件控制器进行 ajax 调用,如下所示。

<script>
jQuery.ajax ({
        type: "GET",
        url: "index.php?option=com_custom&controller=custom&task=getdata",
        data: data,
        success: function(data) {
            alert(data)
    }
});
</script>

希望我的建议也能帮助您解决问题。祝你好运。

于 2013-07-31T08:42:39.983 回答
0

如果您尝试使用 ajax 调用访问模块,则正确的方法如下

$document = &JFactory::getDocument();
 $renderer = $document->loadRenderer('module');

 $Module = &JModuleHelper::getModule('mod_fmDataGrid');

 $Params = "param1=bruno\n\rparam2=chris";//This will only required when you pass module params through code
 $Module->params = $Params;
 echo $renderer->render($Module);

更多_

如果您尝试从当前页面访问它,您已经像下面那样加载了框架,但这不是一个好习惯。

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

更多_

尝试对任何现有的组件控制器进行 ajax 调用,如下所示。

jQuery.ajax ({

        type: "GET",

        url: "index.php?option=com_virtuemart&controller=productdetails&ajax_request=1&task=addItemToWaitlist",
//controller components controller name
//task the function inside controller.
        data: data,

        success: function(data) {
            alert(data)
}});
于 2013-07-31T07:33:47.393 回答
0

首先,此代码检查是否_JEXEC定义了常量,如果没有,则显示“限制访问”错误。它没有加载或启用任何东西。

您使用的是哪个版本的 Joomla,您的脚本(组件/模块)在哪里?

于 2013-07-31T07:14:46.580 回答