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

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

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

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

Smarty

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

Q&A

解決済

1回答

4994閲覧

smartyのtpl側でif文が使えない

amaguri

総合スコア227

PHP

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

Smarty

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

0グッド

0クリップ

投稿2017/01/11 07:13

編集2017/01/11 08:24

php側で

$ranks =array(); $sql= 'select ymd from ranks'; $res = pg_query($conn,$sql); $rank_wk = pg_fetch_all(ress); foeach((array)$rank as $r_wk){ if($r_wk['ymd'] != ""){ $ymd = "2017/01/11" }else{ $ymd = ""; } $rank = array( 'ymd' => $ymd ) array_push($ranks,$rank); } tpl->assign('RANK',$ranks); var_dump($ranks); とした時に 画面上にて array(1){[0]=>array(1){["ymd"]=>string(9)"2017/01/11"; と表示されたので

tpl側にて

{if $RANK[0]["ymd"] != ""} {/if}

と書くと

エラー syntax error: undentified token
が起きてしまいます。

なにが原因でしょうか?

追加
修正後コード

php側 クエリ文は 上記と同じコード tpl->assign('RANK',$ranks); var_dump($ranks); 中身 array(1){[0]=>array(1){["ymd"]=>string(0)"";
tpl側 {if $RANK[0].ymd|default:" !="} <input type="button" value="編集"> {/if}

期待する動作として
ymd==""の時は
編集ボタンを表示させないコードを書きたいのですが
現在だとymd==""の状態でも
編集ボタンが表示されてしまいます。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/01/11 08:05

シングルくクオート2つとダブルクオートを間違えてやがる。(はやすぎたんだ)
amaguri

2017/01/11 08:20

すみませんどこの部分のクオートが間違えてしまっているでしょうか?
guest

回答1

0

ベストアンサー

html

1{if $RANKS[0].ymd|default:'' !=''} 2 {var_dump($RANKS[0].ymd)} 3{/if}

#質問から読み取れるコード例

php

1<?php 2 3/** 4 * index.php 5 */ 6require 'vendor/autoload.php'; 7 8$smarty = new Smarty(); 9 10// $smarty->assign('ranks', ''); 11 12$data = [ 13 0 => ['ymd' => date('Y-m-d')] 14]; 15$smarty->assign('ranks', $data); 16$smarty->display('index.tpl');

tpl

html

1<!DOCTYPE HTML> 2<html lang="ja"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 {if $ranks[0].ymd|default:'' !=''} 9 {var_dump($ranks[0].ymd)} 10 {else} 11 '$ranks' は 空です。 12 {/if} 13 </body> 14</html>

投稿2017/01/11 07:20

編集2017/01/11 08:10
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

amaguri

2017/01/11 07:36

回答ありがとうございます。 試してみたのですが エラーは解決したのですが ymd=="" な場合でも動作してしまいます。
退会済みユーザー

退会済みユーザー

2017/01/11 07:46 編集

んなわけない。だとしたら、あなたの認識になんらかの誤解があるか、使い方に間違いがあるということでしょう。 あなたももう、teratailで質問をすること自体は初心者じゃないのですから、質問スキルをあげてください。まずは、手元の現象を回答者が再現できるだけのソースコードくらい提示しましょう。
amaguri

2017/01/11 07:51

確認しているのですが いくつか質問よろしいでしょうか? ①php側にて tpl->assign('RANK',$ranks); でtpl側に$RANKと送信しましたが $RANKS[0].ymdとされているのは何故なのでしょうか? ②現在 array(1){[0]=>array(1){["ymd"]=>string(0)""}} というデータに対していただいた回答で試してみているのですが{}内処理コードが走ってしまいます。 質問主としてこのデータが来た場合に{}内の処理を走らせないために質問させていただいたつもりなのですが質問の仕方がダメだったでしょうか?
退会済みユーザー

退会済みユーザー

2017/01/11 08:04 編集

①Smartyの文法に従っているだけのことです。 ②手元の現象を回答者が再現できるだけのソースコードを提示してください。
退会済みユーザー

退会済みユーザー

2017/01/11 08:24

回答通りのコードを書いていない
amaguri

2017/01/11 08:44

すみません 編集で入れ違いになってしまいました 2回目にいただいた回答の真似をしてみて tpl側 {if $RANK(phpから送信した変数名)[0].ymd|default:" !="} {var_dump($RANK[0].ymd)} {else} '$RANK'は空です。 {/if} とさせていただきましたところ エラー syntax error unrecognized tag とエラーが出て画面が表示されなくならました。 今一度確認してみます。
退会済みユーザー

退会済みユーザー

2017/01/11 08:47

シングルクォーテーションとダブルクコォーテーション間違っているでしょう。そこに気を配れないのかなあ…。というか、回答コピペすれば無駄な間違いしなくて済むことなのに。
amaguri

2017/01/11 08:59

すみません、、 見返しているのですが全然見つけられずどこの部分がシングルとダブルでクォートがまちがえているか教えてもらってもよろしいでしょうか? またコピペをしたいのですが パソコンがネットワークに繋げられず携帯からの直打ちで質問させていただいており手間とご迷惑をおかけしてしまい申し訳ありません。
退会済みユーザー

退会済みユーザー

2017/01/11 09:02

{if $RANKS[0].ymd|default:'' !=''}
amaguri

2017/01/11 09:09 編集

すみません端末から確認した時 ""と''''が全く区別がつかず 確認できずご迷惑おかけしました。 解決しました。 いつもご丁寧に対応していただいてありがとうございます。
退会済みユーザー

退会済みユーザー

2017/01/11 23:08

スマホから見ても普通に見分けれるとおもうが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問