2012-06-12 3 views
2

У меня есть 2 файлов, .TPL и .inc.phpКак вызвать функцию из файла шаблона с JQuery

В моем .inc.php я использую 2 querys, чтобы получить какие-то данные. С 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} 
+0

Похоже, вы хотите использовать 'ajax'. –

+1

возможно это может вам помочь http://stackoverflow.com/questions/2269307/using-jquery-ajax-to-call-a-php-function – pirmin

+0

Спасибо @ExplosionPills и pirmin, да точно. Я попробовал ответ karim79, но я не пользуюсь своей функцией, не могли бы вы мне помочь –

ответ

2

Вы могли бы просто использовать форму пост, чтобы перезагрузить страницу с выбранным объектом в ваш drop down как переменная post с формой onchange submit в вашем поле выбора.

Так изменить падение вниз:

<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. Будет более сложным, чтобы все это работало правильно, и сначала я должен понять основы публикации формы.

+0

Спасибо, но ничего не происходит, когда я пытаюсь это сделать ... Не могли бы вы помочь мне? –

+0

Вы изменили все три части? Обратите внимание, что mypage.php необходимо заменить на то же имя файла, что и при загрузке. Двойная проверка заполнения $ _POST ['object'] (возможно, эхо с эхом $ _POST ['object']), а также проверить, что ваш запрос sql верен. echo "SELECT' group_id', 'user_id',' Object', 'Read',' Update', 'Insert',' Delete' FROM 'backend_privileges' WHERE' Object' = '". mysql_real_escape_string ($ Object)."' «; когда он попадает в эту функцию. –

+0

Извините, измените строку this.submit(), чтобы сформировать.Отправить(); –

Смежные вопросы