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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です