MODX Revolution (MODX 2.x) のアップデート手順

MODX Revolution (MODX 2.x) のアップデート手順は至ってシンプルです。

  1. バックアップ:phpmyadmin等を使ってDBのバックアップとFTPなどを使ってサーバ上のファイル類丸ごとバックアップします。
  2. 新しいバージョンのファイルで上書き:FTPなどを使って予めダウンロードしていた新しいバージョンのmodx 2.x のファイルを展開しFTPで上書きします。
    そののちブラウザでsetupページ

    http://ドメイン/setup

    にアクセスし、アップグレード作業を進めます。(この時すでにmodxがインストール済みの場合は自動的にアップデート関連のチェックが入って「次へ」のボタンを押すだけでアップデートが完了します。)
    その際注意が必要なのは2.2.x のバージョンから2.3.x、2.4.x、2.5.xなどそれ以上のバージョンにアップデートする際、2.2.0以降ででDBのフィールドが6つほど追加になっており、2.3.0、2.4.0、2.5.0のように各バージョンの最後が「.0」で終わるものでDBのフィールドが変更になっていることがほとんどの為

    2.2.x2.3.02.4.02.5.0

    のように段階的にバージョンアップする様にします。

  3. 念のため「キャッシュをクリア」のメニューでキャッシュをクリアし、各所動作確認を行います。
    この際Modx自体がフロントにAjaxを多用しているためブラウザ側のキャッシュもクリアしないとpackagemanager(パッケージマネージャー)が動かなくなったりします。

    もしキャッシュをクリアしてもうまく動かない場合は「エラーログ」メニューからエラーログを確認し、エラーがある場合は適時修正を行います。

以上バックアップ以外は基本的にFTPでファイルを上書きするだけなので問題が起こらなければ3~5分程度で完了する工程です。

 

modxロゴ

MODX Revolution のTinyMCEのリンク挿入でエラー

MODX Revolution のTinyMCEのリンク挿入機能でエラーが発生

そもそもMODX EvolutionのTinyMCEのリンク編集画面では
プルダウンメニューでちゃんとリソースの一覧が表示されていたのですが
Revolutionではそんなことができなかったので、リソース一覧からドラッグしたりしていたのですが
(これでもリッチエディタではくテキストで編集しているときはリソース番号を[[~5]]のような感じで挿入できるからすごい^^)
どうにもならなくて再度リンク編集画面を開いたらエラー
どうやら
「/インストールディレクトリ/config.core.php」
が見つからないらしい・・

でも本当は
「/インストールディレクトリ/manager/config.core.php」
にあったりするので該当するファイルの中身をうちの環境のパスで書き換えてみた
書き換えるのは

/インストールディレクトリ/assets/components/tinymce/jscripts/tiny_mce/plugins/modxlink/link.php
の5行目あたり

/インストールディレクトリ/assets/components/tinymce/jscripts/tiny_mce/plugins/modxlink/search.php
の7行目あたり

require_once dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))))).'/config.core.php';

みたいな記述があるので

require_once dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))))).'/manager/config.core.php';

みたいに「manager」ディレクトリの中を探してもらうように変更
でもこんなに「dirname」で括ってあるとわかりにくいなぁ;

でもこの二つの修正すると
いままでプルダウンでダーッとリソースの一覧が表示されていたものが
リソース名で検索してリンクを挿入できたりして結構便利なってましたね^^

modxロゴ

MODX Revolution Dittoのテンプレートタグの書き方で引っかかる

MODX Revolution だとプレイスフォルダが[+placeholder+] から [[+placeholder]] に代わってたり、リンクを[~5~]とかリソースidを使うときに[[~5]]に代わってたりします。

詳しくは新旧MODXタグの一覧を
http://rtfm.modx.com//display/revolution20/Tag+Syntax

でDittoでテンプレートをチャンクで作ってる時に

<li><a href="[+id+]">[+title+]</a></li>

みたいに書いてたのですが、リンクのほうがうまく動かなかったので

<li><a href="[[~[[+id]]]]">[[+title]]</a></li>

みたいに [[+id]] で一度リソースidを展開してそれをさらに[[~展開された番号]]でリンクとして適用してOKでした。

modxロゴ

MODX Evolution で外部のRSSを読み込んで表示する。

MODX Evolution で外部のRSSを読み込んで表示する場合、「piex」(http://www.petit-power.com/modx/piex-ver-0-7/)が有名みたいですがインストールに別途ライブラリが必要だったりとちょっとだけ面倒。

なので「NewsParserX」(http://modx.com/extras/package/newsparserx)を使ってみました。

インストール方法は http://modx.com/extras/package/newsparserx からダウンロードしたファイルを解凍し、「NewsParserX.snippet.txt」の中身ををmodxで新規スニペットととして登録し(今回はスニペット名を「NewsParserX」として登録)、「newsparserx.inc.php」の方は

/assets/snippets/newsparserx

ディレクトリにアップするのみ。
超簡単です。

外部RSSを表示したいリソースを開いて

[[NewsParserX? &url=`外部RSSのURL`]]

として保存します。
このまんまだと記事の件名のみのリストになりますので
記事の本文そのまま表示したい場合は

[[NewsParserX? &url=`外部RSSのURL` &descr=`true`]]

のように desc パラメータをTrueに設定してコールします。
そのほかのパラメータも「limit」(たぶん表示件数)「image」なんてのもありますので必要があれば設定してみると良いかもです。

ただ何分読み込んでいるRSSがアメブロなのでCMが途中にはさまれてしまいちょいと困る。

modxロゴ

modx revo で同一ページにリンクする(Base URL Same-Page-Link Fix 改造)

久々にModxの話なんですけど。

うちのサイトもModx Revoサで動かしてたんですが、ver2.07とかそれくらいのバージョンから急にパッケージインストーラーが使えなくなって、アップデートしようにも上書きアップデートが出来なかったんです。
(テーブルのカラムとかが違うとか言われて;たぶんなんかのプラグインがDB書き換えたのか?;)

なのでサーバー変えたのをきっかけに2.0.7-plから2.2.4-plにアップデートしてみました。

アップデートと言っても中身は新規インストールでして、ダンプしたデータベースのSQLを現行のテーブルにあわせて書き換え、必要な部分だけリストア(コンテンツとテンプレート&チャンクとかプラグインの類は入れなおし)し、どうにか元に戻ったんですが、アンカーにリンク <a href=”#hoge”> とかが効かなくなってるんですよ。

もともと「Base URL Same-Page-Link Fix 」(http://modx.com/extras/package/baseurlsamepagelinkfix)を入れていて以前のmodxであれば問題なく動いてたんですけど、バージョン挙げたら急に効かなくなったんです。

そういえば別の案件でも同じようなことがあって、その時はそんなにアンカー使うこともなく

<a href=”[[*alias]].html#hoge”>hoge</a>

とかで切り抜けたんですけどやっぱり非生産的ですのでプラグインで何とかしたいと思ったわけです。

んで、Base URL Same-Page-Link Fixのソースを見てみていろいろと弄ってみたのですが、どうやらリソースの内容自体が取得できてなくて、さらに出力もされてなさげだったんですね。

Revoのプラグインとかでリソースの内容を丸ごと取得するのが以前は

$source = &$modx->documentOutput;

とかで出来ていたらしいんですが
(上記の場合$modx->documentOutputでコンテンツを取得し$sourceに代入)
どうやらこれが効いてないらしいのです。

なので上記の部分を

$source =$modx->resource->_output;

に置き換えてしまいます。
(modxのフォーラムでこんな記事を見つけました。「OnWebPagePrerender no longer modifies document output」)

あとはプラグインに書かれているようにリンク要素をstr_replace関数で置き換えることが出来ます。

最後にプラグインの一番最後に

$modx->resource->_output=$source;

として置き換えた内容($source)を $modx->resource->_output に戻してあげることで出力が完了です!