MODX Evolution 1.0.16J をリリースしました
2016年8月31日 23時00分 shortlink:http://modx.jp/?id=1057
MODX Evolution 1.0.16Jをリリースしました。パーサまわりの改良が多く、スキルの高いMODXユーザには期待のアップデートといえます。
ダウンロード
https://modx.jp/download/download_evo.html
上記からダウンロードしてください。
アップデートの手順
https://modx.jp/docs/update.html
上記を参照してください。
変更内容
不具合修正
- Fix - 管理画面ツリーの並べ替えで更新日時ソートが効かない
http://forum.modx.jp/viewtopic.php?t=1683 - イベントログ中にHTMLタグが混入する
- イベントログ中の「 + 」の文字が消えるため修正
- テーマ設定が「旧タイプ」「フル」になっているとTinyMCEが起動しない
- TinyMCE - アラート「このページから移動しますか?」
http://forum.modx.jp/viewtopic.php?f=32&t=1680
TinyMCEのテーマ設定が「クリエイティブ」「ロジック」になっていると「このページから移動しますか?」アラートが表示される - Fix - グローバル設定内のupload_maxsizeの設定可能値が表示されない
- Fix - WebLoginスニペット
http://forum.modx.jp/viewtopic.php?p=8991#p8991
パスワードの再発行で送られてきたメールのURLをクリックしても新しいパスワードが有効にならない - インストーラ - 旧mysql対応
- Fatal error: Cannot redeclare class WFBC in ...
http://forum.modx.jp/viewtopic.php?t=1661 - Fix - $modx->regClientCSS()
http://forum.modx.jp/viewtopic.php?p=9035#p9035 - Fix DBAPI $watchError
- [(base_url)]の生成処理を修正
https://github.com/modxcms-jp/evolution-jp/issues/165 - 管理画面内のparseText処理を修正。[+content+]という文字列を含むと処理を誤る問題があった。
- URLからリソースID生成時、親リソースIDが取得できない時はサブリソースを参照しない。でたらめなディレクトリが親にある時に意図しないリソースと結びつくことがあるため。
- チルダ付きURLからbase_urlを取得できないため修正(Missing base_url と表示される)
- テンプレートの@FILEのネストの問題を修正
- リソース編集画面「次の作成」で$modx->documentObject['type']がウェブリンクになることがある
- Fix - $modx->get_static_pages()
http://forum.modx.jp/viewtopic.php?f=32&t=1658
http://modx.jp/blog/1016.html - 1.0.15Jから遅くなっていたタブ画面のレンダリングを高速化
- [*変数@1234/u*]の記法処理を修正(typoと/uスイッチ判定にpreg_match利用)
http://forum.modx.jp/viewtopic.php?f=32&t=1652 - ログイン名:safemodeが効かなくなっていたので修正
- Fix - $modx->getField()が正しく動作しない
- Fix - $modx->getDocumentChildren()
Administratorとしてログインしている時に管理画面でgetDocumentChildrenを実行するとエラーが発生
(ddTreeスニペットを管理画面カスタマイズのために使用する場合など)
SELECT DISTINCT sc.* FROM modx_site_content sc LEFT JOIN
modx_document_groups dg on dg.document=sc.id
WHERE sc.parent='740' AND sc.published=1 AND sc.deleted=0 AND ( OR
dg.document_group IN (5,8))
GROUP BY sc.id
ORDER BY menuindex ASC - Fix - $modx->regClientStartupScript()
http://forum.modx.jp/viewtopic.php?f=32&t=1641
第2引数は省略してよい仕様だが、省略するとエラーになってしまう - Fix - eform @15fe4f6
- いくつかのモジュールが動作しないため修正
- CDATAセクションの終端付近で誤動作を起こすため修正
<![CDATA[ xxxxx ]]> - 一部の管理画面操作アクションが管理操作ログを残さないため修正
- 管理画面ダッシュボードの描写がもたつくため調整
- Fix - String Formatterプロセッサが動作しない
http://forum.modx.jp/viewtopic.php?f=32&t=1640 - Fix - $modx->use_alias_path=0
http://forum.modx.jp/viewtopic.php?f=32&t=1639 - Fix - $modx->getLoginUserID()
- globe.gif を globe.pngに変更
- MM - mm_widget_colors()が動作しない
古いIEをサポート対象外とする - Pluginの実行がネストした時に$modx->event->nameが空白になる問題の修正。
- 外部サイトをWebリンクに設定していた際にプレビューが動作しない問題を修正。
$modx->directParseが1になっていると内部展開で完了するため、外部サイトのコンテンツを自ドメインで展開してしまう。
一応プレビューの時のみ$modx->directParseを強制的に0にセット - Webリンクが絡むプレビュー、下書きプレビューが正常に動作しない問題を修正
Webリンク設定のリソースの下書きをWebページにした場合、Webリンクにてリンク先を変更した場合に正しくプレビューされなかった問題を修正。 - 新規インストール時に画像をアップロードできない
新規インストール時の「アップロードサイズの上限」のデフォルト値が空白になるため。upload_maxsizeが空の場合の応急処置として、とりあえず5000000をセット - プレビューが正常に行えない問題を修正
gotosaveが未定義状態の時にプレビュー時のPOSTが発生しない。
例えばTinyMCEでHTMLを直接編集後にプレビューをクリックするとgotosaveが未定義となる - DocManagerでメニュー整列ができない
http://forum.modx.jp/viewtopic.php?f=32&t=1625 - Fix - 下書き無効の場合はメニューを表示しないようにする
- cfFormDBが動作しないため修正
http://mblo.info/article/modx-15j.html - 投稿画面でCall undefined propertyエラーが発生するため修正
新機能・新仕様
- @IF構文に <@ELSEIF: > を追加
- @INCLUDE ($modx->atBindInclude())
テンプレート編集画面の一行目に記述する - Wayfinder - &lastRowTplパラメータ
&rowTplLastと全く同じ動作(本家版との互換性のため) - Wayfinder - &outerLevelパラメータ
- Wayfinder - &useReferencedパラメータ
- TopicPath - &theme=microdata
- TopicPath - &theme=bootstrap
- $modx->db->getLastErrorNo()
- $modx->documentObject['alias_visible'] - 本家版で利用されるフィールド。日本語版では今のところ積極的に用いる予定はない
- {{@FILE:chunk-file-path.txt}}
テキストファイルの内容をチャンクとして読み込めるようにする(※仕様を変更する可能性あり) - データをファイルに保存する $modx->saveToFile() メソッド追加。
一時ファイルに書き込み後にリネームで保存。
ファイル書き込み中の max_execution_time 経過によるファイル破壊を防ぐ。
APIとしては非推奨。将来的には別途専用のクラス化やstatic化も検討。 - Bootstrapテンプレート(※サンプルです。実用はあまり考慮していません)
- プラグインをインストールする際に有効無効をできるようにする
@internal @disabled 1
プラグインインストールファイルに上記のように記述すると、無効状態でインストールできる - New - $modx->config['tree_pane_open_default']
管理画面のリソースツリーペインをデフォルトで開いておくかどうか
新しいモディファイア
- :jsToBottom
- :jsToHead
- :htmlToBottom
- :htmlToHead
- :cssToHead
- :sort, :rsort - 複数行テキスト・カンマ句切りテキストなどを並べ替える
- :strtotime
- :calc (:mathモディファイアの別名)
- :isgte, :islte
- :fullurl
- :takeval
- :default - :_defaultモディファイア・:ifemptyモディファイアの別名
- :raw - プロセッサを通さないテンプレート変数の生の値を取得する。テンプレート変数のみで有効な特殊なモディファイア
モディファイアの修正
- :getImageモディファイア
<img src="xxx.jpg"> - 認識できる
<img style="xxx:zzz" src="xxx.jpg"> - 認識できない
img要素の最初の属性がsrc属性以外の場合に認識できないため修正 - :wordwrapモディファイアをPHP7対応
http://forum.modx.jp/viewtopic.php?p=8991#p8991
preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead というエラーになるため - :summaryモディファイア
文字列を取得できないことがあるため修正 - 値が空でも処理を抜けないモディファイアの動作がいくつかおかしいため修正
- :isgt・:isltモディファイアが:gte・:lteモディファイアと同じ処理になっていたため修正
- :_defaultモディファイアが動作しないため修正
アップデート
- jQuery をv3.1.0にアップデート
- Wayfinder を v2.1にアップデート
- QuickManager同梱のColorboxを v1.6.4にアップデート
改善
- 条件判定系モディファイアの処理を改善。
then・elseを省略した場合は then=1, else=0 を返す。 - $_GET['q']をPHPレベルでも自由に使えるようにした
- イベントログでスニペットコール取得
- $modx->debug=trueの際のinvokeEvent情報取得(通過したシステムイベントが分かる)
- ベンチマーク処理でmemory_get_peak_usage()関数を使う
- Refactor - $modx->parseDocumentSource() 処理を単純化
- Wayfinder - デバッグ情報の表示(&debug)を改善
- Wayfinder - ログイン時のみデバッグ情報を表示
- Wayfinder - 古いサンプルを削除
- Wayfinder - プレースホルダでモディファイアを使えるようにする
- Fix - Wayfinderのサンプルconfig
- datetimeプロセッサ - date関数・strftime関数どちらの書式も使えるようにする
- @IF文の書式を改善
- Refactor - mysql_select_db()
- Refactor - sql_fetch_assoc
- Refactor - installer fetch_assoc
- MODXの実際のバージョンを扱うように変更
$modx_versionはコア構成ファイルのバージョンを示すものだが、MODXは全体としてはファイルとDBで構成され、そのバージョンは$settings_version
($modx->config['settings_version'])で示される。正しくアップデートすれば両者は同一になる。 - トップメニューの高さを狭める(画面を少しでも広く使えるように)
- デートピッカー多言語対応
- デートピッカーの実装を整理
システムイベントでプラグインを使って差し替えられるようにした - 投稿画面などの更新ボタンをクリックした時にアクションボタンを非表示にする
- スニペットコールのパラメータの与え方を改善
- Wayfinder - bootstrap-navbarコンフィグを追加(※サンプルテンプレート参考)
- Ditto - &debugにおけるcreatedonの表示を改善
- <!--[if lte IE 6]> などIE6用の記述を削除
- テンプレート編集画面で[*#content*]を使えるようにする
- DB構造のアップグレード処理をインストーラ内から本体側に移動。managerフォルダのみをサーバに上書きして管理画面にログインすれば、自動的にコアのアップデートを行なうようにした。
- Refactor - $modx->db->importSql()
- サンプルコンテンツの [*alias_visible*] 対応
- アップデートスクリプトを整理
- モディファイア複数行記述対応
- mysql - strictモードでの動作を許容する
http://ewigleere.lv9.org/cms/cms_entry/201606/20160617_1.html - file_put_contents()を$modx->saveToFile()に差し替え
- 「リソースの詳細」にmenutitleを表示
- 管理画面内の等幅フォントをConsolasフォントに変更
- $modx->functionCache
- DocFinderモジュールで $modx->chunkieCache is undefined property というエラーが表示されるため、本体側で対応
- Fix - $_SERVER['HTTP_X_REMOTE_ADDR']
sourceforge.netのプロジェクトWebサーバに設置するとIPアドレスが全て127.0.0.1としてトラッキングされるため修正 - 管理操作ログの検索フォームを調整
- ローカルの$_SERVER['REMOTE_ADDR'] が「::1」の場合は127.0.0.1に変換にする
- サンプルテンプレートの 2016 を[[$_SERVER['REQUEST_TIME']:date(Y)]]に変更
- 本家版ファイルブラウザとの互換性
- テーブル初期化時に外部キー制約を無視する
@a5d63f5
https://github.com/modxcms/evolution/issues/440 - makeUrl()にウェブリンク先を展開しない第5引数(ignoreReference)を追加。
makeUrl()は対象リソースがWebリンクだった場合、Webリンク先のURLを返す。
$ignoreReferenceをtrueにした場合はWebリンク先のURLを返さずに自分自身のURLを返す。
なお、デフォルトはfalse。
変更
- 管理画面リソースツリー上のウェブリンクのアイコン表示を変更
- プレフィックス「phx:」を持たないチャンク名はカスタムモディファイアとして使えないようにした
- 古いmootools(v1.1)に依存していたデートピッカーをAir Datepickerに変更
- $modx->db->connect()の引数の順番を変更
データベース名が2番目だと覚えにくいため - $modx->splitTVCommand() 関数名変更 (旧$modx->ParseCommand() )
- E_USER_DEPRECATEDエラーを解釈できないPHP5.3以前の環境に対する修正
- 1.0.6Jで削除したmoodx.jsを読み込む記述がDocManagerに残っていたため修正
- nanobarを廃止(かえって重く感じられるため)
トピックス
テンプレートをファイルで管理できる @INCLUDE (アット・インクルード)
@INCLUDE:assets/templates/mydesign/mytemplate.inc.php
テンプレート編集画面の一行目に、上記のように記述します。
<?php
switch($modx->documentObject['id']) {
case: $modx->config['site_start']:
return file_get_contents('assets/templates/mydesign/top.html');
default:
return file_get_contents('assets/templates/mydesign/page.html');
}
mytemplate.inc.php には上記のように記述します。こうすると、ひとつのテンプレートで複数のテンプレートを管理することができます。上記の例では、トップページとそれ以外のページとでテンプレートを分けています。
@INCLUDE:mydesign/mytemplate.inc.php
ファイルをassets/templates/ フォルダに置いている場合は上記のように省略できます。
従来もスニペットを利用して同様のことができていましたが、その場合、スニペット機構の制約を受けます。今回はネイティブ実装なので負荷が軽く、MODXのグローバル設定をテンプレート読み込み時に動的に書き換える(たとえばテンプレートごとにキャッシュのオンオフを切り換えるなど)といったことも可能です。
条件判定系モディファイアの記述をシンプル化
:is・:isnot・:isgt・:is_imageなど条件判定系モディファイアにおいて、then・elseを省略した場合はそれぞれ then=1, else=0 を返すようになりました。
<@IF:[*id:is(1):then(1):else(0)*]>
Top-Page
<@ELSE>
Other-Page
<@ENDIF>
これまでは上記のように書く必要がありましたが、
(※上記の例では@IF文の記法が新しくなっています。詳しくは後述)
<@IF:[*id:is(1)*]>
Top-Page
<@ELSE>
Other-Page
<@ENDIF>
上記のように省略できます。
@IF文の書式をシンプル化
<@IF:[*id:is(1)*]>
Top-Page
<@ELSE>
Other-Page
<@ENDIF>
▲新しい書き方
<!--@IF:[*id:is(1)*]>
Top-Page
<@ELSE>
Other-Page
<@ENDIF-->
▲従来の書き方。この書き方でも動作します。全体がHTMLコメントとなっていますので、工夫すればHTMLコーディング担当者とのコラボレーションに向いています。
@IF構文で @ELSEIF が使えるようになりました
<@IF:[*id:is(1)*]>
トップページ
<@ELSEIF:[*id:is(5)*]>
新着記事一覧のページ
<@ELSE>
その他のページ
<@ENDIF>
上記のように記述できます。
Wayfinderのテンプレートでモディファイアを使えるようになりました
<li><a href="[+url+]">[+menutitle:zenhan+]</a>[+wf.wrapper+]</li>
モディファイアを使って出力をコントロールできます。上記の例では、ナビゲーション文字列に含まれる全角英数字を半角に変換します。(※[+url+]は[+wf.link+]と同じです)
スニペットコールのパラメータの与え方
[[スニペット名 &p1=v1 &p2=v2]]
上記のように、スニペット名とパラメータ部の区切りに半角スペースを使えるようにしました。従来どおり「 ? 」を使うこともできます。
※スニペット名・チャンク名に半角スペースを使うケースを報告いただいたので、この改修は取り消しました。
[[スニペット名? &p1 &p2]]
パラメータは「&パラメータ名=値」の形で与えますが、与えたい値が「1」である場合に限って、上記のように値の記述を省略できるようにしました。
[[Ditto? &randomize &debug]]
たとえば Ditto の &randomizeパラメータ・&debugパラメータなどのように、「セットできる値が0か1のどちらかで、デフォルト値が0のパラメータ」をこの書き方で記述すると、スニペットコールをすっきりさせることができます。
[[Ditto? &randomize=1 &debug=1]]
このように書くのと同じです。
モディファイアを複数行に渡って記述できるようになりました
[*id
:is(1)
:then(Top)
:else(Other)
*]
上記のように記述できます。
今後のリリースについて
これまではバージョン表記を1.0.**J-r*としていましたが、今回より1.0.**Jとします。次にリリースするのは1.0.17Jということになります。
その他
気付いた点があればフォーラムまたは問い合わせフォームからフィードバックをお願いします。開発に参加して自ら機能追加・改善などを行なってみたい方もお気軽にご連絡ください。