使用Javascript从Joomla加载数据

Kha*_*gan 5 javascript ajax jquery joomla

我目前正在使用PHP编写时间表应用程序.

我想要做的是为一周中的每一天都设置一个按钮,当用户点击每个按钮时,使用JavaScript将当天列出的任务加载到浏览器窗口中.

我目前的代码是:

<?php
class loadTimetable
{
    public static function getTimetable( $params )
    {
        //Obtain a database connection
        $db = JFactory::getDbo();
        //Retrieve the shout
        $query = $db->getQuery(true)
                    ->select($db->quoteName('title'))
                    ->from($db->quoteName('#__timetable'))
                    ->where('day = '. $db->Quote($params));
        //Prepare the query
        $db->setQuery($query);
        // Load the row.
        $result = $db->loadResult();
        //Return the Hello
        return $result;
    }
}
$day = date("N");
$timetable = getTimetable($day);
?>
<h1><?php echo $timetable; ?></h1>
Run Code Online (Sandbox Code Playgroud)

该功能在Joomla内部,经过测试可以正常工作.我需要的帮助是如何使用Javascript/AJAX调用该函数.

据我所知,所有Javascript必须做的是调用所选日期的函数(例如,getTimetable(1)其中1是HTML中星期一按钮的值).

Ric*_*orn 2

根据您的问题和进一步的评论,您应该将代码(或至少其调用)移至组件。只有组件可以被“调用”。有很多选项,但为了保持简单,您至少需要(在组件中):

  1. 控制器中的任务,即getTimetable()接收ajax调用的函数;这也可以在子控制器中完成。如果是控制器,您将使用 来调用它index.php?option=com_yourcomponent&task=getTimetable&day=2011-09-17,如果是子控制器task=subcontroller.getTimetable

  2. 您粘贴到模块中的函数(我们现在将其称为 timemodule)getTimetable($day)需要公开。

  3. controller:getTimetable()函数将

    3.a. 解析和清理日期参数输入;

    3.b. 实例化模块 timemodule

    3.c. 实例化视图,注入模块,让它加载数据库的结果并

    3.d. 调用视图的render()方法

    3.e. 语句exit(因此 Joomla 不会渲染模板和其他模块(您想要的只是 json/xml 输出)。

当然,还有很多选择;在控制器中,您可以使用设置日期变量setUserState,然后重定向到视图,并使用模块中用户状态中的变量;这实际上是一个偏好问题,您要记住的是,exit应该在呈现输出的循环中调用该语句,因此如果您重定向,您将在视图的display()方法中调用它。您还可以附加&format=json到您的网址来实现此目的。