カスタムツール&情報 on Geeklog

Valid CSS! Valid XHTML 1.1! 木谷 公哉(KITANI Kimiya)

はじめに
Geeklog 1.4.1日本語版 2008/07/23版をベースにしています(2008.07.30現在. 各バージョン情報)。それに加えて、1.5.2sr4 (2010.03.26)の情報も追加しだしました。
作成したものは、Geeklog Japanの掲示板に載せたりしています。これらは、2008年前半期に公開予定のポータルで実利用しています。まだデータ入力しながら、管理面・表示面でなんとかしたい部分をハックしてうまくいったものだけ、ハック部分をこことGeeklog Japanの掲示板に載せているという感じです。
作成した経緯は、多言語化がまだ完全ではなかったので、無いものは作ろうということで始めました。とはいえあるものからのカスタマイズが出来るかどうか判断した上で、できるのならそういう形態にしています。
なおテスト環境は、まだ非公開のローカルサイト(でも実運用)で行っています。
お知らせ
URL変更をするためには on Geeklog 1.5専用 - 特殊編(2010.03.26)
1.5から、URL情報がデータベースの方に書き込まれるようになりました。その結果、URL変更をするとデータベースそのものを触る必要が出てきます。それだけでなく、***_conf_valuesテーブルについては、「s:数字:データ」とデータに対する長さを数字で厳格に設定しているため、ここも変更が必要です。なれていないなら、phpmyadminから編集するといいでしょう。
さてこのような汎用的なやり方は、Geeklog1.5でドメイン等を移行する場合を参照すれば十分でしょう。ここでは、もっと手軽にできる退避策のみ紹介します。
  • URLの長さを同一にする
  • 非公開領域、公開領域のフォルダ構成を同一にする
この条件が満たされるなら、移行は非常に簡単です。
  • hogehoge.sample.jp → hogehog.sample.com
  • hogehoge.sample.jp → hoge.sample.com/hoge
  • www.hogege.sample.jp → www-hogege.sample.jp
などの組み合わせもできるでしょう。移行方法は次の通り
  1. 「mysqldump -u ユーザ名 -p パスワード --default-character-set=binary データベース名 > backup.sql」
    これでデータベースからデータのバックアップをとります。
  2. 「sed 's/hogehoge.sample.jp/hoge.sample.com\/hoge/g' backup.sql | mysql -u ユーザ名 -p パスワード --default-character-set=binary データベース名」
    で置換した上で、データベースに入れましょう。スラッシュがある場合にはその直前にバック種ラッシュを入れてください。
  3. 非公開領域のconfig.inc.phpのサイトURLのみ変更します
これで終わります。他のサーバの文字コードが異なる(いままでEUC-JP(ujis)で、UTF-8に変換する場合)には、「nkf -w backup.sql > backup-utf8.sql」としてからsedをすればいいでしょう
問い合わせフォームがいつのまにかエラーで動かない(2010.03.26)
Geeklog 1.5.2を使っているなら、原因は送信メールの文字コード変換プログラムの問題だと思います(UTF-8 --> ISO-2022-JP変換)。http://wiki.geeklog.jp/index.php/CUSTOM_mailの4つの対処をすべてすることで解決できるでしょう。 関連リンクはこちらから
ツール集
  • 2008/02/01: 多言語表示・管理ハック集0.1.0.zip:
    md5: b7d1f8dc6c576080053201601cd1ab79
    Geeklog Japanのダウンロードのアドオンにアップしたものも、このmd5と同一です。
  • 2010/03/04: check_php_gumblar.csh (ダウンロード, ウェブで表示)
    md5: e79be0330f451b9867cd5551346d7e41
    http://ow.ly/1cHU2の情報を見て、対策を考えねばということで、PHPプログラムを使っているCMSのチェックが簡単にできるようなCSHスクリプトを作ってみました。
    チェックに引っかかる(base64_decode ( eval ))な感じで、base64_decodeが見つかった行にevalがあったら、メールで通知する。なければ何もしないというものです。
    スクリプト自体は、たいしたことはしてません。Folders配列に入ったフォルダを
    grep -rnsH フォルダ/* |grep 'eval'
    して、見つかったらメールで通知するものです。ダウンロードしたCSHスクリプトを開いて、下記を変更してください。
    grepのオプション[-H]でヒットしたファイル名を、[-n]でその行番号が、[-s]でマッチしなかったときのエラー抑制、[-r]がサブディレクトリもチェックです。
    Foldersチェック対象のフォルダを指定。サブフォルダも自動でチェックします。複数指定可能です。公開領域や非公開領域などなどいくつも指定できます
    ICONViconvがあれば、iconvのパスを書いて下さい。件名など日本語が使えるようになるでしょう。存在しないあるいは間違っていたら無視されます
    ENCODE_FROMもしiconvを使うなら、このスクリプトの文字エンコードを指定して下さい。現時点ではUTF8になっています。
    ENCODE_TOメールを送る際の文字コードを指定して下さい。
    日本語ならばISO-2022-JPが一般的です
    SENDMAILsendmailコマンドのパスを書いて下さい。無ければエラー出て終了します。通常は、/usr/sbin/sendmailあるいは/usr/lib/sendmailあたりにあるでしょう
    MAIL_TO通知を送るメールアドレスを書いて下さい。複数の場合には、
    "Address1, Address2"
    のように書いて下さい
    MAIL_FROM差出人のメールアドレスを書いて下さい。システムのアドレスあたりを入れるのが一般的でしょうが、自分のメールアドレスでもいいかもしれません
    SUBJECT件名を入れて下さい。iconvが正しく指定されていれば、日本語をいれても結構です。分かりやすいものにしましょう
  • 2010/03/05: check_php_gumblar-win.csh (ダウンロード, ウェブで表示)
    md5: 05d39a04140d8d333f6851ddd8c85c6b
    Windowsで動作するようにCygwin対応にしました。Windowsを使う場合には、こちらを使って下さい。
    まずCygwinをダウンロードし、ネットインストールを選択して、Shellのtcsh, Mailのemail, LibsのlibiconfのSkipをクリックして、チェックを入れてインストールしましょう。忘れてインストールしたら上書きインストールしてください。
    ※MacOSXに入れたいなら、Emailからソース(Tar/GZ)をダウン>ロードして解凍し、ターミナルから./configure; make; sudo make installで/usr/local/bin/emailに入ります。まぁXcode入れとかないといけませんけどね。
    ※検証:MacOSX (Snow Leopard), WinXP on Parallels Desktopn 5 (Snow Leopard)
    ※うまくいったら、cronで定期実行させたいはず。それについてはcygwin で cron を使うのサイトを参考にされたら分かるかなと思います。
    必要な設定について説明します。
    Foldersチェック対象のフォルダを指定。サブフォルダも自動でチェックします。複数指定可能です。公開領域や非公開領域などなどいくつも指定できます。WindowsのCドライブは、c://と記載します。
    ICONViconvがあれば、iconvのパスを書いて下さい。件名など日本語が使えるようになるでしょう。存在しないあるいは間違っていたら無視されます
    ENCODE_FROMもしiconvを使うなら、このスクリプトの文字エンコードを指定して下さい。現時点ではUTF-8になっています。(Cygwin上のiconvはUTF8が指定できないので
    ENCODE_TOメールを送る際の文字コードを指定して下さい。
    日本語ならばISO-2022-JPが一般的です
    SENDMAILsendmailコマンドのパスを書いて下さい。無ければエラー出て終了します。通常は、/usr/sbin/sendmailあるいは/usr/lib/sendmailあたりにあるでしょう
    MAIL_TO通知を送るメールアドレスを書いて下さい。複数の場合には、
    "Address1, Address2"
    のように書いて下さい
    MAIL_FROM差出人のメールアドレスを書いて下さい。システムのアドレスあたりを入れるのが一般的でしょうが、自分のメールアドレスでもいいかもしれません
    SUBJECT件名を入れて下さい。iconvが正しく指定されていれば、日本語をいれても結構です。分かりやすいものにしましょう
    SENDER_NAME差出人の名前を入れましょう。入れないと適当なものが入ってしまいます
    SMTP_SERVERSMTP(送信)サーバを入れましょう
    SMTP_PORTまぁ大体ローカルだったら25でしょう。どうしても他のSMTPサーバが必要なら587を指定して、Submissionポートを活用することもできます。
    SMTP_AUTH_TYPELOGINやPLAINなど。これが空白つまり、""だとSMTP Authなしになり、指定するとありになります。
    SMTP_USERSMTP Authのユーザアカウントを入れます
    SMTP_PASSSMTP Authの生パスワードを入れます。
    SMTP_TLS_USEYESを入れると、通信の暗号化「TLS」を使います。それ以外なら非暗号化通信です。SMTP Authを使うなら、TLS暗号化に対応しているものを使うのがいいかと思います
    SENDMAIL_OPT-x 120は、タイムアウトまでの待ち時間(秒)です。
未来の記事も表示可能にする(2009.06.12)
非公開領域/system/classes/story.class.phpの499行目にある
|| ($this->_date > time())
 
を消すことで解決しました。
Geeklog Japanの掲示板目次 > Geeklog 一般掲示板 > ハック・カスタマイズに 未来日時の記事を表示させたいを作成し、フィードバック。
記事のコピー for Geeklog 1.5に対して、このハックを上載せして、両方の機能が動くことを確認。
RSS作成において、未来に日時も表示可能にする (2008.03.03 v0.1)
非公開領域/system/lib-syndication.phpを差し替えることになります。lib-syndication.php (MD5: 63368cd6244b7f3e140e36b86ff459cb)。差し替える前に、バックアップをとっておきましょう。
1.5.2sr4用はこちら: lib-syndication.php (MD5: c9df939ba5749a40a1514312ca60af82) (2009.6.12)
Geeklog Japanの掲示板目次 > Geeklog 一般掲示板 > ハック・カスタマイズに RSS表示で、未来の日付についても表示させたいを作成し、フィードバック。さらにいくつかのサイトでテストして、Geeklog日本語版のダウンロードにアップする予定。
記事の投稿日時設定範囲の拡大(2008.01.18 v0.1)
Geeklog Japanの掲示板目次 > Geeklog 一般掲示板 > ハック・カスタマイズに記事の投稿日時設定範囲の拡大を作成し、フィードバック。
話題管理の多言語化(2008.01.10 v0.1)
Geeklog Japanの掲示板目次 > Geeklog 一般掲示板 > ハック・カスタマイズに話題管理表示の多言語化を作成し、フィードバック。
記事リストの多言語化(2008.01.30 v0.5)
掲示板目次>Geeklog 一般掲示板>ハック・カスタマイズの記事リストの多言語化にアップしています。
	2008.01.16 v0.1: 多言語機能がONの場合、該当言語のみリスト表示されるようハック。
	****.**.** v0.2: 非公開
	2008.01.18 v0.3: ログインユーザのみ正しく表示できない問題を修正
	2008.01.22 v0.4: ログインユーザのみ正しく表示できない問題をさらに修正
	2008.01.30 v0.5: ログインしていて、閲覧できるデータがないユーザが正しく表示できない問題を修正
	2008.02.01 v0.6: タイトルの言語ファイルデータを、private/data/language以下ファイルを優先取得するよう変更。
v0.2は公開してません。v0.1からの変更点は、ログインしているユーザの場合に正しく表示できない問題を解決です。さらに正しく解決してなったので修正v0.4で。やっぱりwhere,andのSQL文の切り分けを、標準メソッドがやってくれないので、eregiで判別させるように変更し、問題を解決。
ブロックの多言語化(2007.12.21 v0.2)
掲示板目次>Geeklog一般掲示板>個々の機能>ブロックの多言語表示にアップしています。
Kitani 2007年12月21日 21:09 JST
がその内容です。
それがめでたく、2007.12.22日に、Geeklog JapanのWiki、ブロックを多言語対応で表示するに掲載されました!!
カスタムヘッダメニューを使ったヘッダメニューの多言語化 (v0.1: 2007.12.27)
Geeklog Japanのヘッダメニューの多言語化にアップしました。
nmoxmenu4.0.4(2階層メニュー)プラグインの静的ページ対応 (2008.07.15)
2008.07.31: nmoxmenu4.1.0および4.1.0aは多言語環境がONになっていると、SQL文記述ミスがあるので、4.1.1を利用すること(気づいてお知らせしたら、すぐに修正版がアップされました!仕事が早い!)
2008.07.28: nmoxmenu4.1.0で本ハックが本体に組み込まれました! さらに管理画面から作成した静的ページを表示する便利な機能がついたようで便利そうですね

全面刷新されていたが、多言語対応しているため、静的ページ対応も比較的容易だった。それぞれの詳細はダウンロードしたファイルのテキスト文書を読んで下さい。
2008.07.15: v1.0: 1階層および2階層それぞれ静的ページを指定できるようにした。

nmoxmenu4.0.4-hack1.0.zip --- 9ae0f07a96c49836193ef6463441f8b8 (MD5)
2008.07.17: http://www.geeklog.jp/forum/viewtopic.php?showtopic=10812&lastpost=true#10816にて、どうやらnmoxmenuの次期バージョンに本ハックを含める検討をされているということです!
      ZIP圧縮をMacOSXでやったのですが, Windowsで展開すると説明テキストファイル名
      が文字化けしておりました。Windowsで圧縮しなおしたものをアップします。
      説明ファイル名の文字化けへの対応のみで、内容は変わりません。
nmoxmenu3.1.6(2階層メニュー)プラグインの多言語化&静的ページ対応 (2008.01.04 v0.5)
nmoxmenu(2階層メニュー)プラグインのコメント欄にアップしました。
その後、若干の修正を行い、多言語&静的ページへの対応を作成し、
nmoxmenuでの多言語切り替えにフィードバックしておきました。
nmoxmenu 3.1.5をベースに改変しましたが、3.1.6でも動作確認いたしました。
	2007.12.19 v0.1: 話題が重複する問題を解決 (本体の3.1.6で解決済み)
	2007.12.21 v0.2: 多言語対応
	2007.12.27 v0.3: 多言語機能をオフにしても動作するよう修正し、静的ページ対応
	2007.12.28 v0.4: アクセス権限がない場合でも表示されていた問題を修正
	2008.01.04 v0.5: 第2階層のソートを、話題の順序で指定できるように変更。
記事や話題、静的ページで利用できる多言語化機能が、本プラグインで有効になるように設定を変更。さらに、話題だけでなく静的ページも加えられるようにしました!!
テーマエディタプラグインの拡張
標準では、Geeklog標準搭載のmobile, profesional, ProfessionalCSSしか編集できません。しかしながらこれは簡単に増やすことができます。テーマエディタから編集することで、利便性が大きく向上することでしょう。
private/plugin/themedit/config.phpの下記の部分を追加します。
_THM_CONF['allowed_themes'] = array(
        'ProfessionalCSS',
        'mobile',
        'professional'
);
たとえば、公開領域/layout/に、GeekCityを追加したとします。
$_THM_CONF['allowed_themes'] = array(
        'ProfessionalCSS',
        'mobile',
        'professional',
        'GeekCity'
);
だけです。professionalの末尾にコンマが入っていることに注意してください。
その他の情報