我有 2 个文件,.tpl 和 .inc.php
在我的 .inc.php 中,我使用 2 个查询来获取一些数据。通过 smarty,我将查询响应传递到 .tpl 文件,并在表和选择列表中显示这些数据。
现在,我希望当用户在选择列表中选择新项目时,我的列表会自动更新。
我实际上能够检测到选择列表上的更改。
问题是,我如何调用该函数
updateToolPrivilegesTableForSelectedTool($Object)
来自.tpl 文件。该函数位于 .inc.php 文件中。这应该可以通过 jquery 实现,但我不知道如何实现。
这是我的代码:
PHP:
<?php
updateToolPrivilegesTable();
$tool =$_DB->queryRaw("SELECT objects FROM backend_menu WHERE parent != 0");
while ($row_tool = $tool->next_assoc())
{
$resultstool[] = $row_tool;
}
$smarty->assign("tool_name",$resultstool);
$smarty->assign("privileges",$resultsprivlieges);
$smarty->TDisplay("users/backend_tools_user_privileges.tpl", "Backend Tools Privileges", "general-content.tpl");
function updateToolPrivilegesTable()
{
global $_DB;
global $resultsprivlieges;
$resultsprivlieges = array();
$privlieges = $_DB->queryRaw("SELECT `group_id`, `user_id`, `Object`, `Read`, `Update`, `Insert`, `Delete` FROM `backend_privileges`");
while ($row = $privlieges->next_assoc())
{
$resultsprivlieges[] = $row;
}
}
function updateToolPrivilegesTableForSelectedTool($Object)
{
global $_DB;
global $resultsprivlieges;
$resultsprivlieges = array();
$privlieges = $_DB->queryRaw("SELECT `group_id`, `user_id`, `Object`, `Read`, `Update`, `Insert`, `Delete` FROM `backend_privileges` WHERE `Object`=$Object");
while ($row = $privlieges->next_assoc())
{
$resultsprivlieges[] = $row;
}
}
?>
HTML (.tpl)
<h1> Backend Tools Privileges</h1>
<table>
<tr>
<td>Tool</td>
<td>
<SELECT name="object" id="selectTool">
{foreach from=$tool_name item=toolItem name=foo}
<OPTION name="object" VALUE="{$toolItem['objects']}">{$toolItem['objects']}</OPTION>
{/foreach}
</SELECT>
</td>
</tr>
</table>
<table width='700px' id="employeetable" class="tablesorter" style='table-layout:fixed;'>
<thead>
<tr>
<th>Group Id</th>
<th>User Id</th>
<th>Object</th>
<th>Read</th>
<th>Update</th>
<th>Insert</th>
<th>Delete</th>
</tr>
</thead>
<tbody>
{foreach from=$privileges item=privilegesItem name=foo}
<tr>
<td>{$privilegesItem['group_id']}</td>
<td>{$privilegesItem['user_id']}</td>
<td>{$privilegesItem['Object']}</td>
<td>{$privilegesItem['Read']}</td>
<td>{$privilegesItem['Update']}</td>
<td>{$privilegesItem['Insert']}</td>
<td>{$privilegesItem['Delete']}</td>
</tr>
{/foreach}
</tbody>
</table>
</form>
{literal}
<script type="text/javascript">
$(selectTool).change(function()
{
!!!!!!! Here I shuld call the function updateToolPrivilegesTableForSelectedTool($Object) from .php file.
}
</script>
{/literal}
最佳答案
您可以简单地使用表单帖子重新加载页面,并将下拉列表中选定的对象作为帖子变量,并在选择框中提交 onchange 表单。
因此将下拉菜单更改为:
<form action="mypage.php" method="post">
<select name="object" id="selectTool" onChange="form.submit()">
<option>Please pick an object to filter...</option>
{foreach from=$tool_name item=toolItem name=foo}
<option name="object" VALUE="{$toolItem['objects']}">{$toolItem['objects']}</option>
{/foreach}
</select>
</form>
然后在你的 PHP 中有:
if(isset($_POST['object']{0})){
updateToolPrivilegesTableForSelectedTool($_POST['object']);
}else{
updateToolPrivilegesTable();
}
小心! 更改 updateToolPrivilegesTableForSelectedTool 中的查询以避免数据库注入(inject):
$privlieges = $_DB->queryRaw("SELECT `group_id`, `user_id`, `Object`, `Read`, `Update`, `Insert`, `Delete` FROM `backend_privileges` WHERE `Object`='".mysql_real_escape_string($Object)."'");
更好的 Ajax 解决方案需要更多代码,因为您需要动态替换整个 tbody 并将 updateToolPrivilegesTableForSelectedTool 移动到单独的文件中。如果您使用某种 jQuery 表排序器插件,您可能还必须再次调用表排序器。让这一切正常工作将会更加棘手,我认为您应该首先了解表单发布的基础知识。
关于php - 如何使用 jQuery 从模板文件调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10998570/