wiki:pne-book-9-1
 ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Version 7 (modified by imoto, 11 years ago) (diff)

--

ディレクトリツアー

概要

OpenPNEディベロッパーガイドのはじめはディレクトリツアーということで、OpenPNEのディレクトリ構造を見ていきます。
現在のOpenPNE2.0系では独自のフレームワークを採用しています。
よってディレクトリ構造も独自の構成をしています。
今回は、trac.openpne.jpのtrunkを参照しながら解説を行っていきますのでディレクトリはアルファベット順になっているので、解説も上からアルファベット順に解説していきます。

それでは、主要なディレクトリを網羅しながら、OpenPNEのディレクトリを見ていきましょう。

root/OpenPNE/trunk
http://trac.openpne.jp/browser/OpenPNE/trunk

root

まずはじめに、rootディレクトリです。
このrootディレクトリはOpenPNEのディレクトリの中で一番上の階層です。
OpenPNEをダウンロードして解凍したり、trac.openpne.jpのtrunkをみるとこのような構造になっていると思います。
ここには、いろいろなディレクトリがあります。それぞれディレクトリについて後ほど詳しく解説するのでここでは割愛します。

root

bin
lib
public_html
setup
var
webapp
webapp_biz
webapp_ext
config.php.sample
LICENSE

このrootディレクトリにはその他に、2つのファイルがあります。一つがconfig.php.sampleといって設定ファイルです。もう一つはLICENSEファイルです。

簡単に2つのファイルについて説明すると、config.php.sampleは通常config.phpとリネームしてOpenPNEの設定ファイルとして使用します。この設定ファイルには、データベースの設定から、OpenPNEのAPI設定までさまざまな設定項目があります。詳しくは、実際にconfig.php.sampleを開いてどのような項目があるか確認してみてください。

このrootディレクトリの特徴としては、WordPressやXOOPSのように、rootディレクトリにphpファイルが多くないことが特徴です。また、index.phpがこのディレクトリにないのも特徴です。これは、公開ディレクトリを、後ほど説明するpubic_htmlだけに限定しているため、このrootディレクトリはWEBサーバの公開範囲外なので、index.phpがないという特徴を持っています。 それではまず、binディレクトリから詳しく見ていこうと思います。

WordPress Japan
http://wordpress.xwd.jp/

XOOPS Cube日本サイト
http://xoopscube.jp/

bin

このbinディレクトリはアプリケーションの動作には依存していない、単体で動作するスクリプトが入っています。 binの中には2種類のファイルタイプがあります。一つ目はcronで、もう一つはPHPです。 このcronというファイルは同名のPHPファイルと対になって存在しています。 もう一つは、実際に携帯の写メール投稿や、RSSの取得などの処理を行うPHPファイルです。

root/bin

config.inc.php
mail.php
tool_ashiato_update_log.cron
tool_ashiato_update_log.php
tool_rss_cache.cron
tool_rss_cache.php
tool_send_birthday_mail.cron
tool_send_birthday_mail.php
.
.
.

この中で、cronとPHPファイルが対でないファイルが2つあります。その2つのファイルととはconfig.inc.phpとmail.phpです。簡単にこの2つのファイルについて解説します。

まず、config.inc.phpは中を見ると分かりますが、root以下にあるconfig.phpを読み込む処理が書いています。 このconfig.inc.phpはそれぞれ単体で動くスクリプトにOpenPNEの設定やパスを教えるためのものです。

config.inc.php

<?php
/**
* @copyright 2005-2008 OpenPNE Project
* @license   http://www.php.net/license/3_01.txt PHP License 3.01
*/

define('OPENPNE_DIR', realpath('../'));
require_once OPENPNE_DIR . '/config.php';

?>

次に、mail.phpですが、これはcatch allというメールサーバの機能を利用してこのmail.phpにメールの本文を渡すことで動作しています。 mail.phpがメールの本文などを受け取ったら、このmail.phpでメール本文を読み込み、それぞれの処理を判断しています。 このmail.phpはメールを受信したときに動作するので、対のcronファイルがないということになります。

lib

それでは次に、rootディレクトリ直下にあるlibディレクトリを見ていきましょう。
このlibディレクトリの中には、includeディレクトリとincludeディレクトリがあります。このlibディレクトリには外部のライブラリが入っています。具体的にはPEARなどが入っています。

このlib直下のREADME.txtにも書いていますが、いくつか注意が必要なことがあります。
OpenPNEはPHPライセンスですが、このlib直下のライブラリは必ずしもPHPライセンスではないということです。ですので、使用する際には十分注意が必要です。
ただし、あくまでPHPライセンスで使用できるライセンスのライブラリで、GPLなど縛りの強いライセンスは同梱していないので、PHPライセンスであれば使用しても大丈夫です。

libディレクトリ

include

このincludeディレクトリは、外部のライブラリでOpenPNEに欠かせないライブラリが揃っています。
このincludeディレクトリの特徴としては、このincludeディレクトリはインクルードパスに指定されていますので、ライブラリ名を指定して読み込むだけでファイルを読み込むことが出来ます。
全体的にこのライブラリ群を見ると、このincludeディレクトリはの中に含まれるライブラリはほぼPEARのライブラリです。

この中でも主要なディレクトリや特徴のあるライブラリについて解説していきます。

includeディレクトリ

まず、一番上のAuthディレクトリですが、OpenPNEの認証系には欠かせないライブラリが入っています。
このAuthディレクトリの中でも、ContainerディレクトリはSlavePNEを実現するためのライブラリ群が入っています。SlavePNEはこのPEAR_Authを使って実現しているので、どのような認証系が使えるかどうかが知りたければ、この中のContainerディレクトリを見てみるのもいいと思います。

Containerディレクトリ

DBディレクトリもOpenPNEでは積極的に読み込んで使用しています。
OpenPNEはこのPEAR_DBに依存しているので、このライブラリ群がなければデータベースの操作はできません。

SmartyディレクトリはOpenPNEのテンプレートに使用しているテンプレートエンジンのライブラリ群が入っています。OpenPNEではこのSmartyに独自の拡張クラスを作成しているのですが、ベースはこのincludeディレクトリ以下のSmartyディレクトリに入っています。

ファイルの中に、simplepie.incというファイルがあります。
OpenPNEは現在のPHPライセンスにする前はGPLライセンスというライセンス形態をとっており、RSS取得のためのライブラリはMagpieRSSを使っていたのですが、MagpieRSSがGPLライセンスなので、PHPライセンスにすることが出来ませんでした。そこで、OpenPNE2.3.0にするときに、このsimplepieというライブラリに変更すしたという経緯があります。

 PEAR
 http://pear.php.net/
 
 Smarty
 http://www.smarty.net/
 
 Simplepie
 http://simplepie.org/

smarty_plugins

このsmarty_pluginsディレクトリは先ほど説明したSmartyのプラグインのためのディレクトリです。 しかし、現状はmodifier.date_format.phpというファイルしか入っていません。 このファイルはSmartyで日付を扱う時に必要なので同梱しています。

pubic_html

それでは、WEBサーバの公開領域であるpubic_htmlディレクトリを見ていきましょう。
このpubic_htmlディレクトリはWEBサーバから読み込まれるディレクトリなのでcssやjsなどがあります。詳しくは後ほど説明します。
また、このpubic_htmlは公開領域であるために注意が必要な場合があります。
このpubic_htmlディレクトリ以下のファイルはURLを直接入力された場合は誰でも見ることが出来るという特徴があります。
例えば、会員のみに公開したい資料などをここに置いた場合でも、会員でない人がURLを直接入力してアクセスした場合は見ることが可能なので注意が必要です。

pubic_htmlディレクトリ

このディレクトリにあるファイルを見ると、まずcap.phpがあります。このcap.phpはlib/includeディレクトリ以下にあるkcaptchaというライブラリを使うためにあります。
kcaptchaライブラリは招待メールを送るときや、新規登録の際にコンピュータが判別しにくい崩れた人間しか読めない文字の画像を表示するために使用しています。
次に、img.phpとimg_skin.phpがあります。この2つのファイルはデータベースから画像ファイルを読み込むためにあります。ブラウザ側から直接WEBサーバにアクセスすることができないので、このimg.phpとimg_skin.phpがブラウザとデータベースの橋渡しになって画像ファイルのやり取りをしています。
img.phpとimg_skin.phpの違いは、通常の画像なのか、スキン用の画像なのかという違いがあります。具体的には、認証の部分が違います。通常の画像はタイムスタンプがついていますが、テンプレートからスキン画像を読み込む場合はそれが出来ないので、この様に2種類のファイルに分けて画像の受け渡しをしています。

最後に、index.phpというファイルがあります。OpenPNEでは、基本的にすべてこのindex.phpが読み込まれて処理が始まります。OpenPNEのフレームワークはフロントコントローラという形式をとっており、入り口はこのindex.php一つにまとめています。このindex.phpからすべての処理が始まります。
このindex.phpの中身を見てみると非常にシンプルなソースコードになっています。
openpne_executeという関数がありますが、これはOpenPNEのコントローラを実行する関数です。このopenpne_executeにURLから受け取ったパラメータを渡してそれぞれのパラメータから処理を判断して実行しています。

<?php
/**
* @copyright 2005-2008 OpenPNE Project
* @license   http://www.php.net/license/3_01.txt PHP License 3.01
*/

require_once './config.inc.php';
require_once OPENPNE_WEBAPP_DIR . '/init.inc';

openpne_execute();

?>

cmd

このcmdディレクトリは、OpenPNEの目玉機能でもある小窓機能を実現するためのJavaScriptは入っています。小窓には通常小窓形式(CMDタグ)、URL2CMD形式(URL)と2つの形式がありますが、どちらの形式で小窓が使用されても、このcmdディレクトリにあるJavaScriptが読み込まれます。
このcmdディレクトリにあるファイルはすべてJavaScriptです。そのため、WEBサーバから読み込むことが出来る必要があるため公開ディレクトリに存在します。
cmdディレクトリにあるJavaScriptファイルの特長としては、ファイル名が「ドメイン名+.js」となっているところです。これは小窓の規約に「使用するドメインに「.js」をつけるという」とうのがあるためです。

cmdディレクトリ

css

このcssディレクトリには、OpenPNEのスタイルシートが入っています。
基本的には、すべてこのcssディレクトリに入っています。しかし、現状は動的に書き出す必要がある配色設定などはテンプレートに直接書いています。
動的に書き出す必要がないフォントの大きさなどはこのcssディレクトリに入っています。

cssディレクトリ

flash

次はflashディレクトリです。
ここにはflashファイルが入っています。しかし、このflashディレクトリには現在1つしかファイルがありません。現在あるファイルはフレンドリストをFlashで表示するという機能のソースです。このflashのソースも公開してますので、これを編集しなおしてオリジナルのフレンドリストを作ることも可能です。

Flashの使い方
http://trac.openpne.jp/wiki/FlashHowTo
flashディレクトリ

img

次はimgディレクトリです。このimgディレクトリはデフォルトの設定では使いません。
この機能を使うときは、config.phpで設定します。
OPENPNE_IMG_CACHE_PUBLICをtrueに書き換える必要があります。
なぜ、このOPENPNE_IMG_CACHE_PUBLICをデフォルトの設定でtrueにしていないかというと、この画像キャッシュをpublic_html以下に置くにはmod_rewriteが必要でだからです。

// 画像キャッシュをpublic_html以下に置くかどうか(要mod_rewrite)
define('OPENPNE_IMG_CACHE_PUBLIC', true);

画像の一時ファイルをvarディレクトリに入れるのではなくpublic_htmlに公開することで、ブラウザが直接アクセスできるようになるため、OpenPNEのパフォーマンスが上がります。

imgディレクトリ

imgディレクトリの中には、画像の形式ごとにディレクトリ分けされています。
また、画像の大きさが決まっているので、画像の大きさごとに各ディレクトリにキャッシュされます。

gifディレクトリ

js

このjsディレクトリにもcmdディレクトリと同じく、JavaScriptファイルが入っています。OpenPNEには小窓以外にもJavaScriptが使われています、
pne.jsはURL2CMDを実現するために必要なJavaScriptファイルです。
prototype.jsはフォーム入力欄のフォーカス契機で色を変えるというものに使っていました。現在は使用されていませんが、今後使用する可能性が高いためこのライブラリを残しています。
show_flash.jsはフレンドリストをFlashで表示するために必要なJavaScriptファイルです。
OpenPNEでは基本的にJavaScriptを使っておらず、あくまで補助的なものとして使用しています。

jsディレクトリ

modules

このmodulesディレクトリには、admin、pc、setupと各モジュールごとに必要なファイルが入っています。例えば、adminディレクトリでは、管理画面のcssや管理画面のボタンが入っています。
pcディレクトリは現在空のディレクトリです。
setupディレクトリはsetupに必要なcssが入っています。

modulesディレクトリ

skin

このskinディレクトリはOpenPNE2.10系から大きく構成が変更されたディレクトリです。
OpenPNE2.10系から、ヘッダーやナビメニューなどのスキン画像をプリセットカラーから選択出来る機能が追加されました。
上から、レッド、ベージュ、イエロー、グリーン、ブルー、ネイビー、パープル用のディレクトリがあります。その下にある900_openpne_ver28ディレクトリはOpenPNE2.8系で使用されていたスキン画像は入っています。

skinディレクトリ

001_openpne_redディレクトリの中を見ると、imgディレクトリとskin.iniファイルがあります。

001_openpne_redディレクト

このskin.iniファイルは管理画面から読み込まれる設定ファイルです。
captionで指定した名前が管理画面から読み込まれて表示されています。

skin.ini

[skin]
caption = "OpenPNEレッド"

次に、imgディレクトリについてですが、このimgディレクトリにはOpenPNEレッドに必要な画像しか入っていません。具体的には、ヘッダーやナビやログイン画面の画像などです。つまり、ボタン画像やアイコンは入っていません。
001_openpne_redディレクトリにない、ボタン画像やアイコンはskinディレクトリ以下のdefaultディレクトリが読み込まれることになっています。同名のファイル名がない場合は、defaultディレクトリの画像が使われることになります。

defaultディレクトリ

setup

このsetupディレクトリにはセットアップに必要なファイルとOpenPNEのマニュアルが入っています。
PostgreSQLを使う場合はOpenPNE_Setup_pgsql.htmlを見てください。
そのほかにも、アップグレードのマニュアルもあるので安定版から安定版にアップグレードしたいときは、OpenPNE_Upgrade.htmlを見てアップグレードを進めてください。
それではscriptディレクトリから見ていきましょう。

setupディレクトリ

script

scriptディレクトリですが、このディレクトリには現状は何も入っていません。2.10からこのscriptディレクトリが追加されました。
OpenPNE2.10で固体識別番号という大きな機能追加を行ったのですが、その時にはこのディレクトリにはPHPファイルが入っていました。
この様に大きな機能追加などが行われたときにはこのscriptディレクトリにファイルが入る可能性があります。

sql

次に、sqlディレクトリですが、このディレクトリには基本的にSQLファイルが入っています。OpenPNEは原則として画像などもデータベースに保存しているためバージョンアップの時もこのSQLを実行するだけでバージョンアップをすることが出来ます。
基本的にはどのディレクトリも構造は同じなのでOpenPNEが推奨しているMySQL4.1系のディレクトリを詳しく見ていきましょう。

sqlディレクトリ

mysql41ディレクトリにはinstall、option、update、upgradeのそれぞれの用途に合わせたSQLファイルが入っています。
installディレクトリにはOpenPNEを新規にインストールするためのSQLが入っています。

optionには、OpenPNEの動作に必須ではないSQLが入っています。例えば、add_c_api.sqlはOpenPNEの動作には直接関係していません。つまり実行しなくてもOpenPNEは動作します。
しかし、OpenPNEのAPIを使用する場合にはこのadd_c_api.sqlを実行する必要があります。sqlディレクトリにあるREADME.txtの用途の欄を見ればoptionの説明があります。

updateには、OpenPNE2.9.1から2.9.2、2.9.2から2.9.3っていう形で、開発版のバージョンを上げるためのSQLが入っています。主に開発者や最新の動向を追いたい人が使用するSQLです。

upgradeには2.6から2.8、2.8から2.10という形で、大きくバージョンが上がるときに使います。通常SNSのバージョンをあげたい場合はのupgradeを使います。

また、各ディレクトリのSQLには大きく分けて2種類あります。create_tablesというテーブルを作るSQLとinsert_dataという初期設定値のデータを挿入するSQLがあります。 この2種類のSQLを実行することで、OpenPNEを動作させることが出来ます。

mysql41ディレクトリ

var

このvarディレクトリには基本的には一時的なファイル、一時的なデータが入るようになります。ですので、OpenPNEをダウンロードして展開した状態だと空の状態です。

OpenPNEはデータはデータベースに置くという方針で開発しています。しかし、毎回データベースに接続して読み込んでいるとスピードが遅くなることがあるので、一度データベースから読み込んだファイルはこのvarディレクトリに置いておきます。
そうすることで、毎回データベースにデータを読み込みに行く必要がなくなるのでパフォーマンスが上がります。

varディレクトリを詳しく見ていきましょう。
まず一番上にfunction_cacheディレクトリがあります。このfunction_cacheディレクトリは、 負荷のかかる処理などをキャッシュするために存在します。
例えば、OpenPNEにはランキングという機能がありますが、このランキングを集計するのは非常に時間がかかります。しかも、ランキングは一日に一回しか計算しないので、あらかじめ計算しておいて、このfunction_cacheディレクトリに置いています。このように、計算の難しいことや時間のかかることは一回計算した結果をこのfunction_cacheディレクトリに置いておきます。そして、二回目からはデータベースを読み込まないで、ファイルを読み込んで計算結果を出力しています。

次に、img_cacheディレクトリです。このimg_cacheディレクトリは日記やプロフィールなどの画像をキャッシュするために存在します。この img_cacheディレクトリを見ると、まずは拡張子別で分かれていて、次に高さ・幅、サイズ別に分かれています。サイズを分けてキャッシュをとることによって性能が劣化するのを避けています。
public_htmlにも画像をキャッシュするディレクトリがありますが、config.phpで設定していない場合は通常このvarディレクトリ以下のimg_cacheディレクトリに画像がキャッシュされます。

次に、logディレクトリです。このlogディレクトリにはエラーログやメールの実行ログなどを記録するために存在します。logを有効にするためには、config.phpで設定が必要で、OPENPNE_DEBUGGINGを0にする必要があります。

//--- オプション設定

// デバッグモード
// 0: off ... エラー非表示、エラーログを記録する
// 1: on  ... エラー表示、エラーログを記録しない
// 2: on  ... 1 + Smartyデバッグコンソール
define('OPENPNE_DEBUGGING', 0);

次に、rss_cacheディレクトリです。rss_cacheディレクトリには外部ブログを取り込んだ結果を置いておきます。負荷対策のために、外部ブログのRSSもキャッシュしています。

次に、templates_cディレクトリです。templates_cディレクトリにはSmartyのテンプレートを一度解析して、解析の結果を一時ファイルとして置いています。Smartyのテンプレートもキャッシュをここに置いておくことで次に読み込まれるときに、このキャッシュを読み込むので一回目にアクセスしたときより速く表示できます。

最後に、tmpディレクトリです。tmpディレクトリには一時画像や一時ファイルを保存しておく場所として存在します。 メールで画像を投稿するときに、チェックするために画像を保存する必要があり、一時的にこのtmpディレクトリに保存しています。

varディレクトリ

webapp

このwebappディレクトリがOpenPNEの根幹です。OpenPNEのアクションなどはこのwebappディレクトリに入っています。
libディレクトリ、modulesディレクトリ、templatesディレクトリ、validateディレクトリの各ディレクトリについてはこの後詳しく見ていきます。

このディレクトリには2つのファイルがあります。

まず、init.incですがOpenPNEはconfigの後にこのファイルを読み込むことになります。このファイルにはOpenPNEのフレームワークの設定などがここには書いています。
version.phpはOpenPNEのバージョンを定義しているだけのファイルです。

webappディレクトリ

lib

それではlibディレクトリを見ていきましょう。libディレクトリはincludeディレクトリにもありますが、この2つのディレクトリには大きな違いがあります。

includeディレクトリ以下のライブラリは外部のライブラリで、このwebappディレクトリ以下のディレクトリはOpenPNEプロジェクトで開発されたライブラリです。includeディレクトリ以下のlibディレクトリ解説の時にライセンスが違うことがあるので注意が必要と書きましたが、このwebappディレクトリ以下のlibはOpenPNEプロジェクトで開発されたものなのですべてPHPライセンスです。

libディレクトリにはいくつかファイルがあります。その中でcontroller.phpというファイルがありますが、この中でOpenPNEのメインの処理を行っています。まずはじめに公開領域であるpubic_html以下のindex.phpが読み込まれたら、このcontroller.phpファイルの中のopenpne_executeという関数が実行されて、使用するモジュールなどを判断しています。

それでは主要なディレクトリについて詳しく見て見ましょう。

libディレクトリ

db

OpenPNEではこのdbディレクトリ以下のファイルをよく使用しています。
例えば、メンバーのidを取得したい場合、member.phpファイル内のdb_member_c_member4c_member_idという関数をコールすると、指定したメンバーの情報が取得出来ます。

member.php

function db_member_c_member4c_member_id($c_member_id, $is_secure = false, $with_profile = false, $public_flag = 'public')
{
    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ

    if (!$is_recurred) {  //function cacheのために再帰処理を行う
        $is_recurred = true;
        $funcargs = func_get_args();
        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
    }
.
.
.

OpenPNE

このOpenPNEディレクトリにはOpenPNEが使っているクラスライブラリが入っています。例えば、Smarty.phpはsmartyの派生クラスであるOpenPNE_Smartyというクラスを定義しています。ここではOpenPNE独自の処理を施しています。
そのほかにも、さまざまな派生クラスが定義されています。

color

colorディレクトリには配色設定があります。
このディレクトリいはktaiディレクトリとpcディレクトリに分けてプリセットカラーが定義されています。

pcディレクトリには各プリセットカラーの配色設定が定義されています。
同じフォーマットで新たに定義ファイルを追加すると、プリセットカラーとして管理画面から選択出来る様になります。

pcディレクトリ

smarty_plugins

このsmarty_pluginsディレクトリには、OpenPNEプロジェクトが作ったSmartyのプラグインが入っています。
中でも、function.t_url.phpというプラグインはOpenPNE独特のプラグインです。
OpenPNEの場合は、SSLを使用することがあるので、アクションによってはURLが変わることがあります。ですので、テンプレートに直接URLを書くより、Smartyプラグインを使ってSmartyにURLを生成してもらう処理をしています。
その他にも、CMDタグを小窓にするfunction.t_cmd.phpや、絵文字を変換するためのoutputfilter.pne_display_emoji.phpなどもあります。

smarty_pluginsディレクトリ

modules

modulesディレクトリには、管理画面からSNSの情報を変更をする、日記を読む、メッセージを送るなど、何らかの動作をするためのファイルがこの中には入っています。OpenPNEでの動作プログラムはほぼこのmodulesディレクトリの中にあります。
基本的には構造は同じなのでpcディレクトリを見ながら詳しく解説していきます。

modulesディレクトリ

pc

このpcディレクトリはdo、page、templates、validateと4つのディレクトリとinit.incの一つのファイルで構成されています。
基本的にこの構造で構成されています。

pcディレクトリ
do

このdoディレクトリには、実行系の処理をするファイルが入っています。 このdoディレクトリを見ると、データベースに追加、削除など何らかの処理をしています。フォームにはdo系の関数が使われることが多いことも特徴です。

page

このpageディレクトリにはページを表示するために必要なファイルが入っています。
このpageの特徴としてはそのファイル名がそのままURLに使用されている点です。

templates

templatesディレクトリにはテンプレートが入っています。
page系と対になって存在するテンプレートが多いのが特徴です。しかし、同じpageでも一つのテンプレートを使っていることもあります。例えば、プロフィール確認と友人のホームというのは同じテンプレートを使用しています。

validate

validateディレクトリには入力値のチェックのためのファイルが入っています。
例えば、c_member_idは1や2などの数値ですが、aなどの文字列が変数として渡された時にプログラムが予期せぬ動作を起こすことがあるかもしれません。そのような予期せぬ動作を未然に防ぐために、あらかじめ変数の値をチェックをしています。
このvalidateディレクトリの中でもdoとpageに分かれておりどちらも変数の入力値をチェックしています。

validateディレクトリ

templates

このtemplatesディレクトリにはOpenPNEのすべてのモジュールから使用できるテンプレートが入っています。
一番上のmailディレクトリには、メールのテンプレートが入っています。このテンプレートの中に変数があり、その変数に値を渡してメールを送信しています。
次に、debug.tplはconfig.phpでOPENPNE_DEBUGGINGを2にしたときに出力されるデバッグコンソールの中身です。
最後に、error.tplというのがありますが、OpenPNEではエラーやメンテナンス画面はこのerror.tplを使って表示しています。

templatesディレクトリ

webapp_biz

webapp_bizディレクトリにはOpenPNEのBIZモジュールが入っています。
基本的なディレクトリの構造はwebappと同じ構造をしています。
BIZ機能を使用するときはまずこのwebapp_bizが読み込まれ、もしアクションファイルが存在しない場合は、webappのアクションファイルを読み込みます。

webapp_bizディレクトリ

webapp_ext

このwebapp_extディレクトリは拡張用のディレクトリです。
新しい機能を追加や拡張する時のために用意されているもので、デフォルトでは空のディレクトリです。
何らかの機能を追加したい場合、直接ファイルを書き換えるということも可能ですが、バージョンアップに追従できないというデメリットがあります。
実際にこのwebapp_extディレクトリを使用して機能を拡張する場合は、webapp_bizディレクトリが参考になると思います。

    webapp_extディレクトリ

webapp_extディレクトリを使用する場合は、config.phpでUSE_EXT_DIRをtrueにする必要があります。このUSE_EXT_DIRをtrueにすることによって、まずwebapp_extディレクトリが読み込まれ、もしアクションファイルが存在しない場合は、webappのアクションファイルを読み込みます。

// webapp_ext ディレクトリ使用設定
///

define('USE_EXT_DIR', true);
define('OPENPNE_WEBAPP_EXT_DIR' , OPENPNE_DIR . '/webapp_ext');
define('OPENPNE_MODULES_EXT_DIR', OPENPNE_WEBAPP_EXT_DIR . '/modules');

ただ、webapp_extディレクトリを使用して開発する場合にいくつか注意が必要です。
一つ目は「アクションファイルを追加してもvalidateで変数の値をチェックする必要」で、二つ目は「do系のアクションを追加する場合はセッションIDのハッシュ値が必要」です。

まず、「アクションファイルを追加してもvalidateで変数の値をチェックする必要」の解説をします。例えば、do系でプログラムを追加するとします。そのプログラムの中で、変数のやり取りをしていた場合、validate以下のpcに「アクション名.ini」というファイルを追加しなければいけません。

次に、「do系のアクションを追加する場合はセッションIDのハッシュ値が必要」の解説をします。do系のアクションはクロスサイトリクエストフォージェリ対策(CSRF)防止のためにセッションIDのハッシュ値をリクエストの中に含めなければいけません。
OpenPNE内のフォームなどの場合は以下のような形でセッションIDのハッシュ値をリクエストの中に含めています。

<input type="hidden" name="sessid" value="({$PHPSESSID})">

まとめ

http://trac.openpne.jp/browser/OpenPNE/trunk