1.0.19J でGetField の挙動が変化?  【解決済み】

質問全般・改善要望
jalan2
メンバー
メンバー
記事: 12
登録日時: 2013年11月25日(月) 22:38

1.0.19J でGetField の挙動が変化?  【解決済み】

投稿記事by jalan2 » 2017年5月26日(金) 12:16

開発技術はなく、もっぱらユーザーとして使用しています。
MODX を 1.0.15J から 1.0.19J にアップグレードした際、GetField で目的の値が取得できない、エラーがでる事象が発生したので報告します。

・ホスト&契約タイプ :ロリポップ
・PHPバージョン :5.2
・DB :MySQL5.6

●目的の値が取得できなくなったケース

コード: 全て選択

<a href="[~[[GetField? &parent=`1` &parentLevel=`0` &field=`id`]]~]">[[GetField? &parent=`1` &parentLevel=`0`]]</a>


○対処
サイドメニューで、ルートから 1 番目のカテゴリ名を表示・リンクさせるために上記のようにしていました。同一カテゴリ内でその子、孫階層でも同一表示を行わせるために用いていましたが、直接の親が表示されるようになってしまいました。
汎用的に使いたくてそうしていましたが、汎用的には使用しておらず、直接値を書き込んでも問題なかったため、そうやって回避しており、現在問題はございません。。

●Wayfinder 内で使用してエラーとなったケース

コード: 全て選択

[[Wayfinder
    &startId = `[[GetField? &parent=`1` &parentLevel=`0` &field=`id`]]` //
    &level   = `2`
    &sortBy  = `menuindex`
    &hideSubMenus = `1`
    &textOfLinks = `pagetitle`
]]


○エラーの内容
# 10` // &level = `2 # Wayfinder &startId error


○対処
こちらも同様、値を直接書き込むことで対処。
MODXフォーラムを検索して、http://forum.modx.jp/viewtopic.php?t=956 の getfield.inc.php のパッチを適用すると、今度は以下のエラー。
# 50` // &level = `2 # Wayfinder &startId error


-----------

他に手段がなくて GetField を使うことが多かったのですが、さて、今後どうしようか? と考えております。
何かアドバイスいただければ幸いに思います。
アバター
hisato
メンバー
メンバー
記事: 71
登録日時: 2012年8月18日(土) 20:21

1.0.19J でGetField の挙動が変化?

投稿記事by hisato » 2017年5月26日(金) 15:47

GetFieldの代わりにUltimateParentで解決出来ないでしょうか?
スニペットとリソース変数のモディファイア版があります。

>任意のリソースのデータを表示する方法
http://modx.jp/docs/tags/rv/

>UltimateParentスニペット
http://chibinowa.net/modx/extras/UltimateParent.html

あと、「`」が入れ子になっているのでどちらかを"にするのがおすすめです。(今回のエラーの原因はこれじゃないと思いますが)

WayfinderにIDが「 // &level = 」で渡っているみたいなのでWayfinder側にも問題があるのかもしれないです。
noka
メンバー
メンバー
記事: 83
登録日時: 2013年6月19日(水) 10:02

1.0.19J でGetField の挙動が変化?

投稿記事by noka » 2017年5月26日(金) 19:58

こんばんは。
最初の例は,

コード: 全て選択

<a href="[~[*id@up*]~]">[*pagetitle@up*]</a>

のような記法で行けるのではないかと思います。

wayfinderも同様に,

コード: 全て選択

 &startId = `[*id@up*]`

ですが,hisatoさんのご指摘のように,「//」はコメント扱いにならないように思います。

ただ,@記法は,[+pagetitle@up+]のようなプレースホルダでの利用に向かない(効かなかったと思う)ので,dittoやwayfinderのテンプレート内での利用時にはスニペットを併用する必要がでてくると思います。

例えば,スニペット名をupとして,以下作成しておけば,モディファイアとしても[+id:up:pagetitle+]とできたり,条件判定にも使えて少し複雑なこともできるようになるので,何かと便利ではないかと思います。

コード: 全て選択

//指定されたリソースが属するルート直下の親リソースのIDを返す
//モディファイア書式:[*id:up(36)*]とか$optはtop引数
//スニペット書式:[[up &top=`36`]]とか
$id = (isset($value) && intval($value)) ? intval($value) : $modx->documentIdentifier;
$top = (isset($opt) && intval($opt)) ? intval($opt) : 0;
return $modx->getUltimateParentId($id,$top);


工夫の仕方はいろいろとはいえ,定番,定跡的な実例集みたいなものがあるといいかもですね—。
#hisatoさんのサイト,よく勉強させていただいています。

それでは。
アバター
yama
管理人
記事: 2929
登録日時: 2009年7月29日(水) 02:50

1.0.19J でGetField の挙動が変化?

投稿記事by yama » 2017年5月26日(金) 21:45

コード: 全て選択

# 10` // &level = `2 # Wayfinder &startId error
これは本家版では修正したと思います。他の件も後ほど調べてみます
jalan2
メンバー
メンバー
記事: 12
登録日時: 2013年11月25日(月) 22:38

1.0.19J でGetField の挙動が変化?

投稿記事by jalan2 » 2017年5月30日(火) 11:33

hisato さま、noka さま、早速のご回答ありがとうございました。

>任意のリソースのデータを表示する方法
http://modx.jp/docs/tags/rv/

で難なく解決できました。

noka さまには、ソースまでご教示いただき助かりました。
UltimateParentスニペットは、これから活用方法を研究したいと思っています。
アバター
hisato
メンバー
メンバー
記事: 71
登録日時: 2012年8月18日(土) 20:21

1.0.19J でGetField の挙動が変化?

投稿記事by hisato » 2017年5月30日(火) 15:58

解決できたみたいで良かったです。

Wayfinder &startId error は確か今年のはじめぐらいに私が修正お願いした件なので覚えています。
手元の最新バージョンでは出てないので、どれかのファイルが古いままになってるとか可能性があります。

>nokaさん
>#hisatoさんのサイト,よく勉強させていただいています。
えへへ有難うございます!(๑´▿`๑)ノ