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

Last-modified: 2008-08-10 (日) 21:14:05 (5756d)

  • 「ezm-BOX」としてwikiを公開した話は、CentOS51でバックアップサーバ/(6)pukiwikiのverupで書いたとおり。ただ、今のところは、SNSからのリンクしかないので、ロボットも一般来訪者もきていないと思う。
  • で、あれこれ前から気になっていたカスタマイズに挑戦していた。
  • 一つは、編集等の規制
    • もともとオープンさが身上のwikiに規制をかけるのはおかしいかもしれないが、ホームページ代わりに使うという前提なので、そこは許していただきたい。
    • 一応パスワードはかけてあるが、も少ししっかりガードしたい。
  • もう一つは、画像のオーバーレイ表示
    • 画像と言えば、lightboxを使ったオーバーレイ表示が手放せない関係になっているが、wikiに関しては未挑戦。何とか実現してみたい。

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

pukiwikiの編集規制

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

参考にしたサイト

  • pukiwikiの質問箱で、それらしい要望を発見したが、没になっている。ただ、「PKWK_READONLY」というキーワードが見つかった。
  • これをキーにGoogleで検索すると、pukiwiki関係のメモと題して、2つの設定方法が見つかった。
    • リードオンリー・モードにする
    • 閲覧用と管理用のページを分ける

リードオンリー・モード

  • 「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だった!! 編集だけでなく、新規作成のアイコンも消えるし、アドレス欄に直接コマンドを入れてもはじかれた!

管理用のページを分ける

  • ただ、これで機能的にはOKなのだが、実際上は問題がある。自分が編集する際にも、いちいちサーバ上の設定ファイルを書き直す作業が必要になる。
  • そこで、公開画面とは別に、管理用(編集用)ページ【当然、非公開】を作っておくという手だ。4つのファイルを、別名でコピーして、一部修正するもの。
  • 該当ファイルは以下の4つ。
    1. index.php
    2. pukiwiki.ini.php
    3. lib/pukiwiki.php
    4. 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!

  • 管理者で接続するときのURLは、以下のとおり (ただし、あくまでダミーですからね ^^;)
    http://kurarinet.com/ezm/admin.php
  • 問題なく表示する、当然か。編集しようとすると、凍結が効いている。凍結解除すれば、編集可能になる。
  • ただ、凍結を解除して編集状態でも、従来のアクセス画面(index.php)からでは、編集不可のままとなる!!

さらに、アクセス規制も

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

★というわけで、先輩に相談したら、原因が判明。 問題点は2つあった

  1. 上記のサイトの解説記事では、.htaccess に記述する方法が紹介されているが、実は、それだけでは有効にならない。httpd.conf 側の設定を替える必要があるのだ。(以下のコメントを参照)
    ## Access control by Order/Allow/Deny directives
    ## needs 'AllowOverride Limit' at httpd.conf
  2. 一方、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)

写真のオーバーレイ表示

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

lightboxとの連携

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

インストール手順

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

サムネールはどうしよう?

  • 一応、画像のオーバレー表示は解決した。ただし、同じ画像を使うだけなので、元の画像がオーバレイでポップするだけ。これではなんとも面白くない(^^;)
  • ここで行き詰ってしまった。サムネール画像を自動作成させたりして、リンクできないかと思ったが、そもそも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)
     のようにタイトルの前にカンマを余分に入れます。

サイズ指定で格好がついた!

  • いっぱいパラメータがあったのだ。そのうちのサイズ指定を利用したらOK!「%」指定の方が楽。
  • その前の「,」追加を忘れずに
【左】50%表示
&ref(gogaku.jpg,,50%,gogaku);
【右】30%表示
&ref(gogaku.jpg,,30%,gogaku);

gogaku gogaku

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

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