Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Guest RSS-Bot

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

Recommended Posts

Guest RSS-Bot

Song:

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

 

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

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

 

© sM1Le, IBR

Share this post


Link to post
Share on other sites
Guest RSS-Bot

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

 

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

 

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

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

 

Добавляем топик в таблицу топиков:

        [color=green]//-------------------------------------------------[/color]        [color=green]// Insert the topic into the database to get the[/color]        [color=green]// last inserted value of the auto_increment field[/color]        [color=green]// follow suit with the post[/color]        [color=green]//-------------------------------------------------[/color]                [color=#048284]$db_string[/color] = [color=#048284]$DB[/color]->compile_db_insert_string( [color=#048284]$this[/color]->topic );                [color=#048284]$DB[/color]->query("INSERT INTO ibf_topics (" .[color=#048284]$db_string[/color]['FIELD_NAMES']. ") VALUES (". [color=#048284]$db_string[/color]['FIELD_VALUES'] .")");        [color=#048284]$new_topic_id[/color]  = [color=#048284]$DB[/color]->get_insert_id();

 

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

Share this post


Link to post
Share on other sites
Guest RSS-Bot

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

 

Подготавливаем массив поста:

[color=#048284]$post[/color]         = [b]array[/b](            'author_id'       => id автора поста,            'ip_address'      => ip адрес автора поста (обычно используется глобальная переменная [color=#048284]$ibforums[/color]->input['IP_ADDRESS']),            'post_date'       => время поста,            'edit_time'       => время редактирования поста,            'post'            => сам пост,            'author_name'     => имя автора,            'forum_id'        => id форума,            'topic_id'        => id топика (переменная [color=#048284]$new_topic_id[/color], которум мы определили выше),            'queued'          => премодерация ([color=navy]0[/color] - нормальный пост, [color=navy]1[/color] - на премодерации),            'new_topic'       => является ли первым постом темы ([color=navy]0[/color]/[color=navy]1[/color]),            'use_sig'     => включить в пост подпись автора или нет ([color=navy]0[/color]/[color=navy]1[/color]),            'use_emo'     => использовать в посте смайлики ([color=navy]0[/color]/[color=navy]1[/color]),            'icon_id'     => id иконки,            'attach_id'   => реальное имя файла аттача поста,            'attach_hits' => количество открытий аттача,            'attach_type' => тип аттача,            );[color=#048284]$db_string[/color] = [color=#048284]$DB[/color]->compile_db_insert_string([color=#048284]$post[/color]);

 

Добавляем пост в таблицу постов:

[color=#048284]$DB[/color]->query("INSERT INTO ibf_posts (" .[color=#048284]$db_string[/color]['FIELD_NAMES']. ") VALUES (". [color=#048284]$db_string[/color]['FIELD_VALUES'] .")");

Share this post


Link to post
Share on other sites
Guest RSS-Bot

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

Share this post


Link to post
Share on other sites
Guest RSS-Bot

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

 

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

 

Голосование - это тот же топик. Отличается только лишь включенными полями:

    • poll_state
    • last_vote

в массиве топика $new_topic. Для создания топика (не голосования) они не задаются.

 

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

 

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

 

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

 

Добавляем голосования в таблицу голосований:

        [color=#048284]$db_string[/color] = [color=#048284]$std[/color]->compile_db_string( [color=#048284]$poll[/color] );                                                      [color=#048284]$DB[/color]->query("INSERT INTO ibf_polls (" .[color=#048284]$db_string[/color]['FIELD_NAMES']. ") VALUES (". [color=#048284]$db_string[/color]['FIELD_VALUES'] .")");

 

Переменная $Варианты голосования определяются так:

        [color=#048284]$poll_choices[/color] = "Вариант 1<br>Вариант 2<br>Вариант 3<br>";        [color=#048284]$[/color]Варианты голосования  = [b]array[/b]();        [color=#048284]$count[/color] = [color=navy]0[/color];        [color=#048284]$polls[/color] = explode( "<br>", [color=#048284]$poll_choices[/color] );                [b]foreach[/b] ( [color=#048284]$polls[/color] [b]as[/b] [color=#048284]$polling[/color] )        {            [color=#048284]$[/color]Варианты голосования[] = [b]array[/b]( [color=#048284]$count[/color], [color=#048284]$polling[/color], [color=navy]0[/color] );            [color=#048284]$count[/color]++;        }

Share this post


Link to post
Share on other sites
Guest RSS-Bot

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

 

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

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

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

 

После чего нужно обновить статистику таблицы ibf_forums раздела, в который вставлялась информация. Это поля:

    • last_post - время последнего топика
    • last_poster_id - id автора последнего сообщения в этом топике
    • last_poster_name - имя автора последнего сообщения в этом топике
    • last_id - id последней темы в разделе
    • last_title - название последней темы в разделе
    • topics - количество топиков в разделе
    • posts - количество постов в разделе

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...