Взаимосвязь с внешними приложениями
В данной записи мы распишем новые возможности 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);
И это далеко не все, что вы сможете сделать. Однако, на перечисление всех возможных действий, которые вы теперь сможете сделать, потребовалось бы очень много времени и получилась бы очень большая заметка, поэтому мы ограничились самими интересными возможностями.