久々に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 に戻してあげることで出力が完了です!
コメント