wayfinderのプレースホルダ指定について  【解決済み】

質問全般・改善要望
返信する
angel
メンバー
メンバー
記事: 10
登録日時: 2012年9月10日(月) 03:53

wayfinderのプレースホルダ指定について

投稿記事 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
-----
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: wayfinderのプレースホルダ指定について

投稿記事 by yama »

http://120910140212-1887.evo.demo.modx.jp/manager/
http://120910140212-1887.evo.demo.modx.jp/
上記デモサイトで確認してみたところ、テンプレート変数を出力できました。
Wayfinderのコードを実際に見てみましたが、outerTplなどいくつかのテンプレートは処理対象にならない仕様のように思えます。
angel
メンバー
メンバー
記事: 10
登録日時: 2012年9月10日(月) 03:53

Re: wayfinderのプレースホルダ指定について

投稿記事 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>
`
	    ]]
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: wayfinderのプレースホルダ指定について

投稿記事 by yama »

コードを眺めてみたところ、$placeHolders['rowLevel']で定義されている13種類のプレースホルダとテンプレート変数しか対応してないみたいです。あまりMODXらしくない仕様ですね。
デバッグ情報は&debug=1で出力できるので、ヒントになるかもしれません。
angel
メンバー
メンバー
記事: 10
登録日時: 2012年9月10日(月) 03:53

Re: wayfinderのプレースホルダ指定について

投稿記事 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さんのおかげでモヤモヤは晴れました。
ありがとうございました。
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: wayfinderのプレースホルダ指定について

投稿記事 by yama »

おそらくコーディングミスだと思います。もしよければ動作テスト協力いただければ、対応処理を追加してみます。
angel
メンバー
メンバー
記事: 10
登録日時: 2012年9月10日(月) 03:53

Re: wayfinderのプレースホルダ指定について

投稿記事 by angel »

yamaさん

私は「コードを読まず、改変もせず、ある機能をそのまま利用するユーザー」という立場ですが、それでもお役に立てるようであれば動作テストはもちろん協力させていただきます。

よろしく御願い申し上げます。
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: wayfinderのプレースホルダ指定について

投稿記事 by yama »

パッチ作成しました。添付のファイルを解凍してassets/snippets/wayfinder/ ディレクトリに上書きしてください。
添付ファイル
wayfinder.inc.zip
(7.83 KiB) ダウンロード数: 535 回
angel
メンバー
メンバー
記事: 10
登録日時: 2012年9月10日(月) 03:53

Re: wayfinderのプレースホルダ指定について

投稿記事 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)は表示されました。
改行しない文字を入れても結果は同じでした。
その点以外は私の使用レベルでは問題が出ておりません。

取急ぎご報告申し上げます。
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: wayfinderのプレースホルダ指定について

投稿記事 by yama »

型をtextarea以外に変更すると表示されますでしょうか?
angel
メンバー
メンバー
記事: 10
登録日時: 2012年9月10日(月) 03:53

Re: wayfinderのプレースホルダ指定について

投稿記事 by angel »

以下の方に変更して表示を確認してみました。
結果は以下の通りでした。

Text型に変更 > 表示されませんでした
Rich Text型に変更 > 表示されませんでした
Custom Input型に変更 > 表示されませんでした
Text area型に戻す > 表示されませんでした

取急ぎご報告申し上げます。
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: wayfinderのプレースホルダ指定について

投稿記事 by yama »

テンプレート変数の名前が関係しているのかもしれません。

・テンプレート変数名でDBを検索する前に、テンプレート変数名が正しくDBに渡るように前処理
・テンプレート変数の値を取得する処理をWayfinder自前で行なっているが、MODX本体に同じ機能が備わっているためこれを利用するように変更

上記の改善を施したパッチを作成しましたので、これを試していただけますでしょうか。
添付ファイル
wayfinder.inc.zip
(7.49 KiB) ダウンロード数: 536 回
angel
メンバー
メンバー
記事: 10
登録日時: 2012年9月10日(月) 03:53

Re: wayfinderのプレースホルダ指定について

投稿記事 by angel »

でました!ありがとうございます!!

早速実際のサイトで試してみたいと思います。
私のニーズはこれで十分ですが、他にも何かテストすべきことはありますでしょうか?
angel
メンバー
メンバー
記事: 10
登録日時: 2012年9月10日(月) 03:53

Re: wayfinderのプレースホルダ指定について

投稿記事 by angel »

yamaさん

その後も引き続き使っていますが、問題なく動いています。
ところで、今になって恐縮ですが、私が変数名を打ち間違えていたかもしれないと思える資料が出てきてしまいました。
最後に更新をしていただいた前に、すでに動いていたのに私が動かないと伝えてしまっていた可能性があります。
申し訳ございません。
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: wayfinderのプレースホルダ指定について  【解決済み】

投稿記事 by yama »

コードをすっきり整理する機会になったのでよかったと思います。クォート文字を含むテンプレート変数も使えるようになりましたし。また何か気付いたことがあればご連絡ください
angel
メンバー
メンバー
記事: 10
登録日時: 2012年9月10日(月) 03:53

Re: wayfinderのプレースホルダ指定について

投稿記事 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
関連性の可能性はあるでしょうか?
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: wayfinderのプレースホルダ指定について

投稿記事 by yama »

QuickManagerで正常に更新ボタンをクリックした直後のエラーのようですね。1.0.6J-r6の1449行目でエラーになってますが、ここではスニペットコールの展開処理を行なってます。
あとで調べてみます
angel
メンバー
メンバー
記事: 10
登録日時: 2012年9月10日(月) 03:53

Re: wayfinderのプレースホルダ指定について

投稿記事 by angel »

yamaさん

順番が逆になってしまいましたが、オリジナルのwayfinderと差し替えて試してみました。
しかしながら、同様の問題が収まりませんでした。

取急ぎご報告申し上げます。
返信する