Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Интеграция phpBB в Yii framework

Anna | 31.05.2014 | нет комментариев

Пошаговая инструкция о том, как стремительно интегрировать форум phpBB в ваш сайт, написанный на Yii framework
Я собрал вместе все инструкции по интеграции форума в Yii framework, исполнив которые, вы гарантированно получите работающий форум и небольшой бонус в конце статьи.

Предполагается, что у вас теснее имеется действующий сайт, написанный на Yii, дальше необходимо скачать и установить форум:

  1. Скачиваем форум с официального сайта phpBB, при необходимости, там же скачиваем архив с русификатором
  2. Разархивируем архив с форумом в папку вашего сайта, в поддиректорию “/forum“, если Вы скачали русификатор, то так же исполните те действия, которые были описаны на той странице, откуда скачивали русификатор (там инструкция о том, в какие директории нужно запихать файлы русификации, обратите внимание, что необходимо лишь дополнить те директории файлами русификатора, а не затирать)
  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-сайте теснее применяется класс “user“, то исполним следующее:

    • Открываем файл “/forum/includes/session.php” и на 1500 строке кода меняем наименование класса “user” на “bbuser” и переименовываем функцию внутри класса:
      class user extends session
      {
          // ...    
          function user()    
          // ...
      }
      

      превращаем в:

      class bbuser extends session
      {
          // ...    
          function bbuser()    
          // ...
      }
      
    • В файле “/forum/common.php” на 101 строке меняем
      $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`ами:
    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():

    page_footer();
    

    данная функция и отображает каждый контент форума, но если мы изучим её, то увидим, что она завершает работу приложения, нужно поправить это, переходим в файл “/forum/includes/functions.php” и закомментируем строку 4812:

    function page_footer($run_cron = true)
    {
    	// ...
    	garbage_collection();
    	exit_handler(); // Вот эту строку удалим либо закомментируем
    }
    

    Возвращаемся обратно в файл “/forum/index.php” в самый его конец и пишем позже функции page_footer():

    // ...
    page_footer();
    
    $content = ob_get_clean(); // $content будет содержать html основной страницы форума.
    $controller->renderPartial('//layouts/main', array('content'=>$content), false, true);
    

Самая последняя строка самая интересная, мы каждый итог работы скрипта форума передаём на обработку в Yii, и сейчас основная страница форума будет отображена в контентной части Вашего образца “//layouts/main“!
Данный метод вам придётся применять для всякой страницы форума(скажем viewforum.phpviewtopic.php).
Не забываем, что позже такого мы можем применять все классы вашего Yii-сайта внутри форума.

Безусловно всё, что написано выше, дозволено усовершенствовать, но моей задачей было дать вам работающий метод ;-)

Таким образом, вы можете безусловно всякий сторонний скрипт отобразить «как бы» внутри всеобщего образца вашего Yii-плана!

Источник: programmingmaster.ru

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля помечены (обязательно)

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2014 © BB3x.ru - русская поддержка форума phpBB