🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Q&A

1回答

2020閲覧

PHP テンプレートエンジンSmatyを使った画面表示

yo_pi

総合スコア7

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

0グッド

0クリップ

投稿2019/12/22 10:25

前提・実現したいこと

簡易的な検索画面が作りたい。
データベースから結果を取得して、画面にきれいに表示させたい。
テンプレートエンジンを使ってデータの受け渡しがしたい。

発生している問題・エラーメッセージ

RSSからXMLを取得し、データベースに保存。
条件を入力し、検索結果を表示する画面を作成しています。

条件入力欄を用意したHTMLファイルを作成し、その結果取得したデータを条件欄の下に一覧で表示させたいのですが、
テンプレートにデータを渡した際に、取得したデータのみを繰り返し表示させたいのですが、
用意している条件欄ごと繰り返し表示されてしまいます。
データの取得の仕方や、渡しかた、表示方法等全てに問題があるのかもしれません。
公式ドキュメントや、他の方の事例も参考にしたのですが、私では理解が足らず、詰まってしまいました。
ご存知の方がいましたらご指摘いただけないでしょうか。

該当のソースコード

(テンプレート用ファイル) <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>記事一覧</title> </head> <body> <h1>記事を探す</h1> <form action="../search.php" method="POST"> <ul> <input type="datetime" name="pubDate" placeholder="yyyy/mm/dd"><br> <input type="text" name="url" placeholder="URLでさがす"><br> <input type="text" name="title" placeholder="タイトルでさがす"><br> <input type="submit" value="検索"> </ul> </form> <!-- この部分だけ表示させたい --> <li> {foreach from=$rows item=row} {$row} {/foreach} </li> </body> </html> // 検索用PHPファイル <?php require_once("libs/Smarty.class.php"); require_once('manage.php'); $smarty = new Smarty(); $smarty -> template_dir = "templates/"; $smarty -> compile_dir = "templates_c/"; $pdo = connect(); // 別ファイルでデータベースに接続 $sql = createSQLStatement(); // 別ファイルでSQL文を複数作成 $stmt = $pdo -> prepare($sql); $stmt -> execute(); $count = 0; while($contents[] = $stmt->fetch(PDO::FETCH_ASSOC)) { $count++; } echo $count."件"; foreach($contents as $content) { $smarty -> assign("rows",array('title'=>$content['title'], 'url'=>$content['url'], 'pubDate'=>$content['pubDate'], 'description'=>$content['description']) ); $smarty -> display("display.html"); } // DB切断 $db = null; ?>

試したこと

(PHPファイル)
$smarty -> display("display.html");の部分をforeachの外に出す。
assign(~)の中身を、 "rows", $content(s) とした。

(HTMLファイル)

{foreach from=$rows item=row}
{$row}
{/foreach}

の部分を
{foreach $contents as $content}
{$content['title']}
{/foreach}

に変更(してもダメでした。)

補足情報(FW/ツールのバージョンなど)

開発環境
MacBook
PHP 7.3.9
Smarty 3.1.34-dev
XAMPP 7.1.33-1

https://teratail.com/questions/37708
https://illbenet.jp/view/56
https://www.smarty.net/docsv2/ja/language.function.foreach.tpl
https://qiita.com/sano1202/items/1f49f407f310f2e493ff
http://shain.blog.conextivo.com/2007/06/smarty.html
https://web開発備忘録.総合サービス.com/記事/28/
etc..
これらを見ても解決できませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

だめでした」では、何がどの様になったのかわかりません。

実行して発生した現象を具体的に記載してください。

記載例)

コードを書く 上記のコードを実行したら下記の(図1)のような表示になりましたが、希望する表示は、(図2)のような表示です。 (図1) 図を添付 (図2) 図を添付

の様に誰が見ても 発生している現象がわかるように記載してください。


とりあえず、Smarty の書式としては、

なので、

php

1$smarty->assign("rows", $contents)

html

1<ul> 2 {foreach from=$rows item=row} 3 <li>{$row.title} : {$row.url} : {$row.pubDate} : {$row.description}</li> 4 {/foreach} 5</ul>

のような感じでは?

投稿2019/12/23 06:36

CHERRY

総合スコア25218

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yo_pi

2019/12/23 10:43

ありがとうございます。 質問の仕方も含めうまく説明できるよう頑張ります。 まずは上記の例を参考にしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問