皆様のお知恵をお借りしてたいと思います。
やりたいことはテンプレート変数を作り、その変数に何かが入力されると表示されるスニペットを作りたいと思っています。
通常、テンプレート変数では入力された内容しか呼び出せません(HTML Generic Tagを使っても、その項目を含むタグしか出せません)。
今回、ご相談というのはテンプレート変数に何かが入力された場合、その入力をチェックし、中身があるならhtmlタグを表示させるためのスニペットの書き方です。
具体的には
(例)
1.テンプレート変数で「項目1」と「項目2」を作り「テスト」テンプレートで使えるように設定します。
2.「テスト」テンプレートで「項目1」と「項目2」に何かを記入します。
3.スニペットに「項目1」と「項目2」を含むhtmlタグを書き、それを表示させます。
4.テンプレートでスニペットを呼出、htmlタグ付きで表示
例えば「項目1」に何かが入力されたら<tr><td>項目1のタイトル</td><td>「項目1」の内容</td></tr>というふうに、「項目1」だけでは表示されない「項目1のタイトル」というのを事前に仕込んでおき、<tr>〜</tr>までを表示するようにしたいと思っています。
この場合のスニペットの書き方が分からないので、どなたかお知恵をいただければと思います。
ただ、私の方があいにくとシステム関連に疎いもの、できるだけ分かりやすくお教えいただければ助かります。
以上、宜しくお願い致します。
テンプレート変数の状態をチェックしてhtmlを書き出すスニペットを作りたい 【解決済み】
-
- メンバー
- 記事: 13
- 登録日時: 2010年9月10日(金) 15:34
Re: テンプレート変数の状態をチェックしてhtmlを書き出すスニペットを作りたい
StartIf、EndIf等、このあたりのスニペット、けっこう作ってたりしますが、
StartIf、EndIfは、tableに使うには、よろしくないということもありますので、
簡単な例を書いておきますね。(PHPの基本的な文法はわかるとうい前提で)(*1)項目1の箇所を'hogehoge'等、テンプレート変数名の文字列に置き換えてください。
ちなみに、ウィジェット等は特に考えず、入力値そのままを使っています。
StartIf、EndIfは、tableに使うには、よろしくないということもありますので、
簡単な例を書いておきますね。(PHPの基本的な文法はわかるとうい前提で)
コード: 全て選択
<?php
$tmplvar_value = ''; // テンプレート変数の値用(入力があった場合ここに入れる)
$tags = ''; // 出力するタグ:テンプレート変数に入力が無かった場合のタグはここに入れておく
$tmplvar_info = $modx->getTemplateVar(項目1); // テンプレート変数「項目1」の情報を取得(*1)
if ($tmplvar_info !== FALSE) { // 問題なく情報が取得できた場合
$tmplvar_value = $tmplvar_info['value']; // テンプレート変数の入力値を取得
}
if ($tmplvar_value !== '') { // 入力値が空でない場合
// 以下、出力するタグを生成
$tags = '<tr><td>項目1のタイトル</td><td>'.$tmplvar_value.'</td></tr>';
}
return $tags;
?>
ちなみに、ウィジェット等は特に考えず、入力値そのままを使っています。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
http://d.hatena.ne.jp/hikidas_ikeda/
-
- メンバー
- 記事: 13
- 登録日時: 2010年9月10日(金) 15:34
Re: テンプレート変数の状態をチェックしてhtmlを書き出すスニペットを作りたい
早速、お知恵を頂きありがとうございます。
とても感謝しています。
ただ、
をテストし、確かに項目1は表示されましたが、項目2を表示させようと思うと、そこで詰まってしまいました。
コードは以下のような記述にしてみました(というか、「項目2」を機械的に追加しただけですが)。
これでテストすると「項目1」は表示されるのですが、「項目2」は表示されません。
「return $tags;」を最後に一つだけにすると「項目2」は表示されますが、「項目1」は表示されません。
※どちらも値が入っている場合。同じ変数なので、当たり前といえば当たり前なんでしょうが…
下記のようにしても同じでした。
やはり「return $tags;」を最後に一つだけにしても「項目2」しか表示されませんでした。
「項目1」と「項目2」を同時に表示させる(入力の有無によりそれぞれ表示させる)ためにはどこをどのように変更すればよいのでしょうか?
たぶん、2つまで表示できれば(例題を工夫して)あとは増やせると思うので、宜しくお願い致します。
なお、当方デザイン系なのでphpは…全然、素人です。申し訳ない…
とても感謝しています。
ただ、
コード: 全て選択
<?php
$tmplvar_value = ''; // テンプレート変数の値用(入力があった場合ここに入れる)
$tags = ''; // 出力するタグ:テンプレート変数に入力が無かった場合のタグはここに入れておく
$tmplvar_info = $modx->getTemplateVar(項目1); // テンプレート変数「項目1」の情報を取得(*1)
if ($tmplvar_info !== FALSE) { // 問題なく情報が取得できた場合
$tmplvar_value = $tmplvar_info['value']; // テンプレート変数の入力値を取得
}
if ($tmplvar_value !== '') { // 入力値が空でない場合
// 以下、出力するタグを生成
$tags = '<tr><td>項目1のタイトル</td><td>'.$tmplvar_value.'</td></tr>';
}
return $tags;
?>
コードは以下のような記述にしてみました(というか、「項目2」を機械的に追加しただけですが)。
コード: 全て選択
<?php
$tmplvar_value = ''; // テンプレート変数の値用(入力があった場合ここに入れる)
$tags = ''; // 出力するタグ:テンプレート変数に入力が無かった場合のタグはここに入れておく
$tmplvar_info = $modx->getTemplateVar(項目1); // テンプレート変数「項目1」の情報を取得(*1)
if ($tmplvar_info !== FALSE) { // 問題なく情報が取得できた場合
$tmplvar_value = $tmplvar_info['value']; // テンプレート変数の入力値を取得
}
if ($tmplvar_value !== '') { // 入力値が空でない場合
// 以下、出力するタグを生成
$tags = '<tr><td>項目1のタイトル</td><td>'.$tmplvar_value.'</td></tr>';
}
return $tags;
$tmplvar_value = ''; // テンプレート変数の値用(入力があった場合ここに入れる)
$tags = ''; // 出力するタグ:テンプレート変数に入力が無かった場合のタグはここに入れておく
$tmplvar_info = $modx->getTemplateVar(項目2); // テンプレート変数「項目1」の情報を取得(*1)
if ($tmplvar_info !== FALSE) { // 問題なく情報が取得できた場合
$tmplvar_value = $tmplvar_info['value']; // テンプレート変数の入力値を取得
}
if ($tmplvar_value !== '') { // 入力値が空でない場合
// 以下、出力するタグを生成
$tags = '<tr><td>項目2のタイトル</td><td>'.$tmplvar_value.'</td></tr>';
}
return $tags;
?>
「return $tags;」を最後に一つだけにすると「項目2」は表示されますが、「項目1」は表示されません。
※どちらも値が入っている場合。同じ変数なので、当たり前といえば当たり前なんでしょうが…
下記のようにしても同じでした。
コード: 全て選択
<?php
$tmplvar_value = ''; // テンプレート変数の値用(入力があった場合ここに入れる)
$tags = ''; // 出力するタグ:テンプレート変数に入力が無かった場合のタグはここに入れておく
$tmplvar_info = $modx->getTemplateVar(項目1); // テンプレート変数「項目1」の情報を取得(*1)
if ($tmplvar_info !== FALSE) { // 問題なく情報が取得できた場合
$tmplvar_value = $tmplvar_info['value']; // テンプレート変数の入力値を取得
}
if ($tmplvar_value !== '') { // 入力値が空でない場合
// 以下、出力するタグを生成
$tags = '<tr><td>項目1のタイトル</td><td>'.$tmplvar_value.'</td></tr>';
}
return $tags;
$tmplvar_value2 = ''; // テンプレート変数の値用(入力があった場合ここに入れる)
$tags = ''; // 出力するタグ:テンプレート変数に入力が無かった場合のタグはここに入れておく
$tmplvar_info2 = $modx->getTemplateVar(項目2); // テンプレート変数「項目1」の情報を取得(*1)
if ($tmplvar_info2 !== FALSE) { // 問題なく情報が取得できた場合
$tmplvar_value2 = $tmplvar_info['value']; // テンプレート変数の入力値を取得
}
if ($tmplvar_value2 !== '') { // 入力値が空でない場合
// 以下、出力するタグを生成
$tags = '<tr><td>項目2のタイトル</td><td>'.$tmplvar_value2.'</td></tr>';
}
return $tags;
?>
「項目1」と「項目2」を同時に表示させる(入力の有無によりそれぞれ表示させる)ためにはどこをどのように変更すればよいのでしょうか?
たぶん、2つまで表示できれば(例題を工夫して)あとは増やせると思うので、宜しくお願い致します。
なお、当方デザイン系なのでphpは…全然、素人です。申し訳ない…
Re: テンプレート変数の状態をチェックしてhtmlを書き出すスニペットを作りたい
soushi in OSCです、
昨日、返信書きながら寝てしまいました(笑)
以下のような設定はどうでしょうか。
[テンプレート変数 1つめ]
変数名:Str1
入力タイプ:Text
[テンプレート変数 2つめ]
変数名:Str2
入力タイプ:Text
[スニペット]
テンプレート変数を増やす場合はスニペット内の$title変数にも項目を追加する必要があります。
昨日、返信書きながら寝てしまいました(笑)
以下のような設定はどうでしょうか。
[テンプレート変数 1つめ]
変数名:Str1
入力タイプ:Text
[テンプレート変数 2つめ]
変数名:Str2
入力タイプ:Text
[スニペット]
コード: 全て選択
<?php
$rslt ='';
$titile=array();
$titile['Str1']='タイトル1';
$titile['Str2']='タイトル2';
foreach( $titile as $key => $val){
$tv = $modx->getTemplateVar($key);
if( !empty($tv['value']) ){
$rslt .= '<tr><td>'.$val.'</td><td>'.$tv['value'].'</td></tr>'."\n";
}
}
echo $rslt;
?>
-
- メンバー
- 記事: 13
- 登録日時: 2010年9月10日(金) 15:34
Re: テンプレート変数の状態をチェックしてhtmlを書き出すスニペットを作りたい 【解決済み】
soushi 様
素晴らしい!!
うまく行きました。
変数部分を増やすだけで済むので、メンテナンスも楽々です。非常にグレートです!!
その中、私の拙い質問に答えていただき申し訳ありません。
soushi 様並びにkazuike 様に感謝いたします。ありがとうございました。
素晴らしい!!
うまく行きました。
変数部分を増やすだけで済むので、メンテナンスも楽々です。非常にグレートです!!
とのこと、さぞやお疲れの事だったでしょう。soushi さんが書きました: 昨日、返信書きながら寝てしまいました(笑)
その中、私の拙い質問に答えていただき申し訳ありません。
soushi 様並びにkazuike 様に感謝いたします。ありがとうございました。