Форум IP.Board

Взаимосвязь с внешними приложениями

В данной записи мы распишем новые возможности IP.Board 3, которые позволят вам настроить взаимодействие форумов с вашим сайтом и создать собственную сеть.

Управление пользователями

С момента IP.Board 2, мы ввели возможность под названием «Модули входа». На самом деле это мини-каркас, позволяющий использовать собственный код для аутентификации и регистрации пользователей. Например, у вас есть база данных пользователей и вы хотите дать возможность им использовать форум с уже существующим аккаунтом (логин и пароль), тогда вы можете создать модуль входа, который бы работал с существующей базой пользователей или иной системой (через SOAP, XML-RPC, и тому подобное).

Система была доукомплектована новыми модулями по просьбам пользователей, теперь IP.Board будет комплектоваться модулями для LDAP и OpenID, что позволит легко использовать данные системы для аутентификации пользователей.

Использование IP.Board Engine

Не секрет, что IP.Board 3 полностью переписан. Новый каркас в полную силу использует PHP 5 и включает огромное количество экономящих время разработчика возможностей.

Довольно часто наши клиенты просят помочь объединить некоторые части форума с существующим сайтом. Например, они хотят получить список последних тем и сообщений с форума на сайте. Для решения таких вещей мы создали класс API в IP.Board 2.

Однако в случае, если необходимо было отправить какие-то данные в IP.Board, например новое сообщение или новое персональное сообщение, нужно было повозиться. Даже для использования какого-либо шаблона системы приходилось копировать и много кода.

Например, для того чтобы использовать наш механизм для работы с данными или нашу шаблонную систему, необходимо было копировать большую часть ‘index.php’, чтобы ipsclass корректно подключился. В IP.Board 3 этого больше не требуется.

Теперь использование стало очень простым:

require_once( './initdata.php' );
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );
$registry = ipsRegistry::instance();
$registry->init();

Эти несколько строк дадут вам полноценный доступ к: кешам, настройкам, управлению пользователями, работу с базой данных и многое другое.

Написание собственного кода
Довольно часто бывает необходимо добавить возможности IP.Board на собственный сайт. В Invision Power Board 3 это сделать легко.

Хотите добавить новое сообщение? Без проблем, просто используйте следующий код:

require_once( IPSLib::getAppDir( 'forums' ) . '/sources/classes/post/classPost.php' );
					
$postClass = new classPostForms( $registry );
$postClass->setForumID( $forumID );
$postClass->setForumData( $this->registry->class_forums->forum_by_id[ $forumID ] );
$postClass->setTopicTitle( "Моя тема" )
$postClass->setPostContent( "Привет, я содержимое сообщения!" );
$postClass->setAuthor( $memberID );
try
{
	$postClass->addTopic();
}
catch( Exception $error )
{
	print $error->getMessage();
}

Да все действительно просто, как в примере выше. Кстати, вы заметили try -> catch блок? Теперь он согласуется со всеми API-похожими функциями. Мы воспользовались механизмом исключений пятого PHP, чтобы возвращать в вызывающую программу информацию о возникших проблемах (конечно если такие будут). Мы так же вскоре предоставим список всех возможных исключений (в формате phpDoc).

Авторы модификаций для версии IP.Board 2 должны быть уже знакомы с похожими функциями, которые существовали в API второй версии. Тогда для них будет хорошей новостью информация о том, что для реализации данных возможностей API прослойка больше не нужна, потому как теперь используется оригинальный код форума, да-да тот самый, что используется в работе самого форума.

Хотите создать новое персональное обсуждение из собственной программы? Легко!

require_once( IPSLib::getAppDir( 'members' ) . '/sources/classes/messaging/messengerFunctions.php' );
$messengerFunctions = new messengerFunctions( $registry );
$messengerFunctions->sendNewPersonalTopic( $toMemberID, $fromMemberID, $invitedUserIDArray, $msgTitle, $msgContent );Нужен список личных сообщений?

require_once( IPSLib::getAppDir( 'members' ) . '/sources/classes/messaging/messengerFunctions.php' );
$messengerFunctions = new messengerFunctions( $registry );
$messengerFunctions->getPersonalTopicsList( $memberID, 'in' );

Другой довольно частый запрос это подключение шаблонов IP.Board в своем коде, снова все очень просто:

require_once( './initdata.php' );
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );
$registry = ipsRegistry::instance();
$registry->init();

print $registry->output->getTemplate( $templateGroup )->templateName( $templateArguments);

И это далеко не все, что вы сможете сделать. Однако, на перечисление всех возможных действий, которые вы теперь сможете сделать, потребовалось бы очень много времени и получилась бы очень большая заметка, поэтому мы ограничились самими интересными возможностями.

Back to top button