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

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

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

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

Q&A

解決済

2回答

2927閲覧

投稿サイトの確認画面のsmartyの設定で文章が更新された場合の条件分岐をしたい

nouzo

総合スコア11

Smarty

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

0グッド

0クリップ

投稿2015/06/26 01:09

投稿サイトを作成しております。投稿文の確認画面(confirm.tpl)でのSmartyの設定で、確認画面の前画面である投稿画面(post.tpl)で新たに文章が書かれたなら、以下のような記述によって確認画面で登録ボタンを表示するという設定にしております。 ここで質問させて頂きたいのですが、一度文章が記述され登録された後に、再度投稿者が投稿画面でその文章を更新したなら、確認画面で登録ボタンを表示するという設定を現在検討中です(既存の文章が更新されないのであれば確認画面で登録ボタンを表示しない)。そのような場合、確認画面(confirm.tpl)でどのような設定にすれば宜しいかご教授頂けませんでしょうか。(あるいは他のファイルの設定も必要になりますでしょうか。)

確認画面(confirm.tpl)

<!--{if $arrForm.post != ""}-->

(登録ボタン)

<!--{else}--> <!--{/if}-->

投稿画面(post.tpl)

<input type="text" name="post" value="<!--{$arrForm.post|h}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" style="<!--{if $arrErr.post != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->"class="area10" size="60" class="box60" />

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

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

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

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

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

guest

回答2

0

ベストアンサー

php側で予め状態を識別して読み込むtemplateを変えた方が楽じゃないですか?

投稿2015/06/26 01:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nouzo

2015/06/26 02:54

アドバイス頂きまして感謝いたします。まず一般的にこのようなケースの場合どのような設定をするのか知りたかったです(投稿画面で既存の記述が更新された場合の確認画面での変更)。  アドバイスを基にいろいろと調べておりますが、アドバイスのような場合、Php側で予め状態を識別させるには、具体的にどのような設定・記述が必要になるかご教授いただけませんでしょうか。
退会済みユーザー

退会済みユーザー

2015/06/26 05:40 編集

色んなやり方があると思いますけど とたへば 【tplのform】 [post画面の場合] <inpt type="hidden" name="stage" value="post" /> [confirm画面の場合] <inpt type="hidden" name="stage" value="conf" /> 【php】 if ($_POST['stage'] == 'post'){ $smarty->display('../templates/post.tpl'); }else{ $smarty->display('../templates/confirm.tpl'); } あるいは  【php】 if ($_POST['stage'] == 'post'){ $smarty->assign('stage','post'); }else{ $smarty->assign('stage','confirm'); } $smarty->display('../templates/index.tpl'); 【index.tpl】 {include file="header.tpl"} ..... {if $stage eq 'post'} {include file="post.tpl"} {else} {include file="confirm.tpl"} {/if} ..... {include file="footer.tpl"} こんな感じでしょうか
退会済みユーザー

退会済みユーザー

2015/06/26 06:46

前々説明が足りてませんね とんちんかんでスミマセン POSTでPHPが受信した場合 初回の記述に変更があったかを識別するには←ここが肝心なんですよね 初回POSTされた際何かしらの変数に代入される事を前提に 例) 初回 post.tplから送信された値を $_SESSION['post']に代入しておいたとして if($_POST['post'] != $_SESSION['post'] ){ $smarty->assign('change','true')//変更有 }else{ $smarty->assign('change','false')//変更なし } こんな感じで識別して  【tpl】 {if $change =="true"} <input type="text" name="post" value="<!--{$arrForm.post|h}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->"class="area10" size="60" class="box60" /> {else} <input type="text" name="post" value="<!--{$arrForm.post|h}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" style="background-color: <!--{$smarty.const.ERR_COLOR}-->;"class="area10" size="60" class="box60" /> {/if} でどうでしょう?
nouzo

2015/06/26 19:31

Sora-tan様 私の説明不足の質問に対しまして、いろいろとご教授頂きまして感謝の限りでございます。イメージがつかめて参りましたが、 初回post.tplから送信された値を$_SESSION['post']に代入する設定、および$_POST['post']の設定はどのファイルで具体的にどのように記述すればよろしいでしょうか。
退会済みユーザー

退会済みユーザー

2015/06/27 01:50 編集

<TPL> 【確認画面】 <form method="POST" action="○○○.php"> <input type="hidden" name="sender" value="conf">//送信元識別用のデータ </form> 【入力画面】 <form method="POST" action="○○○.php"> <input type="text" name="text" value="{if isset($smarty.session.text)}{$smarty.session.text}{/if}"/> <input type="hidden" name="sender" value="post">//送信元識別用のデータ </form> <PHP> if($_SERVER['REQUEST_METHOD'] != 'POST'){//受信method識別(POSTじゃない場合) unset($_SESSION['text']); }else{//(POST受信した場合) if(isset($_POST['sender']) == 'post'){//送信元識別(postの場合) if(!isset($_SESSION['text'])){//初回の受信を識別 $_SESSION['text'] = $_POST['text'];//送られたデータを変数に代入 }else{//2度目以降の受信を識別 if($_POST['text'] != $_SESSION['text'] ){ $smarty->assign('change','true')//変更有 }else{ $smarty->assign('change','false')//変更なし } } }else if(isset($_POST['sender']) == 'conf'){//送信元識別(confirmの場合) //割愛します「確認画面からの戻りデータの処理をここに記述」 }else{ unset($_SESSION['text']); } } 実用するには クロスサイトスクリプティング対策や他にも諸々必要になりますけど 処理の流れとしてはだいたいこんな感じでどうでしょお
nouzo

2015/07/05 11:11 編集

Sora-tan様 かなり具体的にご解説頂きまして感謝致します。調整をしながら、解説頂いた事を調べながら試しているところでございますが、いろいろと学ばさせて頂いております。本当にありがとうございます。
退会済みユーザー

退会済みユーザー

2015/07/05 12:24

ありがとうございます(*^^*)
guest

0

現状のままで良いのではと思いますが。。
更新された状態を把握するにはbefore/afterの文字列の判定が必要になるので、
投稿画面にbeforeの文字列を<input type="hidden" name="before" value="前回の文字列">かなにかで持っておいて確認画面でbefore/afterの判定をさせれば良いと思います。

投稿2015/06/26 03:31

Yousuck

総合スコア349

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

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

nouzo

2015/06/26 19:33

Yousuck様、 ご教授頂きまして感謝いたします。いろいろと試しておりますが、ご質問させて頂きたいことがございます。 value="前回の文字列"は具体的にどのような記述になり、また確認画面でbefore/afterの判定をさせるとは具体的にどのような記述にすればよろしいでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問