MODX Evolution 1.0.5J-r7をリリースしました

2011年9月26日 12時00分 shortlink:http://modx.jp/?id=728

スニペットコールのパース処理を改善しました。MODX Revolutionと同じように、正規表現を用いずにスニペットコールを展開します。

正規表現によるパターン検出では、多様な記述への対応に限界がありました。今回の改善では、デリミタ文字を順序に従ってトレースすることにより、精密且つ負荷も抑えた処理を実現しています。

※リッチテキストエディタが有効な領域内では複数行記述はできません(<p>・<br />タグや&nbsp;などのHTMLエンティティがスニペットコール内に混入するため)。一行でつなげて記述する必要があります。

■MODX Evolution 1.0.5J Revision7 ダウンロード
http://code.google.com/p/modx-ja/downloads/detail?name=modx-1.0.5J-r7.zip

注意事項

【重要】TinyMCEプラグインのパスオプションの構成変更について

TinyMCEプラグインオプションの設定について、重要な変更があります。必須ではありませんが、オプション設定を更新する場合は、通常のアップデート手順だけではなく手作業による対応が必要です。
(※アップデートしたままでも既存の設定を引き継いで動作しますが、設定の変更はできません)

解説

従来は上記の4つの項目から設定を選択できるようになっています。href要素またはsrc要素に入力されたパス情報をTinyMCE側で判定して、記事内のパス表現を揃える設定です。

これを今回、

このように変更しました。「docrelative」を「Absolute path」という表現に改めた点が特に重要です。MODXはドキュメント(ページ)基準の相対パスをコントロールする仕組みを持っていません。また、「rootrelative」という表現も実際の動作とは異なり、絶対パスに変換していました。

新規に追加した「No change」オプションで、パスの自動変換を無効にできます。パスの出力をスニペットやチャンク・ウェブリンクで制御したい場合は、この設定を用いる必要があります。

オプション名は変わっていないため、項目構成の変更はアップデート作業では反映されません。古い設定値のままでも引き継いで動くようにしてありますが、気になる場合はプロパティコードを手作業で貼り付け直して更新してください。この場合、その他の設定値も初期化されるためご注意ください。

手順

&customparams=Custom Parameters;textarea;valid_elements : "*[*]", &mce_formats=Block Formats;text;p,h1,h2,h3,h4,h5,h6,div,blockquote,code,pre &entity_encoding=Entity Encoding;list;named,numeric,raw;named &entities=Entities;text; &mce_path_options=Path Options;list;Site config,Absolute path,Root relative,URL;Site config &mce_resizing=Advanced Resizing;list;true,false;true &disabledButtons=Disabled Buttons;text; &link_list=Link List;list;enabled,disabled;enabled &webtheme=Web Theme;list;simple,editor,creative,custom;simple &webPlugins=Web Plugins;text;style,advimage,advlink,searchreplace,contextmenu,paste,fullscreen,xhtmlxtras,media &webButtons1=Web Buttons 1;text;undo,redo,selectall,|,pastetext,pasteword,|,search,replace,|,hr,charmap,|,image,link,unlink,anchor,media,|,cleanup,removeformat,|,fullscreen,code,help &webButtons2=Web Buttons 2;text;bold,italic,underline,strikethrough,sub,sup,|,|,blockquote,bullist,numlist,outdent,indent,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,|,styleprops &webButtons3=Web Buttons 3;text; &webButtons4=Web Buttons 4;text; &webAlign=Web Toolbar Alignment;list;ltr,rtl;ltr &width=Width;text;100% &height=Height;text;400

プロパティコードは上記のとおりです。全て一行で書かれており、これをTinyMCEプラグイン設定画面の「プラグイン設定」に貼り付けると、プロパティを更新できます。

変更内容

不具合修正

改善

不具合報告・改善要望について

フォーラムまたは問い合わせフォームを通じてご連絡ください。

アップデートの手順

https://modx.jp/docs/update.html

上記を参照してください。

主な改善内容

パーサを改善

スニペットコールの展開処理を大幅に改善しました。基本的に上位互換性を持つため、使い方を変更する必要はありません。スニペットコールの書き方で今まで戸惑った経験がある人は、下記の改善ポイントをお読みください。
※スニペットコールのパラメータ内に[*変数名*]タグを記述する場合は、従来と挙動が変わるためご注意ください。通常のノウハウに沿ってWayfinderやDittoなど一般的なスニペットを利用する場合は、ほぼ問題ありません。

従来は、正規表現による処理のため、スニペットコールは一行でつなげて書かないと不安定という印象があったと思いますが、新しいパーサでは逆にパラメータごとに行を分けて書くほうが確実です。「&」を書き忘れたりしても、改行で区切られていれば認識することができます。

1. スニペットコールのパラメータ値で「?」「&」「=」が利用可能に

従来のパーサではスニペットコールのパラメータ値として「?」「&」「=」を用いることができなかったため、スニペットごとに独自のアプローチをとっていました。
たとえば|xq|・|xa|・|xe|に置き換えて書く方法がよく用いられていますが、

[[スニペット名? &param=`http://example.com|xq|mode|xe|rss|xa|display|xe|10`]]

上記のように、見た目によく分かりません。

[[スニペット名? &param=`http://example.com?mode=rss&display=10`]]

新しいパーサでは上記のように記述できます。必ずクォート文字で囲む必要があります。

[[Ditto?
    &parents=0
    &display=10
    &dateFormat = %Y年%m月%d日
    &tpl=`@CODE:
    <tr>
     <td>[+date+]</td>
     <td><a href
="[+url+]">[+title+]</a></td>
   </tr>`

]]

上記のように、WayfinderやDittoのテンプレートコードをインラインで記述することも可能です。従来は、「 = 」を含むテンプレートコードを書くことができなかったため、@CODEバインディング記述の便利さを生かすことができませんでした。

2. 入れ子記述のスニペットコールの処理を改善

[[wayfinder? &startId=`[[UltimateParent]]`]]

従来のパーサでは上記のようにスニペットコールをネストさせて記述すると、

[[wayfinder? &startId=`[[UltimateParent]]`]] ← 末尾に注意

内部的には上記のように認識します。「[[ 」と「 ]] 」にはさまれた部分を一本のスニペットコールとして認識するため、入れ子になっていることを理解できず、末尾の「 `]] 」をとりこぼしています。

[!wayfinder? &startId=`[[UltimateParent]]`!]

そのため、上記のように外側をキャッシュオフ形式とする必要がありました。こうすれば、「内側のスニペットコールを処理した値」を含んだスニペットコールをページキャッシュに格納できるからです。この方法では、せっかくのキャッシュ処理が使えないため、動作が重いスニペットを用いるページは不利です。

1. [[wayfinder? &startId=`[[UltimateParent]]`]]
2. [[wayfinder? &startId=`処理済みの結果`]]

新設計のパーサでは、上記のように内側から順番に処理します。キャッシュオフ形式で書く必要はありません。

3. スニペットコールのパラメータ値にリソース変数を利用できるように改善

多くのスニペットにおいて、パラメータの値にリソース変数やテンプレート変数を用いることができますが、これはMODX本体がそのような使い方をサポートしているわけではなく、パラメータを受け取ったスニペットが自前で処理しているためです。

[[Wayfinder? &startId=`[*parent*]`]]

Wayfinderはそのような使い方を想定していないため、上記のようなスニペットコールを記述すると期待どおりに処理することができません。

[!Wayfinder? &startId=`[*parent*]`!]

上記のように、外側をキャッシュオフ形式で記述すると、入れ子のスニペットコールと同様に、あらかじめ[*parent*]が展開された状態でスニペットコールがキャッシュに格納されるため、結果的には期待どおりに処理できますが、設計方針としてはイレギュラーな使い方になります。これで解決できる理由がよく分からないまま使っているユーザも多いと思います。

これを改善し、MODX本体側で[*変数*]を展開してからスニペットに処理を渡すようにしました。

[[Wayfinder? &startId=`[*parent*]`]]

上記のように記述できます。ページ数が非常に多いサイトではWayfinderの処理はキャッシュを使わないと重く感じることがありますが、これで解消できます。

4. パラメータの囲み文字(デリミタ)を用いた時の挙動の改善

[[スニペット名? &param=   value   ]]
[[スニペット名? &param=`   value   `]]

従来のパーサでは、上記のどちらの書き方でも、処理のためにスニペットが受け取る値は一律にtrimしていたため、どちらも同じでした。これを改善し、バッククォート( ` )で値を囲んだ場合は、囲んだ中身をそのままスニペットに渡すようにしました。半角スペースやタブ、改行などが値の前後についている場合も、削除せずそのまま処理に渡すことができます。

このため、DittoやWayfinderのテンプレートコードをインラインに記述する場合などに、インデントや改行タイミングなど出力にこだわることができます。

5. スニペット名末尾の「?」を不要に

スニペット名末尾の「?」が不要になりました。

[[スニペット名&param1=`値1`&param2=`値2`]]

上記のように記述できます。

スニペット名に「&」を含めたい時は、これまでと同じようにスニペット名の末尾に「?」をつけてください。

Revolutionでは現在のところ「?」が必要なので、載せ替える可能性がある場合は「?」を書くことに慣れておくとよいかもしれません。

※10月3日追記
PHxのmathモディファイアで「?」を用いる場合は正しく処理できないため、次回修正します。

6. パラメータ区切り文字としてダブルクォートやシングルクォートが利用可能

従来はパラメータの値を囲む場合は「 ` 」(バッククォート) を使うことになっていましたが、ダブルクォートやシングルクォートも使えるようになりました。

<table>
[[Ditto
  &dateFormat = `%Y年%-m月%-d日`
  &tpl        = '@CODE:
    <tr>
    <td class="date">[+date+]</td>
    <td class="member">[+editedby:userinfo=`fullname`+]</td>
    <td class="title"><a href="[+url+]">[+title+]</a></td>
    </tr>
' // 表示パターン
]]
</table>

区切り文字を変更できるので、上記のようにインラインテンプレート内にオプション付きのPHxモディファイアを記述することができます。

7. コメントの記述を可能に

パラメータを持つスニペットコールを複数行で記述する場合、クォートで囲んだパラメータの右側に、半角スラッシュ2つで始まるコメントを記述できます。コメントは行の終端までが有効です。

上記のような記述が可能です。

一時的に無効にしておきたいパラメータをコメントアウトできます。

その他、動作保証はしませんが、パラメータ名先頭の「&」を省略しても動作します。この場合はパラメータセットを一行ずつ書く必要があります。パラメータの区切り文字も必要です。パラメータ値は複数行に渡って記述できます。

Ditto内蔵PHxをアップデート

Ditto内蔵のPHxを2.1.2から2.1.4へアップデートしました。扱えるモディファイアが増えたことと、カスタムモディファイアをファイルで追加できるようになったことが主な違いです。

/assets/plugins/phx/modifiers/モディファイア名.phx.php

ファイルで追加する場合は、上記のロケーションに配置します。

次回リリースについて

現在のところ来月はリリースを行なう予定はありません。Github移行や1.0.6リリースに向けた本家開発チームとの調整を優先します。

以上、ご意見ありましたらフォーラムまたは問い合わせフォームからフィードバックをお願いします。

PR

  • KAGOYA
  • ASP at AKIHABARA Japan
  • CMS AWARDS 2007 Winner
ページトップへ