Опубликовано: 28 мая 201213 г Собственно не получается, используя API форума, создать новую тему в отдельной ветке форума. Создаю следующим кодом:require_once( 'forums/initdata.php' ); require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' ); $registry = ipsRegistry::instance(); $registry->init(); $forumID = '2'; $memberID = '109'; require_once( IPSLib::getAppDir( 'forums' ) . '/sources/classes/post/classPost.php' ); $postClass = new classPost( $registry ); $postClass->setForumID( $forumID ); $postClass->setTopicTitle( "My Topic" ); $postClass->setPostContent( "Hello, I am post content!" ); $postClass->setAuthor( $memberID ); try { $postClass->addTopic(); } catch( Exception $error ) { print $error->getMessage(); }В чём проблема? Ошибок код не выдаёт, но и тема на форуме не создаётся. IPB 3.2.3
Опубликовано: 28 мая 201213 г До боли знакомый кусок кода. Где взяли? :) Нашел тут на форуме свой старый пример, он работает? <?php define('IPS_ENFORCE_ACCESS', true); require_once( 'initdata.php' ); require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' ); require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' ); $registry = ipsRegistry::instance(); $registry->init(); $classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . '/sources/classes/post/classPost.php', 'classPost', 'forums' ); $post = new $classToLoad( $registry ); $post->setForumID( 1 ); $post->setAuthor( 1 ); $post->setPostContent( "[i]Hello[/i] [b]there![/b]" ); $post->setTopicTitle('Hi!'); if($post->addTopic()) { echo 'Тема успешно создана'; } else { echo 'Ошибка: '.$post->_postErrors; } ?> Если нет, то какую ошибку выводит? Что-то вполне могло поменяться с тех пор.
Опубликовано: 28 мая 201213 г Помню тоже сталкивался с такой проблемы, что темы не хотели создаваться. вот мой - вроде работал. $post->setForumID( $forum_id ); $post->setForumData( $registry->class_forums->forum_by_id[ $forum_id ] ); $post->setAuthor( $author_id ); $post->setPostContent( "[i]Hello[/i] [b]there![/b]" ); $post->setTopicTitle( 'Hi!' ); $post->setPublished( true ); $post->setSettings( array( 'enableSignature' => 1, 'enableEmoticons' => 1, 'post_htmlstatus' => 0, 'enableTracker' => 0, ) ); if( ! $post->addTopic() ) { die( 'Error addTopic: '.$post->_postErrors ); } $topic_data = $post->getTopicData();
Опубликовано: 28 мая 201213 г $post->setForumData( $registry->class_forums->forum_by_id[ $forum_id ] ); Вот это - костыль - был нужен из-за бага в классе, исправленного в 3.2.3.
Опубликовано: 29 мая 201213 г Автор Проблему решил! Использую этот класс:<?php class AddTopic { /** * @var classPost */ private $post; function __construct() { if (!defined('IPB3_ROOT')) { define('IPB3_ROOT', 'forums'); } define('IPB_THIS_SCRIPT', 'public'); define('IPS_PUBLIC_SCRIPT', 'index.php'); define('IPS_ENFORCE_ACCESS', true); require_once IPB3_ROOT.'/initdata.php'; require_once IPS_ROOT_PATH.'sources/base/ipsRegistry.php'; require_once IPS_ROOT_PATH.'sources/base/ipsController.php'; ipsRegistry::init(); // Нет смысла каждый раз заново создавать require_once IPSLib::getAppDir('forums').'/sources/classes/post/classPost.php'; $this->post = new classPost(ipsRegistry::instance()); } public function createTopic($memberId=1, $forumId=2, $topicTitle='Новая тема', $postContent='Тело сообщения', $timestamp=null) { if (!$timestamp) { $timestamp = time(); } if (!isset(ipsRegistry::getClass('class_forums')->forum_by_id[$forumId])) { return false; } // Настраиваем $this->post->_timestamp=$timestamp; $this->post->setIsPreview(false); $this->post->setForumData(ipsRegistry::getClass('class_forums')->forum_by_id[$forumId]); $this->post->setForumID($forumId); $this->post->setAuthor($memberId); $this->post->setPublished(true); $this->post->setSettings(array( 'enableSignature' => 1, 'enableEmoticons' => 1, 'post_htmlstatus' => 1, 'enableTracker' => 0, )); $this->post->setTopicTitle($topicTitle); // Проблема в том, что контент кешируется при первом вызове // чтобы работало - его нужно сбросить $this->post->setPostContentPreFormatted(null); $this->post->setPostContent($postContent); // Создаем тему try { if ($this->post->addTopic() === false) { // А тут все наши ошибки... // $this->post->_postErrors; echo 'Тема не может быть создана<br />'; return false; } } catch(Exception $exc) { echo 'Ошибка при создании темы: '.$exc->getMessage().'<br />'; return false; } // Получаем свойства новой темы и её первого сообщения return array( $this->post->getTopicData(), $this->post->getPostData() ); } } ?> $topic = new AddTopic(); $Result = $topic->createTopic(1, 1, 'Название темы', 'Контент'); print_r($Result);
Опубликовано: 29 мая 201213 г Опять тот же код, но в обертке класса. Ну ок, для коллекции отлично будет :)
Собственно не получается, используя API форума, создать новую тему в отдельной ветке форума. Создаю следующим кодом:
require_once( 'forums/initdata.php' ); require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' ); $registry = ipsRegistry::instance(); $registry->init(); $forumID = '2'; $memberID = '109'; require_once( IPSLib::getAppDir( 'forums' ) . '/sources/classes/post/classPost.php' ); $postClass = new classPost( $registry ); $postClass->setForumID( $forumID ); $postClass->setTopicTitle( "My Topic" ); $postClass->setPostContent( "Hello, I am post content!" ); $postClass->setAuthor( $memberID ); try { $postClass->addTopic(); } catch( Exception $error ) { print $error->getMessage(); }В чём проблема? Ошибок код не выдаёт, но и тема на форуме не создаётся. IPB 3.2.3