【问题标题】:Joomla with Ajax: Fatal error: Class 'JFactory' not found带有 Ajax 的 Joomla:致命错误:找不到类“JFactory”
【发布时间】:2012-07-29 22:11:59
【问题描述】:

在弄清楚如何同时使用 Ajax 和 Joomla 框架方面仍然存在问题。我创建了一个可以访问的 Joomla 组件:

index.php?option=com_mycomponent

我在components/com_mycomponent/views/mycomponent/tmpl/default.php 中使用带有 Ajax 的 Jquery:

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
?>
<html>
<head>
  <title>Ajax with jQuery Example</title>

<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/JavaScript">
  $(document).ready(function(){
    $("#generate").click(function(){
  $("#quote p").load("components/com_mycomponent/views/mycomponent/tmpl/script.php");

    });
  });
  </script>
</head>
<body>
  <div id="wrapper">
    <div id="quote"><p> </p></div>
    <input type="submit" id="generate" value="Generate!">
  </div>
</body>
</html>

然后在 script.php 文件中我有这个:

<?php  
$user =& JFactory::getUser();
echo "This is the user: ".$user;
?> 

如果我不将任何 Joomla 框架代码放在 script.php 中,它就可以正常工作。但这样做的目的是我需要使用 Joomla 框架,因此是创建组件的重点。但是我仍然不明白我需要如何构造 Joomla 组件,所以我没有收到 Class 'JFactory' not found 错误?

【问题讨论】:

  • 是您在 script.php 中的唯一代码吗?您可以删除 language="javascript",因为它不需要。为什么在 default.php 中使用 htmlbody 标签?
  • @Lodder 这是script.php中唯一的代码。但是,我尝试使用一些简单的回显代码来验证我是否可以让 Ajax 调用正常工作(确实如此)。问题是我需要将 Joomla 框架与 script.php 一起使用。 W.r.t html 和 body 标签,我不知道,我认为这是必要的。

标签: jquery ajax joomla joomla2.5


【解决方案1】:

我认为正确的方法是在组件的 controller.php 文件中添加一个任务。

http://docs.joomla.org/Adding_AJAX_to_your_component

【讨论】:

    【解决方案2】:

    最终并没有花费太长时间。唯一需要的文件是 default.php,因此您可以删除其中的 script.php 和其他奇怪的文件。

    Default.php

    <?php
    defined('_JEXEC') or die('Restricted access');
    
    //$document =& JFactory::getDocument();
    //$document->addScript("https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js");
    $user =& JFactory::getUser();
    ?>
    
    <div id="wrapper">
        <div id="quote" style="display:none; padding-bottom:10px;">
            <?php 
              echo "<p>This is your username: " . $user->username . "</p>"; 
              echo "<p>This is your realname: " . $user->name . "</p>"; 
              echo "<p>This is your user ID: " . $user->id . "</p>";
            ?>
        </div>
        <input type="submit" id="generate" value="Generate!">
    </div>
    
    <script type="text/javascript">
    $(document).ready(function(){
         $("#generate").click(function(){
              $("#quote").show();
         });
    });
    </script>
    

    我已经注释掉了代码中的 jquery 引用,因为 widgetkit 已经在加载它的一个副本,但是为了以防万一,我把它保留在那里。

    它不是加载另一个文件,而是隐藏#quote div 标签,当单击按钮时,它会显示其中的数据。在这一篇中,我添加了realnameuser ID 以防万一。

    希望这会有所帮助。

    问候

    【讨论】:

    • 试过了,但我的“生成”按钮没有做任何事情。虽然没有报JFactory的错误,其实也没有报错?
    • @Tom:您是否在实时站点上有该组件,或者您能否提供下载链接?
    • 希望我能不幸的是它是一个开发站点。我可以给你访问权限,但需要你的 ip
    • @Tom:问题解决了。我已经更新了我的答案。希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-11-03
    • 2013-03-17
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    相关资源
    最近更新 更多