ホームページ > バックエンド開発 > PHPチュートリアル > Smarty テンプレートに PHP コードが埋め込まれているのですが、とんでもないエラーが発生します。助けてください。

Smarty テンプレートに PHP コードが埋め込まれているのですが、とんでもないエラーが発生します。助けてください。

WBOY
リリース: 2016-06-23 14:01:27
オリジナル
1045 人が閲覧しました

まず第一に、親愛なるマスターの皆さん、PHP コードを Smarty テンプレートに埋め込むべきかどうかについて心配するのはやめましょう。他の人のコードに関数を追加することもあるので、問題をすぐに解決できるのであれば、どんな方法でも大丈夫です。

問題の説明:
テーブルで、foreach を使用して $items から各レコードを読み取り、テーブルの各行に複数のキーワードの対応する内容を表示します。 $items はバックエンド PHP コードによる処理の結果です。今度は、特定のキーワードのコンテンツを表示するときに判断を追加し、該当するコンテンツを読んで、小さなリンクを作成する必要があります。
コードは次のとおりです:

 {foreach $items as $item}	            {strip}。。。。。。。。。。。。。。。。。。。。。。。。。。。。{if $item->kind == "folder"}	               	<td class="name"><p><a href="/Views/Regions/{$item->id}">{$item->name}</a></p></td>	               {elseif $item->type != "link"}	               	<td class="name"><p><a href="/Regions/Files/Download/{$item->id}">{$item->name}</a></p></td> 	               {else}	               	                              {$link_content=""}	               	                              {$this_id=$item->id}												  {$search_link_query="select * from archive.file where id='$this_id'"}												  {$con = mysqli_connect("localhost","root","root")}												  {$result = mysqli_query($con,$search_link_query)}												  {mysqli_close($con)}												  {$row=mysqli_fetch_row($result)}                                                  {$link_content=$row[8]}												  					<td class="name"><p><a href="{$link_content}" target="_blank">{$item->name}</a></p></td>	               {/if}...................................................    {/strip}	            {/foreach}
ログイン後にコピー


Web ページの機能は完全に正しく表示されますが、表の上にいくつかの「1」が表示されます。コードを一つずつ削除して確認したところ、{$con = mysqli_connect("localhost","root","root")} で「1」が生成されていました。この文が削除されている限り、1 は生成されず、エラー メッセージが表示されます。この文が削除されずに次のコードが削除された場合は、1 が生成され、エラー メッセージが表示されます。

みんな、何が起こっているの?どうすれば変更できますか?
実際、コードのこの部分をバックエンド ファイルに入れたいのですが、ここのキー変数 $item->id がループで読み取られます。このレコードを読み取って検索する方法がありません。キーワードの内容の値が tpl ファイルに返されて表示されます。

どうやって対処すればいいですか?専門家の方からアドバイスをお願いします。


ディスカッションへの返信(解決策)

これはPHPで書いてタグに置き換えればデータベースに接続できます。

ループに追加したいコンテンツを追加して、ページ上で直接呼び出してみましょう

ご清聴ありがとうございます。私はまだ他の機能に基づいて新しい関数を追加しています。人々のコード。

上記のようにラベルに置き換える方法がわかりません。次のように変数を渡すことも検討しました:

$smarty->assign("action", $action);
$smarty->display("folders.tpl"); 私の意見では、上記の側面は次のようになります。送信できるのは 1 回だけです。しかし、私のテーブルでは、各レコードが継続的にループされて表示されます。フロントエンドの各ループのキー変数 ID をバックエンドに転送して処理したい場合、どうすればよいでしょうか。

問題は要約すると次のとおりです。smarty テンプレートのフロントエンドはループを使用してコンテンツを表示します。各ループのキー変数をバックエンドに渡し、その後結果をループに返すにはどうすればよいですか。処理?

実際、ロジックを考えるのは難しくありません。マスターの皆さん、コード例はありますか?こちらこそありがとうございます。


バックエンド コードを投稿してマークしてください。そうすれば私が見てみることができます

実際、私は非常に困惑しています。なぜ「1」がこんなにたくさんあるのでしょうか?

このスマートに対応するバックエンド PHP コードは次のとおりです: (コメントを追加するために最善を尽くしました)

<?phpload_module("folders");load_module("files");//该页面的基本功能就是在表格中显示某个区域里的文件或者文件夹,我要增加一个链接link,并且其他一些链接等功能$id = getParamStr("id"); //此处id应该是这表格所属区域的Id,与我的问题相联系的数据库中储存的文件或链接id不一样,这个是我的理解,我也是刚看这代码if ($action == "search") //对这个页面有两个动作,一个是search{	$search = postParamStr("search");	$folders = do_action("folders","search", array($search, $currentUser->allowedRegion));	$files = do_action("files","search", array($search, $currentUser->allowedRegion));	$smarty->assign("folder", NULL);	$paths = array("Search Result");	$path = new stdClass();	$path->id = NULL;	$path->name = "Search Result";	$smarty->assign("paths", array($path));}else                      //对这个页面的另一动作是正常显示{	$folders = list_items("folders", $id);	$folder = get_item("folders", $id);	$files = list_items("files", $id);	$smarty->assign("folder",$folder);	$paths = $folder->path;	if ($currentUser->level == 2)	{		unset($paths[0]);		$paths = array_values($paths);	}	$smarty->assign("paths", $paths);}$items = array_merge($folders,$files); //获取到显示记录,并把多个记录组合起来$items = sort_items($items);           //排序功能$smarty->assign("items", $items);$smarty->assign("action", $action);$smarty->display("folders.tpl");?>
ログイン後にコピー


フロントエンドにはコードが多すぎるため、参照用にループの一部をインターセプトします。
すごいです

実際、コードを気にしないのであれば、私の質問は 2 つの詳細に要約されます:

1. Smarty テンプレートでは、なぜ {$con = mysqli_connect("localhost","root" ,"root")} たくさんの「1」が生成されますか?これはデータベースへの接続が成功したことを示していますか?この表示を非表示にする方法はありますか?


2. Smarty テンプレートのフロントエンド ループがバックエンドの PHP コード処理で値を動的に送信するとどうなるでしょうか?
各ループのキー変数をバックエンドに渡し、処理後に結果をループに返し、ループ内で PHP によって送信された値を表示する必要があります。やったらどうなるでしょうか?

マスター、何か解決策はありますか?コード例を教えていただければ幸いです。そうでないと実行できません。ありがとう。

おばあちゃん、私の中国語は体育の先生に教えてもらいました。

訂正: PHP コード部分の最初のコメントは次のとおりです:
//このページの基本的な機能は、テーブル内の特定の領域にあるファイルまたはフォルダーを表示することです。ファイルとフォルダーの種類に加えて、追加したいものもあります。 1 つのタイプ: link link、およびこのタイプのリンク link に関連する他の関数も追加します

テンプレートにロジック コードを書かず、php で書くようにしてください。

2. Smarty テンプレートのフロントエンド ループがバックエンドの PHP コード処理で値を動的に送信するとどうなるでしょうか?
各ループのキー変数をバックエンドに渡し、処理後に結果をループに返し、ループ内で PHP によって送信された値を表示する必要があります。やったらどうなるでしょうか? インタラクションには、バックエンドへのフォーム送信、または Ajax 値転送の 2 種類しかありません。

訂正:

多くのテストの後、文 {mysqli_close($con)} が「1」を生成することが判明し、結果は

となりました。

文 {mysqli_close($con)} が「1」を生成する場合
次に、{mysqli_close($con)} を削除します

xu モデレーターがここにいます、ようこそ。

それが私がやったことです、もう本当に「1」はありません。でも、これをしても悪影響はありませんよね?たとえば、データベースへのリンクはどれくらいのメモリを使用しますか?システムへの他の影響はありますか?

しかし、よく考えてみると、システムがリンクを表すために $con を使用するのはせいぜい 1 つの変数だけであり、解放できないため、これは大したことではないはずです。

徐モデレーター、このように削除しても大きな問題はありませんか?

文 {mysqli_close($con)} が「1」を生成する場合
次に、{mysqli_close($con)} を削除します

これは問題ありません

まあ、モデレータの Xu は「質問なし」と言いましたが、それはおそらく同じことです。
結び目。

これは問題ありません

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート