Yiiフレームワークで書かれたサイトにphpBBフォーラムを迅速に統合する方法に関するステップバイステップの説明
フォーラムをYiiフレームワークに統合するためのすべての指示をまとめました。これに続いて、記事の最後に機能するフォーラムと小さなボーナスを取得することが保証されます。
Yiiで書かれた有効なサイトが既にあると想定されている場合は、フォーラムをダウンロードしてインストールする必要があります。
- 公式のphpBB Webサイトからフォーラムをダウンロードします。必要に応じて、同じ場所に亀裂のあるアーカイブをダウンロードします
- フォーラムのアーカイブをサイトのフォルダーの「/ forum 」サブディレクトリに解凍します。クラックをダウンロードした場合は、クラックのダウンロード元のページに記載されている手順も実行します(ファイルを配置するディレクトリの指示がありますRussification、それらのディレクトリをクラックファイルで補完するだけで、上書きしないでください)
- ブラウザでyoursite.com/forum/index.phpを開くと、フォーラムのインストールページが表示され、インストールが実行されます。複雑なことは何もありません。 インストールが完了したら、サーバーからフォルダー「 / forum / install 」を削除します。
フォーラムのデバッグの便宜上、「 /forum/config.php 」ファイルの行のコメントを外すことをお勧めします。
これにより、フォーラムテンプレートのキャッシュが無効になり、発生したエラーが表示されます。@define('DEBUG', true); @define('DEBUG_EXTRA', true);
- Yiiの拡張機能( オリジナルはこちら )をダウンロードしてインストールしますが、少し修正しました。
ダウンロード後、ディレクトリ「 / protected / extensions / phpBB 」に解凍し、「 /protected/ config / main.php 」ファイルに次を追加します。
'components'=>array( 'phpBB'=>array( 'class'=>'ext.phpBB.phpBB', 'path'=>'webroot.forum', ), 'user'=>array( 'class'=>'PhpBBWebUser', 'loginUrl'=>array('/site/login'), // enable cookie-based authentication 'allowAutoLogin'=>true, ), 'request'=>array( // , , URL . 'baseUrl'=>$_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF'] != $_SERVER['SCRIPT_FILENAME'] ? 'http://'.$_SERVER['HTTP_HOST'] : '', // ... ), // ... ),
- 次に、 ここですでに説明した指示に従ってすべてを行いますが、ここでは同じことを、不必要な言葉なしで書きます。
ユーザークラスがYiiサイトで既に使用されている場合は、次の手順を実行します。
- ファイル「 /forum/includes/session.php 」を開き、 1500行のコードでクラス「 user 」の名前を「 bbuser 」に変更し、クラス内の関数の名前を変更します。
class user extends session { // ... function user() // ... }
class bbuser extends session { // ... function bbuser() // ... }
- 101行目のファイル「 /forum/common.php 」で変更します
$user = new user();
$user = new bbuser();
- ファイル「 /forum/includes/session.php 」を開き、 1500行のコードでクラス「 user 」の名前を「 bbuser 」に変更し、クラス内の関数の名前を変更します。
- ディレクトリ「 / protected / components 」に、次の内容の新しいファイル「 PhpBBWebUser.php 」を追加します。
<?php class PhpBBWebUser extends WebUser{ /** @var UserIdentity */ private $_identity; public function login($identity, $duration=0) { $this->_identity = $identity; return parent::login($identity, $duration); } protected function afterLogin($fromCookie) { if ($this->_identity !== null) { if (Yii::app()->phpBB->login($this->_identity->username, $this->_identity->password) != 'SUCCESS') { Yii::log(" ({$this->_identity->username})", CLogger::LEVEL_ERROR); } } parent::afterLogin($fromCookie); } protected function afterLogout() { Yii::app()->phpBB->logout(); parent::afterLogout(); } }
- ユーザーモデル(Yii)に次の行を追加します。
protected function afterSave() { if ($this->isNewRecord) { // // , ( ), email, ID ( 2- , 5-) Yii::app()->phpBB->userAdd($this->login, $this->password, $this->email, 2); } parent::afterSave(); } protected function afterDelete() { // Yii::app()->phpBB->userDelete($this->login); parent::afterDelete(); }
ユーザーがサイトのパスワードを変更できる場合、パスワード変更アクションに次の行を追加します。
Yii::app()->phpBB->changePassword($user_login, $user_new_password);
- フォーラムで登録と承認を終了する必要がある場合は、ファイル「 /forum/ucp.php 」で次の行を大文字と小文字に変更します。
case 'register': header('location: /site/registration'); exit(); case 'login': header('location: /site/login'); exit(); case 'logout': header('location: /site/logout'); exit();
あなたのサイトでのフォーラムの統合のこの部分で終了します
次に、iframeに頼らずに、二輪自転車を発明することなく、サイトのテンプレート内にフォーラムを表示することがいかに簡単かを説明します。
Yiiをフォーラムに直接接続します。
- 次の内容の新しいファイル「 /forum/yiiapp.php 」を作成します。
<?php // Yii- defined('DS') or define('DS', DIRECTORY_SEPARATOR); // change the following paths if necessary $yii = dirname(__FILE__).DS.'..'.DS.'yii'.DS.'framework'.DS.'yii.php'; $yii_config = dirname(__FILE__).DS.'..'.DS.'protected'.DS.'config'.DS.'main.php'; require_once($yii); Yii::createWebApplication($yii_config); // "/server/www/forum" "/server/www", Yii Yii::setPathOfAlias('webroot', Yii::getPathOfAlias('webroot').DS.'..'); // assets Yii::app()->assetManager->setBasePath(Yii::getPathOfAlias('webroot').DS.'assets');
- ファイル " /forum/index.php "(フォーラムのメインページ)で、次の行を最初に追加します。
/** * Yii */ include "yiiapp.php"; $controller = new Controller('bbforum'); // bbforum - Yii::app()->controller = $controller; ob_start(); // // ...
さらに、このファイルではpage_footer()がページの最後で呼び出されます。これは実際には作業結果の画面への出力です(他のフォーラムファイルでは、この機能は1つのファイルで複数回発生します)。 この関数は内容を表示し、最後にexit()を作成します。この関数を改良し、ファイル「 /forum/includes/functions.php 」を開き、そこにpage_footer()関数を見つけて最後に追加する必要があります。
function page_footer($run_cron = true) { // ... garbage_collection(); if (class_exists('Yii', false) && Yii::app()->controller !== null) { $content = ob_get_clean(); Yii::app()->controller->renderPartial('//layouts/main', array('content'=>$content), false, true); } exit_handler(); }
ここで最も興味深い行はYii :: app()-> controller-> renderPartialで、フォーラムスクリプトの処理結果全体をYiiに渡して処理し、フォーラムのメインページがテンプレートのコンテンツ部分//レイアウト/メインに表示されます!
フォーラムの各ページ(たとえば、 viewforum.php 、 viewtopic.php )でこのメソッドを使用する必要があります。
この後、フォーラム内でYiiサイトのすべてのクラスを使用できることを忘れないでください。
もちろん、上に書かれていることはすべて改善できますが、私の仕事はあなたに働き方を与えることでした;-)
したがって、Yiiプロジェクトの一般的なテンプレート内に、「あたかも」サードパーティのスクリプトを絶対に表示できます。
upd:この記事の最新バージョン: http ://ivan-orlov.com/ru/articles/integraciya-phpbb-v-yii-framework