CentOS51でバックアップサーバ/(8)pukiwikiのカスタマイズ の変更点


//CentOS51でバックアップサーバ/(8)pukiwikiのカスタマイズ
#navi(CentOS51でバックアップサーバ)

- 「ezm-BOX」としてwikiを公開した話は、[[CentOS51でバックアップサーバ/(6)pukiwikiのverup]]で書いたとおり。ただ、今のところは、SNSからのリンクしかないので、ロボットも一般来訪者もきていないと思う。
- で、あれこれ前から気になっていたカスタマイズに挑戦していた。

-一つは、編集等の規制
-- もともとオープンさが身上のwikiに規制をかけるのはおかしいかもしれないが、ホームページ代わりに使うという前提なので、そこは許していただきたい。
-- 一応パスワードはかけてあるが、も少ししっかりガードしたい。

- もう一つは、画像のオーバーレイ表示
-- 画像と言えば、lightboxを使ったオーバーレイ表示が手放せない関係になっているが、wikiに関しては未挑戦。何とか実現してみたい。

と言うわけで、悪戦苦闘した記録である。(2008/07/23記)

#contents

* pukiwikiの編集規制 [#xd68760c]
- 一応パスワードがかけて「編集」できないようになっている。ところが、「新規作成」はできてしまうと言うわけで。本格的な編集規制に着手した。

** 参考にしたサイト [#s1e35330]
- [[pukiwikiの質問箱>http://pukiwiki.sourceforge.jp/?%E8%B3%AA%E5%95%8F%E7%AE%B14%2F20]]で、それらしい要望を発見したが、没になっている。ただ、「PKWK_READONLY」というキーワードが見つかった。
- これをキーにGoogleで検索すると、[[pukiwiki関係のメモ>http://56rian.dip.jp/Top/?%A5%D1%A5%BD%A5%B3%A5%F3%2Fpukiwiki]]と題して、2つの設定方法が見つかった。
-- リードオンリー・モードにする 
-- 閲覧用と管理用のページを分ける 

** リードオンリー・モード [#xaea9e17]
- 「PKWK_READONLY」というのは、リードオンリー・フラグのことで、最初からpukiwikiが持っている機能だった!
 pukiwiki.ini.phpの26行目辺り
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 // PKWK_READONLY - Prohibits editing and maintain via WWW
 //   NOTE: Counter-related functions will work now 
 //                           (counter, attach count, etc)
 if (! defined('PKWK_READONLY'))
 	define('PKWK_READONLY', 0); // 0 or 1  ★
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

- これをセット、つまり「1」に変更すればよいのだ!
- 結果は一発、OKだった!! 編集だけでなく、新規作成のアイコンも消えるし、アドレス欄に直接コマンドを入れてもはじかれた!

** 管理用のページを分ける [#ubac1487]
- ただ、これで機能的にはOKなのだが、実際上は問題がある。自分が編集する際にも、いちいちサーバ上の設定ファイルを書き直す作業が必要になる。
- そこで、公開画面とは別に、管理用(編集用)ページ【当然、非公開】を作っておくという手だ。4つのファイルを、別名でコピーして、一部修正するもの。

- 該当ファイルは以下の4つ。
++ index.php
++ pukiwiki.ini.php 
++ lib/pukiwiki.php 
++  lib/init.php 

- 実際の変更方法は以下のとおり
 (1)まず、元ファイルをコピーして管理者用ファイルを作る 【「admin」に変更する場合】
 [root@kuraric51 ezm]# cp -arp index.php admin.php
 [root@kuraric51 ezm]# cp -arp pukiwiki.ini.php pukiwiki.ini.admin.php
 [root@kuraric51 ezm]# cd lib/
 [root@kuraric51 lib]# cp -arp pukiwiki.php pukiwiki.admin.php
 [root@kuraric51 lib]# cp -arp init.php init.admin.php
 
 (2)管理者用ファイルを修正する 主に、各ファイルのリンク関係を調整
 [root@kuraric51 ezm]# vi admin.php
 ====== 各ファイルのリンク関係を調整
 // require(LIB_DIR . 'pukiwiki.php');
 require(LIB_DIR . 'pukiwiki.admin.php');  ★
 ?>
 
 [root@kuraric51 ezm]# vi lib/pukiwiki.admin.php
 ========各ファイルのリンク関係を調整
 // Load *.ini.php files and init PukiWiki
 // require(LIB_DIR . 'init.php');
 require(LIB_DIR . 'init.admin.php');  ★
 
 [root@kuraric51 ezm]# vi lib/init.admin.php
 =======各ファイルのリンク関係を調整
 /////////////////////////////////////////////////
 // Require INI_FILE
 // define('INI_FILE',  DATA_HOME . 'pukiwiki.ini.php');
 define('INI_FILE',  DATA_HOME . 'pukiwiki.ini.admin.php');  ★
 
 [root@kuraric51 ezm]# vi pukiwiki.ini.ilove45.php
 ======== 管理者用は編集可能にしておく!
 if (! defined('PKWK_READONLY'))
         define('PKWK_READONLY', 0); // 0:editable or 1:read_only  ★

** 試験はOK! [#y6442519]
- 管理者で接続するときのURLは、以下のとおり (ただし、あくまでダミーですからね ^^;)
 http://kurarinet.com/ezm/admin.php

- 問題なく表示する、当然か。編集しようとすると、凍結が効いている。凍結解除すれば、編集可能になる。
- ただ、凍結を解除して編集状態でも、従来のアクセス画面(index.php)からでは、編集不可のままとなる!!


** さらに、アクセス規制も [#u6dbfc5c]
- [[PukiWikiのメモ>http://akademeia.info/index.php?PukiWiki%A4%CE%A5%E1%A5%E2]]という同じような記事が見つかった。
- こちらでは、アクセス規制の設定が参考になった。要するに、入り口を分けても、万一名前(admin.php)が知られれば同じことになる。したがって、IPアドレスでアクセス規制をかけておけば万全という話である。
- 早速、記事を参考にやってみたが、結果的にうまく行かなかった(^^;) そもそもBasic認証の技術なので、できないわけはないのだが、なぜか挫折・・・(宿題ということでお願いします。)

★というわけで、先輩に相談したら、原因が判明。 問題点は2つあった
++ 上記のサイトの解説記事では、.htaccess に記述する方法が紹介されているが、実は、それだけでは有効にならない。httpd.conf 側の設定を替える必要があるのだ。(以下のコメントを参照)
 ## Access control by Order/Allow/Deny directives
 ## needs 'AllowOverride Limit' at httpd.conf
++ 一方、httpd.conf に直接記述する方法もあるが、自分でやったときはファイルの指定方法が間違っていたようだ。フルパスで記述したのだが、それが間違い。単に、ファイル名だけでよかった、という話。

- 昔、同じようなことで悩んだ記憶がよみがえった。⇒ [[CentOS5で新サーバ構築/(3)WWWサーバのチューニング]]の『ユーザ認証の変更』の項。この時は原因が分からず、httpd.conf に直接記述する方法を探し出してきてクリアしたのだった。(多分、OSを変更したため、httpd.conf は上書きが効かず、設定の細かな違いにも気がつかなかったのだろう ^^;)

- 今回も、最終的には httpd.conf に直接記述する方法で対応した。以下のように追記してOKに。なお、変更後は、httpd の restart の実行を忘れずに!
 <Files ~ "admin.php">
   Order deny,allow
   Deny from all
   Allow from 192.168.1.0/24
 </Files>

(★追記 2008/08/10)


* 写真のオーバーレイ表示 [#nd788c49]
- wikiの記事ではそれほど画像類が多いわけではない。ただ、画面のハードコピーがほとんどなので、文字が読めるようにすると画像サイズが大きくなる。そのままアップすると、かなりスペースを占めてしまう。
- いつものように、サムネールをクリックするとオーバーレイ表示ができないかと挑戦した。

** lightboxとの連携 [#g05dd18c]
- オーバーレイと言えば、定番の「lightbox」。調べてみれば、既に先人の挑戦が成功しており、解説記事が多数見つかった。
- 喜び勇んで片っ端から挑戦したのだが、実は、ほとんどが失敗した。その詳細は割愛するが、どうも、lightbox のver が関係しているようだ。最新のlightbox2.04をベースにしたものでは、ことごとくだめだった。
- 今回、最終的に落ち着いたのは、こちらの記事。備忘録/Pukiwiki:[[lightboxを使う>http://masa-ya.jp/index.php?%C8%F7%CB%BA%CF%BF%2FPukiwiki]]
- 「lightbox_plus」を使っていた。(jsファイルの構成の違いで気がついた)

** インストール手順 [#kcea7547]
- 『pukiwikiのデフォルトの設定ではJavaScriptは禁止』という情報があった。[[「lightboxというプラグインを適当に入れてみる。」>http://newcamel.logos.ic.i.u-tokyo.ac.jp/~s1s5/pukiwiki/index.php?pukiwiki%2Fplugin#notefoot_1]]を参考に、一応、解除しておく。

 pukiwiki.ini.php
 ============= Javascriptの動作許可
 // PKWK_ALLOW_JAVASCRIPT - Allow / Prohibit using JavaScript
 define( 'PKWK_ALLOW_JAVASCRIPT' , 1 ); // 0 : Prohibit、1:Allow

- ①lightbox関係ファイルの配置
- ezm/skin/lb 配下に、lightbox_plus(OpenPNE2.10.1で使ってたもの)を全部コピーする

 [root@kuraric51 www]# cd _OpenPNE2.10.1_20080622/public_html/
 [root@kuraric51 public_html]# ls js/
 blank.gif   lightbox.css      next.gif     prototype.js   spica.js
 close.gif   lightbox_old.js   overlay.png  sample.css     zzoop.gif
 expand.gif  lightbox_plus.js  pne.js       show_flash.js
 jojo.css    loading.gif       prev.gif     shrink.gif
 
 [root@kuraric51 js]# mkdir /var/www/html/ezm/skin/lb
 [root@kuraric51 js]# cp -arp *.* /var/www/html/ezm/skin/lb

- ②skinファイルの修正
- lightbox_plus.js 等の追加使用を設定する

 [root@kuraric51 js]# cd /var/www/html/ezm/skin/
 [root@kuraric51 skin]# vi irid/pukiwiki.skin.php
 ==== <head> の最後部分に 2行追加 =====
 <!-- 2008/07/18 lightbox  -->
 <script type="text/javascript" src="skin/lb/spica.js"></script>
 <script type="text/javascript" src="skin/lb/lightbox_plus.js"></script>
 </head>

- ③cssの追加
- cssを丸ごとインポートする。使っているskinファイルは、もともと import文だけで構成されていたので簡単だ!
- ただ、毎度のことながら、パスの記述が悩ましい(cloudwalk.css が起点!!)

 [root@kuraric51 skin]# vi irid/cloudwalk/cloudwalk.css
 ====== 最後に追加 ========
 @import url("../../lb/lightbox.css");

- ④プラグインplugin/ref.ini.php の修正 「rel="lightbox"」を挿入する

 [root@kuraric51 skin]# vi ../plugin/ref.inc.php
 ======
 // --- 2008/07/18  lightbox ---------
 //   $params['_body'] = "<a href=\"$url2\" title=\"$title\">{$params['_body']}</a>";
       $params['_body'] = "<a href=\"$url2\" title=\"$title\" rel=\"lightbox\">{$params['_body']}</a>";

- ⑤ lightboxで使用する画像ファイルのパスを調整
- この調整も毎度ながら悩ましい。「skin/lib」を追加(こちらは index.php が起点!!

 [root@kuraric51 skin]# vi lb/lightbox_plus.js
 =======
 Event.register(window,"load",function() {
         var lightbox = new LightBox({
                 loadingimg:'skin/lb/loading.gif',
                 expandimg:'skin/lb/expand.gif',
                 shrinkimg:'skin/lb/shrink.gif',
                 previmg:'skin/lb/prev.gif',
                 nextimg:'skin/lb/next.gif',
                 effectimg:'skin/lb/zzoop.gif',
                 effectpos:{x:-40,y:-20},
                 effectclass:'effectable',
                 closeimg:'skin/lb/close.gif',
                 resizable:true

** サムネールはどうしよう? [#a74ebd0b]
- 一応、画像のオーバレー表示は解決した。ただし、同じ画像を使うだけなので、元の画像がオーバレイでポップするだけ。これではなんとも面白くない(^^;)
- ここで行き詰ってしまった。サムネール画像を自動作成させたりして、リンクできないかと思ったが、そもそもpurkiwikiってのは、記事や添付写真をphpプログラムで管理しており、ソースを追ってみたものの、とてもフォローできないかった。
- ここで行き詰ってしまった。サムネール画像を自動作成させたりして、リンクできないかと思ったが、そもそもpukiwikiってのは、記事や添付写真をphpプログラムで管理しており、ソースを追ってみたものの、とてもフォローできないかった。
- 別に、プラグイン形式のlightboxも見つけて、[[test]]ページでは、イロイロ表示してみたが、これも中途半端。何やかやと、約1週間悶々としましたが、 結論的にいうと、実は単純な話だった。
- pukiwikiで添付画像を表示する機能は、標準のプラグイン「ref.inc.php」で実現されているのだが、このプラグイン自体に表示サイズを調整する機能があったのだ。
- 少し長いが、公式マニュアルサイトからポイントを引用すると、
 ■書式 
  &ref(ファイル名,ページ,パラメータ,タイトル]);
 ■概要 
  '#attach'でページに添付されたファイルを指定位置に展開します。
 ■引数 
  ・ファイル名 
   ページに添付したファイル名を指定します(省略時はエラーとなります)。
   別ページ名/添付ファイル名とする事で別ページの添付ファイルも指定できます。
  ・パラメータ 
   ファイルの展開方法を指定できます。
  left|center|right - 表示時の位置を指定します。省略時はleft(変更可) 
  wrap|nowrap - テーブルタグで囲む/囲まないの指定を行います。省略時はnowrap(変更可)です。 
  around - テキストの回り込みを可能とします。省略時は回り込みを行いません。 
  noimg - ファイルが画像の場合に画像を展開しないようにします。省略時は展開
  nolink - 元ファイルへのリンクを張らないようにします。省略時はリンク 
  zoom - 縦横比を保持します。省略時はサイズ指定に従います。 
  999x999 - サイズを指定します(幅x高さ)。 ★
         省略時は拡大率あるいは対象画像のサイズに従います。 
  999% - サイズを指定(拡大率)します。省略時は100%です。 ★ 
  ページ名やパラメータに見える文字列を使用するときは、#ref(hoge.png,,zoom)
  のようにタイトルの前にカンマを余分に入れます。

** サイズ指定で格好がついた! [#e18051a6]
- いっぱいパラメータが合ったのだ。そのうちのサイズ指定を利用したらOK!「%」指定の方が楽。
- いっぱいパラメータがあったのだ。そのうちのサイズ指定を利用したらOK!「%」指定の方が楽。
- その前の「,」追加を忘れずに

 【左】50%表示
 &ref(gogaku.jpg,,50%,gogaku);
 【右】30%表示
 &ref(gogaku.jpg,,30%,gogaku);
&ref(gogaku.jpg,,50%,gogaku);
&ref(gogaku.jpg,,30%,gogaku);

- これに統一して、これまでの画像ページを修正を行った。
- あとは同一ページの複数の画像がリンク表示ができれば最高なのだが! これは、ぜいたくか!?
- これにて、一件落着ということで(^^)

#navi(CentOS51でバックアップサーバ)
トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   リンク元