2012-08-29 3 views
0

여기에 문제가 있습니다. index.php (모든 PHP 코드 포함)이 있고 index.tpl 개의 HTML 항목이 모두 있습니다. 하지만 지금은 아약스를 사용하기 때문에 일부 데이터 (data.php)를 출력해야하는 또 다른 PHP 파일이 있습니다. 문제는 data.php 파일에서 템플릿을 선택하는 방법을 모르겠다는 것입니다. index.php에있는 것입니다. tpl ($Smarty->display($filename);을 표시하는 기능이 있지만) (다시) 템플릿을 표시하고 싶지 않습니다. data.php 파일에 난 그냥 index.tpl멋진 템플릿

편집에 표시 할 몇 가지 변수를 할당 할 :

이 오래 될 것입니다

확인 : 먼저 내가 달성하고 싶어하는지 설명 할 필요가있다. 나는 index.php와 data.php를 가지고있다. 의 index.php :

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

이 AJAX 코드는이 코드가 GET 방식에서 + STR 값을 보냅니다

<?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 그래서 나는 중요한 부분을 게시 할 예정입니다 조금 긴 그런 다음 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을 사용하지만 코드입니다 것을 얻을.

지금은 문제가 무엇인지 이해하시기 바랍니다. 템플릿 파일을 다시 표시하지 않고 템플릿에 변수를 할당하려면 어떻게합니까? 이렇게하면 $ name 변수가 index.tpl에서 액세스 할 수 있지만 (이름은 db에서 표시됨) data.php의 dispaly 함수로 인해 전체 내용이 다시 표시됩니다.

+0

내가 어느 misunders와 그 의지 만 처리 data.tpl, data.php와 내용을 #ajax_list 새로 고침 자바 스크립트 코드를 추가해야 tood 질문이나 당신이 묻는 것은 불가능합니다. ajax에 의해 호출 된 data.php가 표시되는 페이지를 새로 고치기를 원하십니까? 콘텐츠가 어떻게 두 번 표시 될 수 있습니까? 자바 스크립트 코드를 보여주십시오. – 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

링크를 가져 주셔서 감사합니다. 어떤 것들은 지금 명백합니다. 그러나 나는 아직도 문제가있다. assign은 잘 동작하지만, $ smarty-> display ('index.tpl'); 문제는 내가 data.php와 index.php에 그 라인을두면 전체 내용이 두 번 표시된다는 것입니다. –

+0

@VladimirSabo 답변이 업데이트되었습니다. – Kuf

+0

안녕하세요 @VladimirSabo, 도움이 되었다면 [이 대답 수락] (http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work/65088#65088) – Kuf

1

도움이 될지 모르겠다. 하지만 AJAX에 '렌더링 된'tpl을 반환 할 수도 있습니다. display 함수는 일반적으로 페이지의 프레임에 사용됩니다. (모든 것을위한 기본적인 자리 표시 자와 같은 종류). AJAX가 아닌 페이지 새로 고침과 함께 사용됩니다.

data.php에서 당신은 그 전에, 당신이 멋지에 필요한 양수인을 할 수

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

를 사용할 수 있습니다.

AJAX에서는 반환 된 HTML 스 니펫을 올바른 위치에 배치 할 수 있습니다.

0

아약스로 전체 페이지를 다시로드하는 이유를 모르겠습니다. 변경되는 데이터, 즉 목록 인 경우 해당 목록에 대한 템플릿을 만들 수 없습니까? 그래서 ...

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

한편, index.tpl 다음 사용자가 입력 한 처음이 한편, index.tpl 및 data.tpl 모두 렌더링을 index.php data.tpl

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

에서 다음 당신은

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