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



All Articles