繁体   English   中英

在joomla中,如何使用表单通过ajax返回文章中的动态内容

[英]In joomla, how do I use a form to return dynamic content in an article via ajax

我想将位于模块中的ajax表单的结果输出到当前显示的文章中。 下面是我想要完成的截图。 我想通过ajax从模块(在sidebarA中)输入的表单修改文章中的mysql查询。

在此输入图像描述

这是来自模块的一些截断形式代码通过jumi:

<form action="http://fsdsonline.com/menumanager/index.php/menustab/all-meals/77-component-menus/124-alcohol-n" method="post">
    <option value="AND plate = '1'">Plate FSDS only</option>
    <option value="AND plate = '1'">Prep FSDS only</option>
    <option value="">Plate and Prep FSDS</option>
    </select><br /><select style="font-size: 12px;" name="menu">
    <option value="">All Meals</option>
    <input style="font-size: 12px;" onclick="location=document.menuselector.menu.options[document.menuselector.menu.selectedIndex].value;" type="button" value="Show" /></form>
<div class="success" style="display: none;">View your menu</div>

这是通过jumi文章中的PHP代码。

    mysql_connect($hostname,$username, $password) OR DIE ('Unable to 
connect to database! Please try again later.');
mysql_select_db($dbname);

$plateprep        = $_POST['plateprep'];
$meal = $_POST['meal'];
$pub        = $_POST['pub'];
$avocado = $_POST['avocado'];
$alcohol = $_POST['alcohol'];


$result = mysql_query("SELECT catnum, ctgry, Shrt_Desc, `desc`,  ROUND(`Energ_Kcal`*`yield`*`qty` ) AS `cal` FROM allinnot a
LEFT JOIN allinfsds b
ON a.`NDB_No2` = b.id1
LEFT JOIN fdcat h ON b.product_type = h.unik
LEFT JOIN allinnot2 g ON a.`NDB_No2` = g.NDB_No
LEFT JOIN allincomp j ON a.`NDB_No2` = j.fsds_num
WHERE `own_id` = $user->id $plateprep $pub $meal $avocado $alcohol
ORDER BY `catnum`, `order`");


$cat = null;
$first = true;
while ($row = mysql_fetch_array($result)) {
    if ($row['catnum'] != $cat) {
       if (!$first) {
           echo '</table>'; // close the table if we're NOT the first row being output.
       }

       $first = false; // no longer the first table, so disable this check.
        echo '<p style="line-height: 12pt; font-size: 12pt;"><strong>' . $row['ctgry'] . '</strong></p>';
       echo '<table>'; // start new table
       $cat = $row['catnum'];
    }
    echo "<tr><td>" . $row['Shrt_Desc'] . "</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" . $row['desc'] . "&nbsp;&nbsp;" . $row['cal'] . " cal</td></tr>";
}
?>
</table>
</body>
</html>

我认为我已经正确编码了我的查询,表单看起来不错,但我如何通过ajax连接两个? 谢谢!!

我担心我不熟悉jumi。

通常做一个ajax请求你的javascript文件将对特定的php文件发出ajax请求。 如果你打算使用ajax,你需要以某种方式在表单中触发它。 php文件应该回显你想要的信息,回到发出ajax请求的文件。

在这种情况下,我认为ajax请求必须转到你嵌入jumi的页面,但我不确定。

如果你打算使用ajax,那么我建议使用jquery来做。 它让生活变得更轻松。 以下是使用jquery进行的简单ajax请求的示例。

$.ajax({  
            type: "POST",  
            url: "joomla_page.php",  
            data: { 'menu': menu },   
            success: function(){  
            informationfromphp= data.menu; //This is $menu echod from php
            $('#menuid').html('<span class="food_results">Success!</span>');
            } 
        })

在您的PHP代码中,使用类似的东西捕获ajax消息

if (isset($_GET['menu'])) { 
    //do something ;
} 

然后在php中做一些事情(比如打电话给DB)。 之后,您可以使用echo将信息从php返回到ajax文件。

echo $menu; 

请注意,这不是一个有效的例子,只是一个粗略的想法让你开始。 您将在stackoverflow上找到许多其他示例。

使用jumi与joomla会给你路径问题:

在您的PHP代码(服务器端)中 ,您将拥有所有include和require:

_ 使用$ _SERVER ['DOCUMENT_ROOT']使用绝对路径

_或重新定义jumi tu使用你的包含的路径(未经测试,似乎在我的macGiver修复,无论如何使用jumi ......)。

Actualy,还有另一个问题,客户端,由joomla选择引起:

html BASE由joomla在每个页面上定义 ,默认情况下,基础是人类可读的URL ...所以对于你的html和javascript中的url,要注意相对uri ... 你会对绝对uri好。

因此,在您的情况下,使用ajax,客户端,您必须使用绝对URL精确定位目标,并在您的php中,为其他文件中使用的所有资源提供绝对路径。

管理工作jomery自动完成joomla over jumi与此。

请注意, joomla使用mootools ,并且你只能在页面后面包含jquery(你在jumi中所做的只是在体内)。 有时候,jquery和mootols并不能很好地融合在一起:类似的使用$。 有时你必须使用jquery.noConflict。

我建议只使用一种javascript框架,但是,有时候,你必须管理旧的选择......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM