2012-08-29 145 views
0

所以这里是问题,我有一个index.php(与所有的PHP代码),我有一个index.tpl文件与所有的HTML的东西。但现在因为我使用ajax,我有另一个PHP文件,应该输出一些数据(data.php)。问题是我不知道如何选择data.php文件中的模板,我所知道的只是index.php我有一个显示tpl ($Smarty->display($filename);的函数),但我不想再次显示模板,在data.php文件我只想分配一些变量需要显示在index.tplsmarty模板

编辑:

确定这将是很长: 首先我需要解释我想实现的目标。我有index.php和data.php。在index.php:

<?php 
include("../include/config.php"); 
include("../include/functions/import.php"); 

$thebaseurl = $config['baseurl']; 

    $query ="SELECT name FROM contacts"; 
    $results = $conn->execute($query); 
    $select-names = $results->getrows(); 
    STemplate::assign('select-names',$select-names); 

$templateselect = "index.tpl"; 
STemplate::display($templateselect); 
?> 

的index.tpl里是有点长,所以我会发布重要组成部分:

xmlhttp.open("get","data.php?q="+str,true); 

这是AJAX代码,该代码发送+ STR值GET方法data.php文件然后使用该值并从数据库中提取一些数据。

data.php:

$q=$_GET["q"]; 

$sql="SELECT * FROM contacts WHERE name = '$q'"; 

$result = mysql_query($sql); 


while($row = mysql_fetch_array($result)) 
    { 
    $name = $row['name']; 
    } 

STemplate::assign('name',$name); 
$templateselect = "index.tpl"; 
STemplate::display($templateselect); //the second display 
?> 

我使用该类这里STemplate的Smarty的功能,但你得到的是代码。

我希望你明白现在有什么问题。如何在不显示模板文件的情况下将变量分配给模板。这样,$ name变量可以在index.tpl中找到(名称显示在数据库中),但由于data.php中的显示函数,整个内容会再次显示。

+0

要么我误会提出这个问题或者你问的问题是不可能的。你想让ajax调用data.php刷新显示的页面?内容如何显示两次?请显示您的JavaScript代码。 – Alfwed

回答

1

使用$smarty->assign('var', 'value');来分配值。

欲了解更多信息更多信息here

编辑

.tpl背后的想法是进入使用assign变量,当页面就绪显示器使用它display。您可以显示之前设置多个变量:

<?php 

$smarty = new Smarty(); 

$smarty->assign('firstname', 'Doug'); 
$smarty->assign('lastname', 'Evans'); 
$smarty->assign('meetingPlace', 'New York'); 

$smarty->display('index.tpl'); 

?> 

如果你看到文本的两倍,这意味着在某个地方你打电话$smarty->display('index.tpl');一次太多。准确找到我需要查看您的来源的位置。请张贴文件或有问题的位。

好运无论如何:)

+0

谢谢你的链接。有些事情现在很清楚。但我仍然有问题。分配工作正常,但前提是$ smarty-> display('index.tpl');问题是如果我把这一行放在data.php和index.php中,整个内容会显示两次。 –

+0

@VladimirSabo回答已更新。 – Kuf

+0

Hi @VladimirSabo,如果这有帮助,请[接受此答案](http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work/65088#65088) – Kuf

1

不知道这是否有帮助。但您也可以将“呈现”的tpl返回给您的AJAX。显示功能通常用于页面的框架。 (有点像一切的基本占位符)。并用于页面刷新,而不是AJAX。

在data.php你可以使用

$answer = $smarty->fetch("ajaxreturn.tpl"); 
echo $answer; 
die(); 

在这之前,你可以做必要的受让人在Smarty的。

在AJAX中,您可以将返回的HTML片段放在正确的位置。

0

我不明白你为什么用ajax重新加载整个页面。如果更改的数据是一个列表,你不能只为该列表创建一个模板吗?所以......

在index.tpl

<body> 
... content ... 
<div id="ajax_list"> 
{include file="data.tpl"} 
</div> 
... content ... 
</body> 

,然后在data.tpl

<ul> 
{foreach $rows as $row} 
<li>{$row.name}</li> 
{foreach} 
</ul> 

你进入第一次index.php的,它将使双方在index.tpl和data.tpl ,然后你只需要添加JavaScript代码刷新#ajax_list内容与data.php,这将只处理data.tpl与

$smarty->display('data.tpl');