ページ 1 / 1
wayfinderのプレースホルダ指定について
Posted: 2012年9月10日(月) 04:11
by angel
はじめまして
MODxのwayfinderを使っていて疑問がありまして、投稿させていただきます。
まず、現時点でwayfinderをチャンクで作ったテンプレートと連動して動作させるということ自体は、期待通りに動かせています。
ただし、テンプレートをチャンクで自作してテンプレート変数名やリソース変数名を[+テンプレート変数名+]または[+リソース変数名+]のフォーマットで利用しようとした場合、無視されているように見えます。
具体的にはテンプレート内のプレースホルダの箇所だけ何も出力されず、それ以外は出力され、ドキュメントリソースの数だけ正しくループして終了します。
[+wf.*+]系のプレースホルダは問題なく動作します。
以下の仕様資料によると動くはずなのですが・・・
http://modx.jp/docs/extras/snippets/wayfinder/720.html
私の理解は、たとえば[+longtitle+]や[+pagetitle+]といった指定や[+original_template_var+]というような指定ができるという意味だと思っています。
なぜこのようになってしまうのかアドバイスをいただけると幸いです。
-----
利用のサーバ:ubuntu10.04
MODXのバージョン:evolution 1.0.6j-r6
wayfinderのバージョン:2.0.4
PHPのバージョン:5.3.2-1
MySQLのバージョン:5.1.41
ブラウザ:Chrome 21.0
-----
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月10日(月) 14:06
by yama
http://120910140212-1887.evo.demo.modx.jp/manager/
http://120910140212-1887.evo.demo.modx.jp/
上記デモサイトで確認してみたところ、テンプレート変数を出力できました。
Wayfinderのコードを実際に見てみましたが、outerTplなどいくつかのテンプレートは処理対象にならない仕様のように思えます。
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月10日(月) 23:11
by angel
yamaさん
デモサイトでのご確認をありがとうございました。
さっそくデモサイトを拝見いたしました。
このxRayテンプレート内にある[+テスト+]というテンプレート変数は、出力されていますね・・・
私の環境にxRay内の以下の部分を持ち込んでみましたが、[+テスト+]以外は出力されました。
[+テスト+]は未登録の変数なので、---[+pagetitle+]===に変更してみましたが---と===の間には何も出力されていませんでした。
何か設定の違いなのかと思い、管理画面を見比べてみましたがほとんど同じでした。
うーむ。せめてエラーログでも出てくれれば見当のつけようもあるのですが・・・
やはりコードを読むしかないのでしょうか??
コード: 全て選択
[[Wayfinder
&startId = `0` // ルート階層のリソースが対象
&level = `1` // 1階層のみ
&rowTpl = `@CODE:
<li[+wf.id+][+wf.classes+]>
<a href="[+wf.link+]" title="[+wf.title+]" [+wf.attributes+]>[+テスト+][+wf.linktext+]</a>
[+wf.wrapper+]
</li>
`
]]
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月11日(火) 11:07
by yama
コードを眺めてみたところ、$placeHolders['rowLevel']で定義されている13種類のプレースホルダとテンプレート変数しか対応してないみたいです。あまりMODXらしくない仕様ですね。
デバッグ情報は&debug=1で出力できるので、ヒントになるかもしれません。
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月11日(火) 15:36
by angel
yamaさん
>$placeHolders['rowLevel']で定義されている13種類のプレースホルダとテンプレート変数しか対応してないみたいです。
ありがとうございます。それならば動作に納得できます。
マニュアルには以下のようにあったので、これは誤解を招く内容だと思いました。(私が重要な何かを読みこぼしているかもしれませんが・・・)
http://modx.jp/docs/extras/snippets/wayfinder/720.html
>[+リソース変数名+] Any standard document field can be referenced from within a Wayfinder template.
デバッグモードのフラグはやってみましたが、hrタグ以外は特に何も出力されませんでした。
意図的に存在しない変数を指定しても、単純に無視するだけでした。
テンプレート変数を増やしすぎるとシンプルな管理から遠ざかるのであまりやりたくなかったので残念ですが、yamaさんのおかげでモヤモヤは晴れました。
ありがとうございました。
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月11日(火) 15:40
by yama
おそらくコーディングミスだと思います。もしよければ動作テスト協力いただければ、対応処理を追加してみます。
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月11日(火) 21:10
by angel
yamaさん
私は「コードを読まず、改変もせず、ある機能をそのまま利用するユーザー」という立場ですが、それでもお役に立てるようであれば動作テストはもちろん協力させていただきます。
よろしく御願い申し上げます。
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月11日(火) 23:27
by yama
パッチ作成しました。添付のファイルを解凍してassets/snippets/wayfinder/ ディレクトリに上書きしてください。
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月12日(水) 01:31
by angel
早速パッチをありがとうございます。
取急ぎテストしてみた結果をお伝えします。
まず、以下のリソース変数はOKでした。
[*pagetitle*] OK
[*longtitle*] OK
[*description*] OK
[*alias*] OK
[*link_attributes*] OK
[*introtext*] OK
[*menutitle*] OK
次にテンプレート変数をテストしました。
全ての型を試せていませんが、少し疑問が発生しています。
このテストよりも前から存在していたテンプレート変数でTextareaのものがあるのですが、これだけが表示させることができませんでした。
しかしながら、新規でTextarea型のテンプレート変数を作ると問題なく表示できました。
この表示できないTextarea型TVと表示できるTextarea型TVの違いを見るため同じ値を入れてみました。
前者(以前から存在しているTV)は引き続き何も出力されず、後者(新規で追加したTV)は表示されました。
改行しない文字を入れても結果は同じでした。
その点以外は私の使用レベルでは問題が出ておりません。
取急ぎご報告申し上げます。
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月12日(水) 07:46
by yama
型をtextarea以外に変更すると表示されますでしょうか?
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月12日(水) 13:37
by angel
以下の方に変更して表示を確認してみました。
結果は以下の通りでした。
Text型に変更 > 表示されませんでした
Rich Text型に変更 > 表示されませんでした
Custom Input型に変更 > 表示されませんでした
Text area型に戻す > 表示されませんでした
取急ぎご報告申し上げます。
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月12日(水) 14:15
by yama
テンプレート変数の名前が関係しているのかもしれません。
・テンプレート変数名でDBを検索する前に、テンプレート変数名が正しくDBに渡るように前処理
・テンプレート変数の値を取得する処理をWayfinder自前で行なっているが、MODX本体に同じ機能が備わっているためこれを利用するように変更
上記の改善を施したパッチを作成しましたので、これを試していただけますでしょうか。
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月12日(水) 15:56
by angel
でました!ありがとうございます!!
早速実際のサイトで試してみたいと思います。
私のニーズはこれで十分ですが、他にも何かテストすべきことはありますでしょうか?
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月13日(木) 11:20
by angel
yamaさん
その後も引き続き使っていますが、問題なく動いています。
ところで、今になって恐縮ですが、私が変数名を打ち間違えていたかもしれないと思える資料が出てきてしまいました。
最後に更新をしていただいた前に、すでに動いていたのに私が動かないと伝えてしまっていた可能性があります。
申し訳ございません。
Re: wayfinderのプレースホルダ指定について 【解決済み】
Posted: 2012年9月13日(木) 13:33
by yama
コードをすっきり整理する機会になったのでよかったと思います。クォート文字を含むテンプレート変数も使えるようになりましたし。また何か気付いたことがあればご連絡ください
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月27日(木) 16:23
by angel
yamaさん
先日いただいた新wayfinderを使ってドキュメントを追加して行きましたところ、原因は不明ですがMODxがメモリーリミットで頻繁に表示できなくなるようになりました。
具体的には以下のようなエラーです。
コード: 全て選択
[Thu Sep 27 14:27:25 2012] [error] [client xxx.xxx.xxx.xxx] PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 17441 bytes) in foo/hoge/manager/includes/document.parser.class.inc.php on line 1449, referer: https://www.foo.com/cover/somepage?quickmanagerclose=1
関連性の可能性はあるでしょうか?
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月27日(木) 16:34
by yama
QuickManagerで正常に更新ボタンをクリックした直後のエラーのようですね。1.0.6J-r6の1449行目でエラーになってますが、ここではスニペットコールの展開処理を行なってます。
あとで調べてみます
Re: wayfinderのプレースホルダ指定について
Posted: 2012年9月27日(木) 18:05
by angel
yamaさん
順番が逆になってしまいましたが、オリジナルのwayfinderと差し替えて試してみました。
しかしながら、同様の問題が収まりませんでした。
取急ぎご報告申し上げます。