0

だからここに問題があります、私はindex.php(すべてのphpコードを含む)そして私はindex.tplすべてのhtmlのものを含むファイルを持っています。しかし、今はajaxを使用しているので、データを出力する別のphpファイル(data.php)があります。問題は、data.phpファイルでテンプレートを選択する方法がわからないことです。私が知っているのは、index.phpを表示する関数がありますがtpl ($Smarty->display($filename);、テンプレートを(再び)表示したくないということです。data.phpファイル表示する必要のあるいくつかの変数を割り当てたいだけですindex.tpl

編集:

わかりました。これは長くなります。まず、何を達成したいのかを説明する必要があります。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コードです。このコードはGETメソッドの+str値をdata.phpファイルに送信し、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
?>

私はここでそのクラスをsmarty関数のSTemplateに使用しますが、コードは何ですか。

今何が問題なのかご理解いただければ幸いです。テンプレートファイルを再度表示せずに、変数をテンプレートに割り当てるにはどうすればよいですか。このようにして、$ name変数はindex.tpl(名前はdbから表示されます)でアクセスできますが、data.phpのdispaly関数のため、コンテンツ全体が再び表示されます。

4

3 に答える 3

1

これが役立つかどうかはわかりません。ただし、「レンダリングされた」tpl を AJAX に返すこともできます。display-function は通常、ページのフレームに使用されます。(すべての基本的なプレースホルダーのようなものです)。AJAXではなく、ページの更新で使用されます。

data.php で使用できます

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

その前に、Smarty で必要な割り当てを行うことができます。

AJAX では、返された HTML のスニペットを適切な場所に配置できます。

于 2012-11-06T02:05:39.113 に答える
1

$smarty->assign('var', 'value');値を割り当てるために使用します。

詳細については、こちらをご覧ください

編集

の背後にある考え方.tplは、 を使用して変数を入力しassign、ページの準備ができたら を使用して表示することdisplayです。表示する前に複数の変数を設定できます。

<?php

$smarty = new Smarty();

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

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

?>

テキストが 2 回表示される場合は、$smarty->display('index.tpl');1 回の呼び出しが多すぎることを意味します。正確な場所を見つけるには、ソースを確認する必要があります。ファイルまたは問題のあるビットを投稿してください。

とにかく頑張ってください:)

于 2012-08-29T20:38:43.993 に答える