Создать новую тему в форуме API - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются вопросы по настройке и администрированию форумов IPB 3.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Установка, настройка и обслуживание форумов IPB 2.x.
Оформление форумов, включая верстку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

Теги не найдены

Страница 1 из 1

Создать новую тему в форуме API

#1 Пользователь не на сайте   Kill The STRELOK ответил: »

 
 
  • Newbie
  • *
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 2
  • Регистрация: 26-Июнь 09
  • Репутация: 0
  • IPB version:1.x
 

Отправлено 28 Май 2012 - 20:30

Собственно не получается, используя 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
0

#2 Пользователь не на сайте   Ritsuka ответил: »

 
 
  • ***
  • Смотреть галерею
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 1 908
  • Регистрация: 08-Июнь 09
  • Репутация: 539
  • IPB version:3.4.x
 

Отправлено 28 Май 2012 - 21:16

До боли знакомый кусок кода. Где взяли? :)

Нашел тут на форуме свой старый пример, он работает?

<?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;
}

?>


Если нет, то какую ошибку выводит? Что-то вполне могло поменяться с тех пор.
0

#3 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 126
  • Регистрация: 20-Март 09
  • Репутация: 2 446
  • IPB version:3.1.x
 

Отправлено 28 Май 2012 - 22:17

Помню тоже сталкивался с такой проблемы, что темы не хотели создаваться. вот мой - вроде работал.

$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();


0

#4 Пользователь не на сайте   Ritsuka ответил: »

 
 
  • ***
  • Смотреть галерею
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 1 908
  • Регистрация: 08-Июнь 09
  • Репутация: 539
  • IPB version:3.4.x
 

Отправлено 28 Май 2012 - 22:39

$post->setForumData( $registry->class_forums->forum_by_id[ $forum_id ] );


Вот это - костыль - был нужен из-за бага в классе, исправленного в 3.2.3.
0

#5 Пользователь не на сайте   Kill The STRELOK ответил: »

 
 
  • Newbie
  • *
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 2
  • Регистрация: 26-Июнь 09
  • Репутация: 0
  • IPB version:1.x
 

Отправлено 29 Май 2012 - 11:09

Проблему решил! Использую этот класс:
<?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);

0

#6 Пользователь не на сайте   Ritsuka ответил: »

 
 
  • ***
  • Смотреть галерею
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 1 908
  • Регистрация: 08-Июнь 09
  • Репутация: 539
  • IPB version:3.4.x
 

Отправлено 29 Май 2012 - 15:32

Опять тот же код, но в обертке класса. Ну ок, для коллекции отлично будет :)
0

Сообщить об этой теме:


Страница 1 из 1


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2018 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна