「テンプレート変数が空欄の場合、ボタンを出さない」という仕組み  【解決済み】

質問全般・改善要望
返信する
Kenny
メンバー
メンバー
記事: 179
登録日時: 2011年5月28日(土) 13:41

「テンプレート変数が空欄の場合、ボタンを出さない」という仕組み  【解決済み】

投稿記事 by Kenny »

-----
ご利用のサーバ:heteml
Webサーバのバージョン :Apache 2.0.xx
PHPのバージョン : PHP5.3
データベースのバージョン :MySQL5
MODXのバージョン :1.0.9J
ブラウザ :IE9
-----

お世話になります。

テンプレート変数のカスタムウィジットを使用し、「テンプレート変数が空欄の場合、ボタンを出さない」という仕組み、添付画像にあるような形を試してみたのですが、dittoで出力すると、パラメータ値にある[+ボタンのURL+]が利きません。

この様な形式をdittoで出力するのは、無理なのでしょうか。

よろしくお願い致します。
添付ファイル
空欄の場合はボタンを表示させない
空欄の場合はボタンを表示させない
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: 「テンプレート変数が空欄の場合、ボタンを出さない」という仕組み

投稿記事 by yama »

たとえば「ボタン」という名前のPHxモディファイアを作ってDittoのテンプレート側で[+id:ボタン+]という形で呼び出すと可能です。
モディファイアの中では
$doc = $modx->getTemplateVarOutput('*',$output);
このように書くと該当リソースの情報を取得できるので、
if(empty($doc['ボタン名'])) なら何もせずにreturn;で、値があればボタン名とボタンのURLを組み合わせて出力・・・という感じで数行程度で書けると思います。
PHPの読み書きができないと難しいですが、考え方としてはこんな感じです。
Kenny
メンバー
メンバー
記事: 179
登録日時: 2011年5月28日(土) 13:41

Re: 「テンプレート変数が空欄の場合、ボタンを出さない」という仕組み

投稿記事 by Kenny »

Yama様

いつもありがとうございます。

PHxでこの様な事が出来るのですね。。
何とかやってみます。

ありがとうございました。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: 「テンプレート変数が空欄の場合、ボタンを出さない」という仕組み

投稿記事 by yama »

http://mng.demo.modx.jp/pack_list/Evolu ... x109j.html
こちらでサイトのサンプル作っていただけたらモディファイア作ってみますよ。
Kenny
メンバー
メンバー
記事: 179
登録日時: 2011年5月28日(土) 13:41

Re: 「テンプレート変数が空欄の場合、ボタンを出さない」という仕組み

投稿記事 by Kenny »

Yama様

やさしいお気づかい、本当にありがとうございます。
甘えさせていただきます。

入れ込んだデータを記します。
****************************************************
■ホーム
データ側(16)
出力ページ(17)

■テンプレート変数
ボタンのURL(2)
ボタン名(3)

■チャンク
テンプレートチャンク(2)
****************************************************

やりたい事

データ側(16)のテンプレート変数(ボタン名)が空白の場合
↓↓↓
出力ページ(17)で、ボタン名はもちろん、divの囲いも全部なくしたい。


http://130414170507-11374.evo.demo.modx.jp/manager/


どうかよろしくお願い致します。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: 「テンプレート変数が空欄の場合、ボタンを出さない」という仕組み

投稿記事 by yama »

コード: 全て選択

<?php
$tv = $modx->getTemplateVarOutput('*',$output);
if(empty($tv['ボタン名'])|| empty($tv['ボタンのURL'])) return;

return '<div style="width:100px; height:20px; background-color:#CCC; text-align:center; border-style:solid;"><a href="' . $tv['ボタンのURL'] . '" target="_blank">' . $tv['ボタン名'] . '</a></div>';
?>
phx:モディファイア名というスニペット名でスニペットを作成すると、$outputという変数で値を受け取ることができます。今回は[+id+]の値を処理しています。リソースIDが分かればそのページの情報を全て取得できるので、今回のような高度な処理ができます。
Kenny
メンバー
メンバー
記事: 179
登録日時: 2011年5月28日(土) 13:41

Re: 「テンプレート変数が空欄の場合、ボタンを出さない」という仕組み

投稿記事 by Kenny »

Yama様

本当に、何とお礼を申し上げれば良いか…

早速、自分のサイトに導入してみました。
完ぺきに作動しました。ありがとうございます。
本当に勉強になります。


実際には、チャンク「ページの雛型」というテンプレートを設けて、後々、大量のページのデザインを一気に変更する事が出来るようにしようと考えております。

触ったファイル
**************************************
出力ページ (17)

■チャンク
ページの雛型(3)
**************************************

エラーが出てしまいます。
この様な運用は、難しいでしょうか。
何度もすみません。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: 「テンプレート変数が空欄の場合、ボタンを出さない」という仕組み

投稿記事 by yama »

コード: 全て選択

<?php
$tv = $modx->getTemplateVarOutput('*',$output);
if(empty($tv['ボタン名'])|| empty($tv['ボタンのURL'])) return;

$tpl = $modx->getChunk('ページの雛型');
return $modx->parsePlaceholder($tpl,$tv);
?>
モディファイアを上記のようにして、

コード: 全て選択

[[Ditto? &tpl='@CODE:[+id:ボタン+]' &documents=16]]
スニペットコールはこのままにします。こうしないとモディファイアにリソースIDを渡せないからです。

コード: 全て選択

<!--ページの装飾-->
<div style="width:100px; height:20px; background-color:#CCC; text-align:center; border-style:solid;">
<a href="[+ボタンのURL+]" target="_blank">[+ボタン名+]</a>
</div>
<!--ページの装飾-->
チャンクはこのように記述します。
Kenny
メンバー
メンバー
記事: 179
登録日時: 2011年5月28日(土) 13:41

Re: 「テンプレート変数が空欄の場合、ボタンを出さない」という仕組み

投稿記事 by Kenny »

Yama様

いつもお世話になっております。

私の為に、プログラムありがとうございました。

早速、
チャンク「ページの雛型(3)」
にボタン以外の装飾を入れてみました所、ボタンが消える状況(ボタン名を空白にする)にすると、ボタン以外の部分も消えてしまいます。
この辺りは、やはり厳しいでしょうか。。
何度もすみません。。

++++++++++++++++++++++++++++++++++

<!--ページの装飾-->

test(ボタンが表示されない状況になるとこれらも表示されなくなってしまいます)

<div style="width:100px; height:20px; background-color:#CCC; text-align:center; border-style:solid;">
<a href="[+ボタンのURL+]" target="_blank">[+ボタン名+]</a>
</div>

<!--ページの装飾-->

++++++++++++++++++++++++++++++++++
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: 「テンプレート変数が空欄の場合、ボタンを出さない」という仕組み

投稿記事 by yama »

この部分はパターン出力を行なうのでしょうか?そうでなければスニペットコールの外側に書くとよいですが、パターン出力を行なう場合はモディファイア内部で出し分けを行なうとよいと思います。
たとえば、ボタン名の入力値が空白でなければAを、空白ならBを出力。という感じですね。
Kenny
メンバー
メンバー
記事: 179
登録日時: 2011年5月28日(土) 13:41

Re: 「テンプレート変数が空欄の場合、ボタンを出さない」という仕組み

投稿記事 by Kenny »

Yama様

お世話になっております。
手こずらせてしまい申し訳ございません。

私が相談させて戴く前の状況を再現しました。

中の構造を見てもらいますと、むりやり感イッパイなのですが、「ボタン名」を空にしますと、ボタンの枠等が無くなります。かつ、チャンク「ページの雛型」の内容も消えません。
しかし、問題がございます。。

これらを動かすには以下のファイルを使用します
******************************************************
データ側 (16)
出力ページnew (18)

■チャンク
ページの雛型new(5)
前new(6)
後new(7)

******************************************************

なかでも見て戴きたいのはチャンク「ページの雛型new」で、
================================================================
装飾装飾…

<br>

[+ボタン名:ifempty=``+]

<!--このコメント部分を消すと、とたんに表示がおかしくなり動かなくなります。意味が不明なのですが。。
<div style="width:100px; height:20px; background-color:#CCC; text-align:center; border-style:solid;"><a href="[+ボタンのURL+]" target="_blank">[+ボタン名+]</a></div>
-->

================================================================

私の偶然出来上がった、めちゃくちゃなコードが、たまたま動くという状態で、このまま結構大きいサイトを運営していくのは、非常に不安になりまして、今回、相談させていただきました。


Yama様、複雑な相談を持ちかけ、申し訳なく思っております。
返信する