joomla」カテゴリーアーカイブ

joomlaでpreタグ内の改行がbrタグに自動的にに変換されてしまう件について

joomlaでeditorにJCEを使用し、記事にコードをのせるためにsyntax highlighterを使ったときに、せっかくコードをきれいに保存してくれるのにタイトルのような余計な機能のせいで、見苦しくなってしまう。こういった「余計な機能」はセキュリティーやユーザビリティの観点から「妥当な機能」なのだろうが、やっぱり柔軟性にかける。このような記事に対するユーザーへの制限はjoomlaに限らないが、javascriptがかけなかったり、tableがかけなかったりするのはつらい。。

今回はjoomlaのpreタグ内の改行がbrタグに変換されてしまうのを回避すべく、まさぐってみた。
ただし。コードを把握しているわけでなく、適当にいじったら出来たというメモ程度のものなので、まねしないほうがいいかもしれません。

/plugins/editors/jce/tiny_mce/tini_mce.jsを編集
1:「j=j.replace(/\r?\n|\r/g,” “);」の一文を削除(これをやるとpreタグに限らず全部のタグに改行が可能になる。)
2:「{pattern:/(<pre[^>]*>)(.*?)(<\/pre>)/g,encode:1},」の一文を削除(これをやるとpreタグ内の改行がbrタグに変換されなくなる。)

上記の方法では結局保存したときに元に戻ってしまう模様。コードと数時間格闘したが、結局わからずじまい。。。

途方にくれていたとき、ハッと発想の転換が。

「そうだ。Syntax Highlighter側でbrタグを改行であると認識させちゃえばいいんじゃね?」

というわけで、またまた力技だが
plugins/content/syntaxhighlighter/core/shCore.js を編集するのですが、
plugins/content/syntaxhighlighter/src/shCore.jsが元のファイルのようなので
予め、plugins/content/syntaxhighlighter/core/shCore.jsをそのファイルで上書きます。
そして、plugins/content/syntaxhighlighter/core/shCore.js を編集。

1081行目あたりにある for(var i = 0; i < elements.length; i++) というループの中で、
elements[i]がtargetという変数に代入される前に下記の2行を加えてelements[i]の内容を書き換えます。

elements[i].innerHTML = elements[i].innerHTML.replace(/\<br*\>/g,”\n”);
elements[i].innerHTML = elements[i].innerHTML.replace(/\<*code*\>/g,””);

2行目はjoomlaで編集してるとpreタグの中に入ってくるcodeタグもついでに消しています。

これでとりあえず解決(?)です。