2012-06-12 47 views
2

我有2個文件,.tpl和.inc.php如何從模板文件調用一個函數使用jQuery

在我.inc.php我使用2個querys得到一些數據。隨着聰明,我將查詢響應傳遞給.tpl文件,並在表格和選擇列表中顯示這些數據。

現在,我希望當用戶在選擇列表中選擇一個新項目時,我的列表會自動更新。

我實際上能夠檢測到選擇列表上的更改。

的問題是,我怎麼能調用從.tpl文件中的函數

updateToolPrivilegesTableForSelectedTool($Object) 

。該函數位於.inc.php文件中。這個shuld可能與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} 
+0

好像你想使用'ajax'。 –

+1

也許這可以幫助你 http://stackoverflow.com/questions/2269307/using-jquery-ajax-to-call-a-php-function – pirmin

+0

謝謝@ExplosionPills和pirmin,是的。我已經嘗試了karim79的答案,但我不能訪問我的功能,你能否幫助我 –

回答

2

你可以簡單地用一個表格後,在所選擇的對象重新加載頁面你的下拉列表中有一個變量表單,在你的選擇框中提交。

因此改變你的下拉到:

<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避免數據庫注入:

$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 tablesorter插件,您可能還需要再次調用tablesorter。讓這一切正常工作會更棘手,你應該首先理解表單發佈的基礎知識。

+0

謝謝安德魯,但沒有任何反應,當我嘗試這樣做...你能幫我 –

+0

你是否改變了所有三個部分?請注意,mypage.php需要使用與您加載位置相同的文件名替換。仔細檢查$ _POST ['object']是否已填充(也許使用echo $ _POST ['object']回顯),並檢查您的sql查詢是否正確。回聲「SELECT'group_id','user_id','Object','Read','Update','Insert','Delete' FROM'backend_privileges' WHERE'Object' ='」。mysql_real_escape_string($ Object) 「;當它進入該功能。 –

+0

不好意思,改成這行this.submit()來形成。提交(); –

相關問題