MODX Evolution 1.0.14J-r9 をリリースしました
2015年3月19日 13時00分 shortlink:http://modx.jp/?id=1021
MODX Evolution 1.0.14J-r9をリリースしました。不具合修正と表示速度向上に重点を置いた長期安定版です。
※3月23日追記 細かい不具合が複数見つかったため、修正のうえパッケージを差し替えました。23日以前に当バージョンを導入済みの場合は、managerフォルダを上書きしてください。
ダウンロード
https://modx.jp/download/download_evo.html
上記からダウンロードしてください。
アップデートの手順
https://modx.jp/docs/update.html
上記を参照してください。
変更内容
不具合修正
- TinyMCEで画像の差し替え・リンクの更新ができないことがあるため修正
http://forum.modx.jp/viewtopic.php?f=7&t=1514 - エディタ変更時のdocumentDirty不具合
http://forum.modx.jp/viewtopic.php?f=7&t=1514 - エイリアスとリソースIDの重複判定の修正
- 修正 - $modx->setCacheRefreshTime()
- 管理画面リソースツリーのノード名をエイリアスで表示する設定にしている場合、フォルダ名を正しく表示しないため修正
- TopicPath - メニューに表示しない設定(&hidemenuパラメータ)にしているリソースにパンくずリストが表示されないことがあるため修正
- Fix - mm_default(ManagerManager)
- テンプレート変数の区切り線が表示されないため修正
http://forum.modx.jp/viewtopic.php?p=8227#p8227 - Wayfinderを複数回呼び出した時、&configパラメータが初回しか実行できないため修正
http://forum.modx.jp/viewtopic.php?p=8231#p8231 - Ditto - デバッグコンソールのhtmlを修正
- Dittoテンプレート内のプレースホルダの処理を修正
http://forum.modx.jp/viewtopic.php?p=8231#p8231 - エレメントのインストールができないことがあるため修正
http://forum.modx.jp/viewtopic.php?p=8255#p8255 - ユーザ管理で「ファイル管理の設定」タブが表示されないため修正
- インストーラ修正 - overwriteパラメータの判定に問題がありManagerManagerのルールチャンクを本来のチャンク名でインストールできないため修正
- 条件付きGET有効時、ログインcaptchaの画像が更新されない
http://forum.modx.jp/viewtopic.php?f=32&t=1501 - 修正- $modx->mergePlaceholderContent()
[!キャッシュ無効?tpl='@CODE:[+ph:mod+]'!]
このように記述した場合に[+ph+]が値をセットしていないのにPHx処理がパラメータを展開してしまうため修正 - $modx->getOption()が正しく動作していないため修正
- $modx->_snipParamsToArray() - 名前のないパラメータができてしまう問題を修正
- スニペットコールの入れ子の問題を解決
- ForgotManagerPasswordプラグイン - パスワード変更通知メールの不具合を修正
http://forum.modx.jp/viewtopic.php?p=8143#p8143 - サイトインポート機能 - 数字のフォルダ名があると誤動作するため修正
- エクスポート機能 - 動作モードを記憶しないため修正
- ForgotManagerPasswordプラグインを使うと一度だけプラグインが使えなくなるため修正
- ForgotManagerPasswordプラグイン - 使えないプレースホルダがあるため修正
- MODX_API_MODEがセットされている場合はphp errorを表示する(インストーラでエラー発生時にWarningなど何も表示されないため)
- リソース保存時に$modx->stripAlias()が実行されていないため修正
- 管理画面リソースツリーのノード名をDBエスケープ処理してしまうため修正(シングルクォートの前にバックスラッシュがついてしまう)
- リソース新規投稿時にpublishedonがpub_dateと同じにならないため修正
- Dittoのページングでフィルターが使えないため修正
http://forum.modx.jp/viewtopic.php?f=32&t=1508 - プラグイン実行中に別のイベントが発生して更にプラグインを実行した際、_outoutの出力が結合される不具合を修正
仕様変更
- 関数名変更 - $modx->_get_snip_properties()を$modx->_getSnippetObject()に変更
- サイトキャッシュの初期化方法を変更 - assets/cache/ディレクトリ直下のphpファイルを全て削除する
- register_globalsが有効な環境では動作させない
- FindDangerValue関数を削除
Bug #53632 PHP hangs on numeric value 2.2250738585072011e-308
すでに4年経過しているため - $modx->phxを$modx->filterに変更(phxという名称は徐々に廃止予定)
- TopicPath - Dittoに倣って[+href+]を[+url+]に変更(今までどおり[+href+]も使える)
- typoのため関数名を変更(ParseIntputOptions → ParseInputOptions)
- OnMakeUrlイベントでウェブリンク処理時、参照前のリソースIDをorgIDとして渡すように変更
- @IF文の記法を変更
- リストア機能のバージョンチェックを廃止
新しいAPI
- $modx->event->vars (これまで変数渡しは一方通行だったがプラグイン内から値を書き換えできるように改善)
- $modx->getUltimateParentId()
- $modx->setPluginCache()
- $modx->getPluginCode()
- $modx->getPluginProperties()
- $modx->recDebugInfo()
- $modx->manager->getMemberGroups(ユーザID)
- $modx->manager->getUploadMaxsize()
- $modx->ph ($modx->placeholdersの別名)
※API関数は体系的な整理がまだよく練られていないため今後多少の調整が続く可能性があります。
改善
- 画面更新時にローディングバーを表示
http://nanobar.micronube.com/ - preLoaderブロックデザイン微調整
- PHxフィルター機能の精度を改善
- PHxフィルター機能のモディファイアを追加
- PHxフィルター機能の新しい記法を追加 - phx:cmd(opt)
- 記事中・テンプレート中・チャンク中の文字列に対してPHxフィルターを直接処理できるようにする
- テンプレート変数編集画面のオプション値・デフォルト値の欄でスニペットコールのパースを行なうbindingsトリガー文字列を追加(@PARSEまたは@MODX)
- ダッシュボードのロゴ位置微調整
- コンテンツデータのみのスナップショットを保存するオプションを追加
- TopicPath - @CODEでも指定できるようにする
- 内蔵PHx - モディファイア名にMODXタグを含む場合はパース(展開)する
- テンプレート変数のオプション・デフォルト値・カスタムプロセッサの各フィールドで@EVALの代わりに<?phpと書けるようにする
- $modx->documentMapの呼び出し方法を改善
- テンプレート変数のオプション値(ラジオボタン・チェックボックスなど)を改行区切りでも設定できるようにする
- プラグイン新規作成時、システムイベントをひとつも選んでない場合は自動的にOnWebPageInitを選択
- 任意のリソースの情報を表示する方法を追加(ClipperCMS準拠)
http://www.clippercms.com/documentation/construction/cross-references.html - Ditto - &tplOuterパラメータを追加(&outerTplパラメータのエイリアス)
- Ditto - &tplOuter(&outerTpl)パラメータで使えるプレースホルダを追加([+documents+][+docs+])
- ManagerManager - mm_widget_colorsの同梱ライブラリを更新(farbtastic.jsをv1.2からv2.0へ)
- MODXタグを無効化するためのHTMLコメントをページ表示直前に削除
(例・[<!---->[スニペット名]<!---->]) - $modx->getTagsFromContent()の処理を改善(ページ表示時間を大幅に短縮)
- $modx->parseText - 第一引数と第二引数($tplと$ph)が逆の順序で渡ってきた場合は入れ替えて処理する(Wayfinderなどが逆のため)
- バイパスモード時はuaTypeをpagesに固定する
- QuickManager - 画像軽量化
- 同梱のjQueryをv1.11.2にアップデート(v1.11.1は問題があり採用を見送っていました)
- QuickManager同梱のColorboxをv1.5.14にアップデート
- PHx - モディファイア名を大文字で書けるようにする
http://forum.modx.jp/viewtopic.php?p=8183#p8183 - サンプルテンプレートxRay - [*content*]にaddbreakモディファイアを追加
- サイトインポート機能の精度を改善
pagetitleがindex.htmlになる場合は代わりにaliasを設定
pagetitleを取得できなかった時はaliasを代入する - $modx->invokeEvent() - $modx->event->output()を使わずreturnでも値を返せるようにする
トピックス
パーサの基本処理を大幅に改善
スニペットコールや各種の変数タグを展開するパーサの処理を大幅に改善。より精密な処理とページ表示の高速化を実現しました。
内蔵PHxの処理を改善
内蔵PHxの処理を改善しました。複数のモディファイアを数珠つなぎにしても正確に動作します。
内蔵PHxの記法を改善
複数のモディファイアを数珠つなぎ(フィルターチェーン)にした時に分かりやすいように、記法を改善しました。
[*pagetitle:find=`new`:then=`新製品情報`:else=`通常ニュース`*]
[*longtitle:ifempty=`[*pagetitle*]`:sprintf=`<h3>%s</h3>`*]
従来の記法
[*pagetitle:FIND(new):THEN(新製品情報):ELSE(通常ニュース)*]
[*longtitle:ifempty([*pagetitle*]):sprintf(<h3>%s</h3>)*]
新しい記法。モディファイアは大文字小文字を区別しなくなったので、場合によっては上記のように大文字で書くと分かりやすくなります。
[*longtitle:ifempty([*pagetitle*]):sprintf('<h3>%s(製品情報)</h3>')*]
オプションに半角カッコを含める場合はクォートで囲みます。ダブルクォート・バッククォートも使えます。
従来の記法も使えます。好みに応じて使い分けてください。
内蔵PHxのモディファイアを充実
MovableTypeのグローバル・モディファイアを移植しました。
_default - このモディファイアを付与した変数の値が空の場合に出力する値を設定します。既存のifemptyモディファイアの別名として動作します。
capitalize - 最初の文字を大文字にします。変数の値が複数の単語が含まれている場合、それぞれの単語に対して処理します。
cat - 任意の文字列を末尾に追加します。たとえば変数に人名が入力されている時に「様」「さん」などを追加したい場合などに使えます。既存の「. 」モディファイアの別名として動作します。
count_characters - 文字数 (空白を含む) を出力します。既存のstrlen・len・lengthモディファイアの別名として動作します。
count_paragraphs - 段落数(空白行を含まない行数)を出力します。
count_words - 変数の値に含まれる単語 (半角の空白文字で区切られた文字の塊) の数を出力します。
decode_html - 変数の値に含まれるすべての HTML エンティティをデコードします。アメブロのRSSフィードのように、エンティティ化されたコンテンツを扱う場合の前処理に用いるとよいでしょう。
decode_xml - 具体的な挙動が不明なため移植予定なし
dirify - 移植予定なし
encode_html - 変数の値をHTML エンコードします。PHP関数htmlspecialchars()を実行します。
encode_js - javascript の文字列の値として使えるようにエンコードします。$modx->db->escape()を実行します。
encode_php - 移植予定なし
encode_sha1 - 変数の値をsha1形式に変換して出力します。別名sha1モディファイアとしても利用できます。
encode_url - ブラウザのアドレスバーで利用できるURL文字列形式にエンコードします。既存のurlencodeモディファイアの別名として動作します。
encode_xml - 移植予定なし
escape - 移植予定なし
filters - 移植予定なし
indent - 移植検討中
lower_case - 変数の値を小文字 (abc...) に変換します。既存のstrtolowerモディファイア・lcaseモディファイアの別名として動作します。
ltrim - 文字列先頭の複数の空白/スペースを全て削除します。
mteval - 移植を検討する意味はありますが、CMSとしての考え方が異なるため当面は移植予定なし。
nl2br - 改行を <br />タグに変換します。
nofollowfy - 移植予定なし
numify - 移植予定なし
regex_replace - 正規表現による文字列置換を行ないます。別名preg_replaceモディファイアとしても利用できます。
remove_html - HTML タグを除去します。除去ないタグをオプションで複数指定できます。strip_tagsモディファイア・notagsモディファイアの別名として動作します。
replace - 任意の文字列を置換できます。たとえば[*content:replace(MODx,MODX)*]と書くと、文中の「MODx」を「MODX」に統一できます。別名str_replaceモディファイアとしても利用できます。
rtrim - 文字列末尾の複数の空白/スペースを全て削除します。
sanitize - 移植を検討中です。
setvar - 受け取った変数の値は出力せず、オプションで指定した名前のプレースホルダに格納します。つまりプレースホルダを新規作成するモディファイアとして動作します。工夫次第で様々な応用が可能です。
smart_dashes - 移植予定なし
smart_ellipses - 移植予定なし
smart_quotes - 移植予定なし
smarty_pants - 移植予定なし
space_pad - 移植検討中
spacify - 移植検討中
spam_protect - メールアドレス文字列を、SPAMボットに拾わにくい文字列に変換します。
sprintf - 変数の内容を printfフォーマットで変換します。使用例:[*longtitle:sprintf(<h2>%s</h2>)*]
string_format - sprintfモディファイアと同じ
strip - 半角空白文字や改行・タブを任意の文字列に変換します。
strip_linefeeds - 改行コードを削除します。
strip_tags - remove_htmlモディファイアと同じ
trim - 文字列先頭と末尾の複数の空白/スペースを全て削除します。
trim_to - 最初の N 文字を取り出します。
upper_case - タグの値を大文字 (ABC...) にします。既存モディファイアstrtoupper・ucaseの別名として動作します。
wrap_text - 指定した文字数ごとに改行します。禁則処理を行なわないため日本語の文章を処理する場合は句読点の扱いなどに注意が必要です。
zero_pad - 移植を検討中です。
複数のモディファイアを数珠つなぎにできるため、組み合わせ次第で複雑な処理が可能ですが、あまり複雑になると分かりにくくなるため、場合によっては一連の処理をまとめてスニペット化するなど検討してください。
その他の新規PHxモディファイア
addBreakモディファイア - 改行を<br />タグに変換します。nl2brモディファイアと違い、<table>タグや<div>などブロック要素に対しては処理を行ないません。
<table><br />
<tr><td><br />
あいうえお<br />
かきくけこ<br />
</td></tr><br />
</table><br />
nl2brモディファイアの場合。無条件で<br />タグを追加します。
<table>
<tr><td>
あいうえお<br />
かきくけこ<br />
</td></tr>
</table>
addBreakモディファイアの場合。ブロック要素で閉じられた行には<br />タグを追加しません。
dataGridモディファイア - CSVデータまたはTSVデータ(タブ区切り)をtableタグによる表組みに変換します。エクセルからコピー・ペーストで貼り付けたデータはタブで区切られており、そのまま表組みを再現できます。
summaryモディファイア(別名smart_desc) - 文章の一部を切り出します。指定された文字数ちょうどで切り出すlimitモディファイアと違い、句点(。)を考慮した自然な切り出しを行ないます。
<!--@IF:[*description*]-->
<meta name="description" content="[*description*]">
<@ELSE>
<meta name="description" content="[*content:summary*]">
<@ENDIF-->
利用例
http://chibinowa.net/modx/features/modifier.html
その他、既存のモディファイアの使い方については上記サイトをご覧ください。
スニペットに対してmathモディファイアを使えるように改善
MODXは誕生してから19年が経過しました。
という文章を簡単なスニペットとmathモディファイアを使ってシンプルに自動生成したい場合。
return time();
UNIXタイムスタンプを返す上記のような簡単なスニペットを「Now」という名前で作ります。
[[Now:dateFormat(Y):math(?-2005):hanzen]]
上記のように記述すると、mathモディファイアのプレースホルダ文字である「?」のためにスニペットが意図どおりに動作しません。(※後日コアを改善する予定です)
[[Now:dateFormat(Y):math(%s-2005):hanzen]]
プレースホルダとして「%s」を使えるようにしました。
MODXは誕生してから[[Now:dateFormat(Y):math(%s-2005):hanzen]]年が経過しました。
PHxのフィルター処理を任意の文字列に対して直接適用できるようにしました
[+@test@example.com:spam_protect+]
上記のように記述すると、
<script>document.write('test@example.com');</script>
メールアドレス文字列をスパムロボットに検出されにくい書式に変換します。
[+@0123456789abcdefghijklmnopqrstuvwxyz:shuffle:limit(8)+]
パスワード候補などに使えるランダム文字列を生成します。
[+@'http://www.yahoo.co.jp':replace_to('<a href="{value}">{value}</a>')+]
コロン( : )を含む文字列の場合はクォート( ' " `)で囲みます。
<a href="http://www.yahoo.co.jp">http://www.yahoo.co.jp</a>
実際の出力
<table>
<tr><td>商品名</td><td>品番</td><td>備考</td></tr>
[+@商品A|aaa012345|あいうえお:replace(|,</td><td>):sprintf(<tr><td>%s</td></tr>)+]
[+@商品B|bbb012345|かきくけこ:replace(|,</td><td>):sprintf(<tr><td>%s</td></tr>)+]
[+@商品C|ccc012345|さしすせそ:replace(|,</td><td>):sprintf(<tr><td>%s</td></tr>)+]
</table>
<table>
<tr><td>商品名</td><td>品番</td><td>備考</td></tr>
<tr><td>商品A</td><td>aaa012345</td><td>あいうえお</td></tr>
<tr><td>商品B</td><td>bbb012345</td><td>かきくけこ</td></tr>
<tr><td>商品C</td><td>ccc012345</td><td>さしすせそ</td></tr>
</table>
実際の出力
従来は、PHxの機能自体を利用したい場合は、チャンクやテンプレート変数を作って、その中に値を保存する必要がありました。今回の改善により、PHxの機能を手軽に利用できるようになりました。
※ [+@文字列+]という書式は暫定的なものなので、将来変更する可能性があります。
※現在のところ文字列には : (コロン)を含むことができません。次バージョンで対応します。
[+@
いろはにほへと,ちりぬるを
わかよたれそ,つねならむ
うゐのおくやま,けふこえて
あさきゆめみし,ゑひもせす
:dataGrid+]
複数行記述にも対応します。
いろはにほへと | ちりぬるを |
わかよたれそ | つねならむ |
うゐのおくやま | けふこえて |
あさきゆめみし | ゑひもせす |
このように表示されます。
@IF文の書式を改善
1.0.13Jより試験的に実装していた@IF記法を改善しました。
<!--@IF:[*isfolder*]-->
[[Ditto?tpl=サブリソース一覧]]
<!--@ELSE-->
[*content*]
<!--@ENDIF-->
上記の従来の記法では、@IF文が書かれたテンプレートをファイル化しブラウザで開いてプレビューすると、判定の結果表示されるHTMLブロックがそのまま表示され、@ELSE句が書かれていると両方表示されるため問題がありました。
<!--@IF:[*isfolder*]>
[[Ditto?tpl=サブリソース一覧]]
<@ELSE>
[*content*]
<@ENDIF-->
新しい記法は上記のとおり。
<!--@IF:[*isfolder*]>
[[Ditto?tpl=サブリソース一覧]]
<@ELSE>
[*content*]
<@ENDIF-->
今回の記法改善により@IFから@ENDIFまで全てをHTMLコメント化できますので、DreamweaverやTinyMCEなどで編集する際にMODX独自の記述として干渉しません。
内蔵PHxにおいてthen-elseモディファイアの記述を省略可能に
isモディファイアなど判定系のモディファイアを利用する場合に、then-elseモディファイアの記述を省略できるようにしました。省略した場合、1または0の値を返します。
<!--@IF:[*pagetitle:find(new):then(1):else(0)*]>
【新着情報!】[*pagetitle*]
<@ENDIF-->
たとえば上記のような場合、
<!--@IF:[*pagetitle:find(new)*]>
【新着情報!】[*pagetitle*]
<@ENDIF-->
このように記述することができます。
<!--@IF:[*template:is(3)*]>
<h2 class="blog">[*pagetitle*]</h2>
<@ELSE>
<h2>[*pagetitle*]</h2>
<@ENDIF-->
テンプレートごとの出し分けをシンプルに記述できます。
MODXの@IF文は値の有無しか判定できませんが、PHxフィルターを利用することで、複雑な判定を行なうことができます。今回の改善によりthen-elseモディファイアを省略できるようになったため、フィルター記述をシンプルにすることができます。
@IF文は値の有無を判定する構文なので、ifemptyモディファイアやifnotemptyモディファイアを使う場合も @IF文に書き換えることができます。
MODXタグ文字列を表示できるようにしました
[<!---->*pagetitle*<!---->]
こう記述すると、文字列として [*pagetitle*] を表示できます。従来もこの方法で表示できましたが、<!---->という文字列がHTMLソースとして含まれるため、TinyMCEが動作している投稿画面上にコピー・ペーストするとMODXタグとして機能しないという問題があり、これを解決しました。
任意のリソースのデータを表示する方法を追加しました
[*pagetitle@8*]
上記のように記述すると、ID8のリソースのpagetitleを表示します。この記法は本家版MODX EvolutionのフォークプロダクトであるClipperCMSの記法に倣いました。
[*pagetitle@parent*]
親リソースのpagetitleを表示します。
[*pagetitle@ultimateParent*]
現在のリソースを子孫?に持つ最上位のリソースのpagetitleを表示します。
[*pagetitle@3/ultimateParent*]
現在のリソースを子孫に持ち、ID3のリソース階層以下に属する最上位のリソースのpagetitleを表示します。
[*pagetitle@ultimateparent*]
[*pagetitle@ULTIMATEPARENT*]
大文字小文字の違いを区別しません。
[*pagetitle@p*]
[*pagetitle@up*]
略記できます。それぞれparent・ultimateParentです。
[*pagetitle@site_start*]
あまり用途はないかもしれませんが、トップページのpagetitleを表示できます。
[*pagetitle:8*]
1.0.14J-r8で利用可能になった上記の記法も使えますが、この記法は内蔵PHx機能のIDモディファイアの略記なので、処理内容は異なります。
注意点
テンプレート変数編集画面内でのスニペットコール記述
1.0.14J-r8からテンプレート変数編集画面内のオプション欄などでスニペットコールを記述できるようにしましたが、スニペットコール文字列自体をそのまま値として保存したい場合に問題があることが分かったため、仕様を改めました。
@PARSE:
[[スニペットコール]]
または
@MODX:
[[スニペットコール]]
このように記述してください。(どちらも同じです)
テンプレート変数編集画面のオプション欄で動作させるタイプのスニペットとしてはddTreeなどがあります。これらのスニペットを使うには、従来は@EVAL制御下で$modx->runSnippet()を通じて呼び出す必要がありましたが、今回の改善により、スニペットコールをそのまま記述することで動作させることができるようになります。
@EVAL:
return $modx->runSnippet('ddTree',array('doc'=>8));
従来はこう書く必要がありましたが
@PARSE:
[[ddTree?doc=8]]
このように書くことができます。
@IF文の記法を変更
<!--@IF:[*richtext*]-->
[*content*]
<!--@ELSE-->
[*content:trim:addBreak*]
<!--@ENDIF-->
従来はこのように記述していました。
このテンプレートをファイル化してブラウザで開くと、[*content*]と[*content:addBreak*]の両方が表示されてしまいます。
<!--@IF:[*isfolder*]>
[*content*]
<@ELSE>
[*content:trim:addBreak*]
<@ENDIF-->
従来の記述も使えますが、今回よりこのように記述することをおすすめします。
ブラウザでプレビューできるようにする場合は、@IGNORE文を使ってダミーテキストを埋めておくとよいでしょう。
$modx->toDateFormat()関数の返り値を調整
$modx->toDateFormat()関数に対して0(ゼロ)を渡すと従来は1970/01/01を返していましたが、0 を返すようにしました。そのため0が返ることを想定していないコードにおいて意図しない結果になることがあります。
PHxモディファイアと同名のスニペットに注意
Revolutionと同様に、PHxのプリセットモディファイアの機能を同名のスニペットで置き換えられるようにしています。そのため、特に意識せず同名のスニペットを運用している場合は、モディファイア記述において誤動作が起きることがあります。
たとえば「date」というスニペットが存在する場合は[*editedon:date(Y年m月d日)*]などの記述は意図しない出力になることがあります。特定のモディファイアのみ動作が怪しい場合は、同名のスニペットがないか確認してください。
次リリースの予定
次の1.0.15Jでは下記のような変更を予定しています。
- 内部的なデータ構造及びデータ処理の変更を伴う改善
- Revolutionのフィルターモディファイアをいくつか移植(cssToHeadなど)
- UNIX系コマンドのsort・uniq・grepなどのようなモディファイアを追加
- $modx->documentObjectの構成を本家版と合わせる(alias_visibleを追加する)
- 下書き機能
- MySQLi対応(※MySQLは廃止)
- METAタグ管理機能を廃止
その他
気付いた点があればフォーラムまたは問い合わせフォームからフィードバックをお願いします。開発に参加して自ら機能追加・改善などを行なってみたい方もお気軽にご連絡ください。
http://mblo.info/modifiers/
上記に内蔵フィルターのチートシートがあります。全て動作確認済みとのことです。