Concrete5.6.x以下でサイト内リンクが貼れないトラブルを解決

1年ぶりくらいにConcrete5を触りました。
今回触ったのは5.6.xバージョンの最終形態「concrete5.6.3.4.ja」で、さくらインターネットにインストールしました。

バージョンアップしたら記事編集ブロックでリンクを貼れなくなってしまって、修正を試みましたが出来ず、魂が燃え尽き、依頼案件でもなかったので放置していたのです。
でもやっと謎だったエラー原因が特定出来ました。

今回困っていた不具合の内容は、「Concrete5の5.6.xバージョンにアップグレードしたり新規インストールした時に、記事ブロックでリンクが貼れなくなる」というものです。
これは不便です。


バグ取りは考えられる原因を検証し、ひとつひとつ潰していく地味な作業・・・

ブラウザーのせいかしら!?

GoogleChrome、Firefox、IE・・・
さまざまにブラウザーや各バージョンを変えても無駄でした。

さくらインターネットのせいかしら!?

php、データベース、何か関係しそうなデータを洗いざらい見てみましたが無関係そうでした。

バージョンアップしたせいかしら!?

これまで何度もバージョンアップを繰り返したサイトでしたので、これが原因かもしれないと考え、新規インストールする事にしました。だめでした。

JavaScriptのエラーかな?

ブラウザーもサーバーもバージョンアップも関係ないとしたらJavaScriptのエラーかな?
でもこれは一番考えられない事でした。

コアファイルは触っていないし、変な改変も加える前の新規インストール状態でおかしいんですもの。
テーマもデフォルトテーマなのにダメです。
私が作ったオリジナルテーマだからダメという訳ではない。
なのでJavaScriptのエラーを疑う事は盲点でした。長らく考えつきもしませんでした。

そこで、Chromeの検証ツールを表示したままリンクを貼る操作をしてみた所、サイトマップの画面でページタイトルをクリックすると「Uncaught ReferenceError: CCM_BASE_URL is not defined」というエラーを吐きました。
お前か!

でもこれ、1年前にも見たエラーですよ。覚えてる。
色々検索したけど「IEのせい」という結果以外を見つける事が出来なかったのです。

Concrete5のフォーラムを久しぶりに覗きますが、やはりうまく記事を探す事が出来なかったので、英語の方を探してみたらこちらのページに行きあたりました。

【concrete5の本家サイト】
https://www.concrete5.org/developers/bugs/5-5-2/cannot-insert-link-to-page-when-editing-content/

原因があっさり判明!

オーバーライドしていた「header_required.php」が原因でした。

上記URLの質問者さんも私と同じエラーメッセージが出てリンクが貼れないと嘆いている様子。
それに対する回答がたぶん「header_requiredをオーバーライドしていますが、それがなんたらかんたらでこうだよ~」と書いてありました。

なるほど、原因はそれか!
英語が読めないので詳細はあいまいですが、確かに古いバージョンから引き継いだheader_required.phpを使ってオーバーライドしていたので、それを消して現バージョンと同じファイルをコピーし、作り直しましたら直りました。

そうか、原因はブラウザーでもバージョンアップでもサーバーの癖でもなんでもなく、私だったんだ…。

よくよく考えたらバージョンアップでコアファイルが一新されるんだからオーバーライド分も更新しなければいけないとか当たり前じゃないですか。あーあ。

まとめ

「concrete/elements/header_required.php」を
「/elements/header_required.php」にコピーして編集を加える事をオーバーライドといいます。

コアファイルを書き換える事なく改変を加える事ができます。
ソファーにソファーカバーかけて見た目を変える様な感じでしょうか。
カバーを取れば元に戻ります。ソファー本体に傷が付きません。

これを使って<header></header>に改変を加えるんですけど、バージョンが変わったら新しいバージョンのものと差替えなければいけません。
ずるして古いのコピーしてバチがあたりました。楽をしようとしてはいけません。
勉強になりました。

英語読める人はもっと詳しい情報がザクザク得られるんだろうなぁ。
お金があれば勉強したいなぁ。

コメントを残す