質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

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

Smarty

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

Q&A

解決済

1回答

1559閲覧

smarty php内でassignで代入した変数の利用

huku

総合スコア18

PHP

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

Smarty

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

0グッド

0クリップ

投稿2020/03/22 15:49

現在smartyを勉強しています。
勉強を進めているうえで、調べて分からなく、試してみましたができなかった部分があるため質問させていただきます。
このようなコード

php

1 if ( isset($_POST["posting"] ) === true ) { 2 if ( $name === "" ) $err_msg1 = "名前を入力してください"; 3 if (($text === "") && ($upfile === "")) $err_msg2 = "コメント、画像を入力してください"; 4 if (($text === "") && ($upfile !== "")) $err_msg15 = "コメントを入力してください"; 5 if (($text !== "") && ($upfile === "")) $err_msg16 = "画像を選択してください"; 6 if ( $password === "" ) $err_msg7 = "パスワードを入力してください"; 7 if ( ($err_msg1 === "") && ($err_msg15 === "") && ($err_msg7 === "") && ($err_msg16 !== "")) { 8        //処理 9 }

をsmartyを導入し、

php

1 if ( isset($_POST["posting"] ) === true ) { 2 if ( $name === "" ) $smarty->assign('err_msg1', 名前を入力してください); 3 if (($text === "") && ($upfile === "")) $smarty->assign('err_msg2', コメント、画像を入力してください); 4 if (($text === "") && ($upfile !== "")) $smarty->assign('err_msg15', コメントを入力してください); 5 if (($text !== "") && ($upfile === "")) $smarty->assign('err_msg16', 画像を選択してください); 6 if ( $password === "" ) $smarty->assign('err_msg7', パスワードを入力してください); 7 if ( ($err_msg1 === "") && ($err_msg7 === "") && ($err_msg15 === "") && ($err_msg16 !== "")) { 8         //処理 9       }

のように書き換えたのですが、7行目のifの$err_msg1などを書き換えないといけないといけないということはわかっているのですが、この書き換え方がわかりません。
if ( ({$err_msg1} === "") && ({$err_msg7} === "") && ({$err_msg15} === "") && ({$err_msg16} !== ""))
tplのように上記のように書き換えることでうまく動くかと思いましたがうまくいかず、
if ( ('{$err_msg1}' === "") && ('{$err_msg7}' === "") && ('{$err_msg15}' === "") && ('{$err_msg16}' !== ""))
のように''で囲んでもダメでした
assignで代入した変数をphp内で読み込むことはできないのでしょうか?
調べ方が悪いのか、調べても出てこなく行き詰っている状態です。
分かる方おられましたら回答お願いいたします。

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

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

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

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

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

m.ts10806

2020/03/23 00:43 編集

何を実現したいのか要件説明が全くないのでなんとも言えません。 手段だけ考えてと言われても大目的あって成り立つものです。
guest

回答1

0

ベストアンサー

assignで代入した変数をphp内で読み込むことはできないのでしょうか?

get_template_vars()

を使えば可能ですが、そもそもget_template_vars()を使わないといけないケースってあんまり無いです。

今回のケースだと

PHP

1 if ( isset($_POST["posting"] ) === true ) { 2 if ( $name === "" ) $err_msg1 = "名前を入力してください"; 3 if (($text === "") && ($upfile === "")) $err_msg2 = "コメント、画像を入力してください"; 4 if (($text === "") && ($upfile !== "")) $err_msg15 = "コメントを入力してください"; 5 if (($text !== "") && ($upfile === "")) $err_msg16 = "画像を選択してください"; 6 if ( $password === "" ) $err_msg7 = "パスワードを入力してください"; 7 if ( ($err_msg1 === "") && ($err_msg15 === "") && ($err_msg7 === "") && ($err_msg16 !== "")) { 8        //処理 9 }

はそのままで、その処理の後に$err_msg{数値}の存在確認とassignを行うのがいいでしょうね。

  • そもそも論としては、エラーメッセージを個別に変数に入れるのではなく、配列に持たせる等した方が扱いやすいですが。

調べ方について

調べ方が悪いのか、調べても出てこなく行き詰っている状態です。
smartyで出来ることは
公式リファレンスの
Chapter 13. Smarty クラスメソッド
に記載されていることがすべてなので、何か出来ないかな?と思ったらここを探してみましょう。

Smartyの前に学習が必要な事

それ以前の問題として、
PHPにおけるオブジェクト、クラスの基本的な扱い方についての理解が足りない様に思いますので
PHPマニュアル クラスの基礎をまずは熟読&サンプルを動かして理解されることをお勧めします。


あとは、

  1. https://www.amazon.co.jp/dp/4798108839

の様な書籍ををざっと読む(超古いのでPHPのソースをそのまま真似をしてはいけない)Smartyの使い方の基本を押さえてる。結構売れた本なので、中古なら簡単に手に入るはずです
2. 新しめのwebサイト入門記事&公式サイトを見ながららごく小さなアプリを作ってみる
3. その後現在取り組んでいる様な事に取り組む

というような感じで、一歩ずつ理解を進めることをお勧めします。

蛇足

Smartyは歴史が長い&主流だった時期がかなり古いという事情を持っているので、どうしても書籍やweb上のサンプルコードが古くなってしまいます。(10〜15年くらい前の情報が多いと思います。)

そのため、個人的には初学者が独学で学ぶには向いていないと思います。(考えや設計は他のテンプレートエンジンにも適合する部分が多いので無駄にはなりませんが。)

どうしてもSmartyでなければならない理由がないのであれば
TwigBladeと言った情報の集めやすいテンプレートエンジンに切り替える事を検討しても良いと思いますよ。

投稿2020/03/22 16:10

編集2020/03/22 16:55
tanat

総合スコア18727

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

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

huku

2020/03/23 00:45

非常にわかりやすい回答ありがとうございました。 とりあえず教えていただいたやり方を試すのと、資料を読み、理解を進めていきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問