
これら2つのツールを組み合わせる方法に関する簡単なマニュアル。 実際、すべてがそれほど複雑ではありません。
問題の本質
phpBBには独自のAPIがありますが、問題はその使用方法です。 一般に、common.phpファイルをインクルードすれば十分ですが、そのようには機能しません。 まず、セッションクラスが交差します。 そして、2番目と3番目-内部を読みます。
始めましょう
index.php Kohanaを/ webに入れ、フォーラムを/ web /フォーラムに入れます
含まれるもの
フォーラムのコードを損なわないために、まず必要なファイルのコピーを作成する必要があります。 もちろんライブで編集することもできますが、フォーラムは機能しなくなりますが(キャップのおかげ)、統合は機能します。 したがって、ためらうことなく、名前を変更します。
forum/common.php => forum/common_kohana.php
forum/includes/session.php => forum/includes/session_kohana.php
その後、
フォーラム/ common_kohana.phpに接続し
ますsession_kohana.phpを編集します
このファイルには、セッションとユーザーの2つのクラスがあります。 セッションはKokhanovskyと競合します。ユーザーIも名前を変更しました。 したがって、修正します。
class session // => class session_kohana
class user extends session // => class user_kohana extends session_kohana
common_kohana.phpを編集します
ここに、セッションファイルの接続があります。
require($phpbb_root_path . 'includes/session.' . $phpEx);
これは早急に修正する必要があります。
require($phpbb_root_path . 'includes/session_kohana.' . $phpEx);
少し低く浸します。 エラーハンドラーのインストールは次のとおりです。
Cohanaには既に独自のハンドラーがあり、まったく悪いことではありません(ブラックジャックと痕跡があります)。
以下に、Userクラスのインスタンスを含むメインオブジェクトを作成します。
このクラスは
フォーラム/includes/session_kohana.phpファイルに保存されています。 名前も変更しました。
$user = new user_kohana();
さあ、ここにあります。 Kohanaはデフォルトでグローバル変数を強制終了するため、手動で追加する必要があります。 文字通り下に追加します:
$GLOBALS['user'] = $user; $GLOBALS['auth'] = $auth; $GLOBALS['template'] = $template; $GLOBALS['cache'] = $cache; $GLOBALS['db'] = $db;
次に、構成が接続されます。
インスタンスもグローバル化されます。 下に追加
$GLOBALS['config'] = $config;
ファイルの最後にフックをインストールしています。 私はこれが仕事にどのように影響するかを完全には理解していませんでしたが、必要ではないようです。 フォーラムでのユーザーの作業のコンテキスト外で意味をなさないでください。 次のコードをコメントアウトしました。
common.phpを扱った
接続
私は小さなクラスを作成しました。これは完全に理解しているクラスではなく、静的関数のセットです。 この関数はフォーラムを接続し、コード自体はindex.phpファイルから取得されます。
public static function include_libs() {
Zatykはこれにいました:
define('PHPBB_DB_NEW_LINK', 1);
phpbbがデータベースに接続すると、次のようになります。
$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, defined('PHPBB_DB_NEW_LINK') ? PHPBB_DB_NEW_LINK : false);

定数
PHPBB_DB_NEW_LINKを1に定義しないと、次のことが起こります。 あなたのサイトは明らかにデータベースを使用しています。 だからここに。
フォーラムが別のデータベースにぶら下がっており、データベースがすべて同じサーバー、同じユーザー(および同じパスワードを想定する必要がある)にある場合、それら、またはむしろポインター(
リソースタイプの変数)は期待どおりに機能しません。 phpBBから呼び出される
mysql_connect関数は、呼び出しのパラメーターがCohanで作成されたパラメーターと同じ場合、現在のKokhanのmysql_connection_idを使用しようとします。 ハッシュを介してデータベースの一意性を制御するKokhanovskyの方法は、クラスから抽象化されて1レベル高いため、ここでは機能しません。
これについてはドキュメントに次のように書かれています:
同じmysql_connect()引数を使用して2番目の関数呼び出しが発生した場合、新しい接続は確立されません。 代わりに、関数は既に確立された接続へのリンクを返します。 new_linkパラメーターは、類似のパラメーターを持つ接続が既に開いている場合でも、 mysql_connect()関数が別の接続を開くようにすることができます。
よくここに。 これで作業できます。 ユーザー登録は次のように行われます。
public static function register_user($username, $password, $email) { global $user; self::include_libs(); $user_row = array( 'username' => $username, 'user_password' => phpbb_hash($password), 'user_email' => $email, 'group_id' => 2, 'user_timezone' => 10.00, 'user_dst' => 1, 'user_lang' => 'ru', 'user_type' => 0, 'user_actkey' => '', 'user_ip' => Request::$client_ip, 'user_regdate' => time(), 'user_inactive_reason' => 0, 'user_inactive_time' => 0, ); try { $user_id = user_add($user_row, FALSE); return $user_id ? $user_id : FALSE; } catch (Exception $e) { return FALSE; } }
そして、特定のユーザーにログインしてログアウトすることができます。
public static function login($user_id, $persist_login = FALSE) { global $user; self::include_libs(); $user->session_create($user_id, false, $persist_login, true); } public static function logout() { global $user; self::include_libs(); $user->session_kill(FALSE); return TRUE; }
ユーザーがログインしているかどうかを確認します。
public function logged_in() { global $user; $this->include_libs(); return ($user->data['user_id'] == ANONYMOUS) ? FALSE : TRUE; }
一般に、ロールの割り当てなど、フォーラムAPI機能の多くを使用できます。 これは、ユーザーがプライベートフォーラムへのアクセスを開く方法です。
function forum_open($forum_id, $user_id) { $this->include_libs(); $role_id = 14;
そして最後に、私は言います
これは悪いアプローチです PLOの基本原則に違反します。 グローバル変数、グローバル関数、定数...一般に、これは必要ありません。 そして、当然のことながら、コメントでお聞きしたいと思います。 通常の統合メカニズムが表示されたとき。 ありがとう
サービスは
ここで動作し
ます 。 サイトとフォーラムに登録した場合、サイトにログインすると、フォーラムへのログインが行われます。
オリジナル記事