YiiフレームワークでのPhpBBの統合

Yiiフレームワークで書かれたサイトにphpBBフォーラムを迅速に統合する方法に関するステップバイステップの説明


フォーラムをYiiフレームワークに統合するためのすべての指示をまとめました。これに続いて、記事の最後に機能するフォーラムと小さなボーナスを取得することが保証されます。

Yiiで書かれた有効なサイトが既にあると想定されている場合は、フォーラムをダウンロードしてインストールする必要があります。
  1. 公式のphpBB Webサイトからフォーラムダウンロードします。必要に応じて、同じ場所に亀裂のあるアーカイブをダウンロードします
  2. フォーラムのアーカイブをサイトのフォルダーの「/ forum 」サブディレクトリに解凍します。クラックをダウンロードした場合は、クラックのダウンロード元のページに記載されている手順も実行します(ファイルを配置するディレクトリの指示がありますRussification、それらのディレクトリをクラックファイルで補完するだけで、上書きしないでください)
  3. ブラウザでyoursite.com/forum/index.phpを開くと、フォーラムのインストールページが表示され、インストールが実行されます。複雑なことは何もありません。 インストールが完了したら、サーバーからフォルダー「 / forum / install 」を削除します。
    フォーラムのデバッグの便宜上、「 /forum/config.php 」ファイルの行のコメントを外すことをお勧めします。
    @define('DEBUG', true); @define('DEBUG_EXTRA', true); 
    これにより、フォーラムテンプレートのキャッシュが無効になり、発生したエラーが表示されます。
  4. 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'] : '', // ... ), // ... ), 
  5. 次に、 ここですでに説明した指示に従ってすべてを行いますが、ここでは同じことを、不必要な言葉なしで書きます。
    ユーザークラスが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(); 

  6. ディレクトリ「 / 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(); } } 
  7. ユーザーモデル(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); 
  8. フォーラムで登録と承認を終了する必要がある場合は、ファイル「 /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をフォーラムに直接接続します。
  1. 次の内容の新しいファイル「 /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'); 
  2. ファイル " /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.phpviewtopic.php )でこのメソッドを使用する必要があります。
この後、フォーラム内でYiiサイトのすべてのクラスを使用できることを忘れないでください。

もちろん、上に書かれていることはすべて改善できますが、私の仕事はあなたに働き方を与えることでした;-)

したがって、Yiiプロジェクトの一般的なテンプレート内に、「あたかも」サードパーティのスクリプトを絶対に表示できます。

upd:この記事の最新バージョン: http ://ivan-orlov.com/ru/articles/integraciya-phpbb-v-yii-framework

Source: https://habr.com/ru/post/J190868/


All Articles