Важное с Sysman.Ru: 2.x: Как создать топик? - Дизайн и модификация Invision Power Board

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

 

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

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

Страница 1 из 1
  • Вы не можете создавать новые темы
  • Тема закрыта

Важное с Sysman.Ru: 2.x: Как создать топик?

#1 Гость RSS-Bot ответил:

 
 
  • Группа: Гости
 

Отправлено 16 Август 2007 - 09:50

Song:
В IP.Board 2.1 и выше есть API, которое позволяет создавать новые темы и публиковать сообщения: ./sources/api/api_topics_and_posts.php

Внутри файла есть инструкция, как пользоваться данным API.
Помимо описания назначения этих API там так же указаны примеры использования.

© sM1Le, IBR
0

#2 Гость RSS-Bot ответил:

 
 
  • Группа: Гости
 

Отправлено 16 Август 2007 - 15:27

Song: 2. Добавляем посты этого топика

Подготавливаем массив поста:
$post         = array(
            'author_id'       => id автора поста,
            'ip_address'      => ip адрес автора поста (обычно используется глобальная переменная $ibforums->input['IP_ADDRESS']),
            'post_date'       => время поста,
            'edit_time'       => время редактирования поста,
            'post'            => сам пост,
            'author_name'     => имя автора,
            'forum_id'        => id форума,
            'topic_id'        => id топика (переменная $new_topic_id, которум мы определили выше),
            'queued'          => премодерация (0 - нормальный пост, 1 - на премодерации),
            'new_topic'       => является ли первым постом темы (0/1),

            'use_sig'     => включить в пост подпись автора или нет (0/1),
            'use_emo'     => использовать в посте смайлики (0/1),
            'icon_id'     => id иконки,
            'attach_id'   => реальное имя файла аттача поста,
            'attach_hits' => количество открытий аттача,
            'attach_type' => тип аттача,
            );

$db_string = $DB->compile_db_insert_string($post);


Добавляем пост в таблицу постов:
$DB->query("INSERT INTO ibf_posts (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");

0

#3 Гость RSS-Bot ответил:

 
 
  • Группа: Гости
 

Отправлено 16 Август 2007 - 15:18

Song: В форуме версии 1.х это делается вручную примерно следующим образом:

1. Добавляем топик (т.е. только оглавление топика, т.к. сам топик - это первый его пост).

Опеределяем массив данных топика. Делается это в следующих основных полях таблицы ibf_topics:
$new_topic = array(
            'title'     => название топика,
            'description'     => описание топика,
            'posts'         => кол-во постов в топике,
            'state'     => состояние топика: 'open' - обычный топик, 'closed' - закрытый, 'link' - состояние перенаправления (например, хвост от перемещённой темы ни что иное, как топик с состоянием 'link'),
            'start_date'     => время начала,
            'last_post'     => последний пост в топике (время),
            'last_poster_id'   => id последнего автора в теме,
            'author_mode'      => не используется,
            'poll_state'       => состояние голосования (0 - для топика, 1 - для голосования),
            'last_vote'        => последний голос (время),
            'views'            => количество прсмотров,
            'pinned'           => состояние закрепления топика (1 - прикреплён),
            'last_poster_name' => имя последнего автора в теме,
            'icon_id'     => id_иконки,
            'forum_id'     => id форума в котором будет находится,
            'approved'        => разрешён? (1 - разрешён, 0 - на премодерации),
     );


Добавляем топик в таблицу топиков:
        //-------------------------------------------------
        // Insert the topic into the database to get the
        // last inserted value of the auto_increment field
        // follow suit with the post
        //-------------------------------------------------
        
        $db_string = $DB->compile_db_insert_string( $this->topic );
        
        $DB->query("INSERT INTO ibf_topics (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");
        $new_topic_id  = $DB->get_insert_id();


На выходе имеем идентификатор топика $new_topic_id, который мы создали. Мы будем его использовать дальше.
0

#4 Гость RSS-Bot ответил:

 
 
  • Группа: Гости
 

Отправлено 16 Август 2007 - 15:51

Song: 3. Добавление голосования

Добавление в таблицу топиков (ibf_topics):

Голосование - это тот же топик. Отличается только лишь включенными полями:
    [list]
  • poll_state
  • last_vote
в массиве топика $new_topic. Для создания топика (не голосования) они не задаются.

Добавление самого голосования:

Опеределяем массив данных голосования. Делается это в следующих основных полях таблицы ibf_polls:

        $poll = array (

              'tid'               => id топика (переменная $new_topic_id, которум мы определили выше),
              'forum_id'          => id форума,
              'start_date'        => время голосования,
              'choices'           => serialize($варианты голосования),
              'starter_id'        => id автора голосования/топика,
              'votes'             => количество голосов,
              'poll_question'     => вопрос голосования,
            );


Добавляем голосования в таблицу голосований:
        $db_string = $std->compile_db_string( $poll );
                                              
        $DB->query("INSERT INTO ibf_polls (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");


Переменная $Варианты голосования определяются так:
        $poll_choices = "Вариант 1<br>Вариант 2<br>Вариант 3<br>";
        $Варианты голосования  = array();

        $count = 0;
        $polls = explode( "<br>", $poll_choices );
        
        foreach ( $polls as $polling )
        {
            $Варианты голосования[] = array( $count, $polling, 0 );

            $count++;
        }

0

#5 Гость RSS-Bot ответил:

 
 
  • Группа: Гости
 

Отправлено 16 Август 2007 - 16:00

Song: Таким образом:

- для создания топика нужно сделать запросы по вставке в таблицы: ibf_topics, ibf_posts
- для создания голосования нужно сделать запросы по вставке в таблицы: ibf_topics, ibf_polls, ibf_posts
- для создания очередного поста в топике нужно сделать запрос по вставке только в таблицу ibf_posts

После чего нужно обновить статистику таблицы ibf_forums раздела, в который вставлялась информация. Это поля:
    [list]
  • last_post - время последнего топика
  • last_poster_id - id автора последнего сообщения в этом топике
  • last_poster_name - имя автора последнего сообщения в этом топике
  • last_id - id последней темы в разделе
  • last_title - название последней темы в разделе
  • topics - количество топиков в разделе
  • posts - количество постов в разделе

0

#6 Гость RSS-Bot ответил:

 
 
  • Группа: Гости
 

Отправлено 16 Август 2007 - 15:31

Song: Примечания:

1. Для облегчения формирования массива поста в зависимости от тех или иных условий, если этот пост добавлятся в одной из постовых функций (post_**.php, находятся в папке sources/lib) вызывается специальная функция класса Post (Post.php) - compile_post
В ней формируется "скелет" поста при создании топика/голосования, при ответе в него, при редактировании поста.

2. Пост сохраняется в БД в html формате, поэтому, если в посте используется оформление с помощью BB тегов, их надо переконвертировать в html формат. Это делает парсер форума. Пример сохранения в БД текста через парсер также располагается в функции compile_post. Подробней о парсере форума можно посмотреть здесь.

3. В поле posts массива топика надо занести количество добавляемых постов для этого топика, причём сам пост-топик (т.е. первое сообщение темы) не считается за полноценный пост, поэтому в это поле надо заносить количество_всех_сообщений топика - 1

4. Если вы хотите поставить топик на премодерацию, нужно выставить поле approved массива $new_topic в 0 и поле queued массива $post в 1 (первого сообщения темы).
Если нужно поставить пост на премодераци, то тогда только поле queued массива $post в 1.

5. Не обязательно заполнять все поля массива. Здесь они даны для разъяснения их предназначения. Можно не включать параметры в соответствующие массивы, и они добавятся параметрами по умолчанию.
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-2017 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна