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

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

 

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

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

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

#1 Guest_RSS-Bot_*

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

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

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

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

© sM1Le, IBR

http://www.sysman.ru/
0

#2 Guest_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'] .")");


http://www.sysman.ru/
0

#3 Guest_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, который мы создали. Мы будем его использовать дальше.

http://www.sysman.ru/
0

#4 Guest_RSS-Bot_*

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

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

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

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

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

    [*]poll_state
    [*]last_vote
    [/list]в массиве топика $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++;
    }


    http://www.sysman.ru/
0

#5 Guest_RSS-Bot_*

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

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

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 - количество постов в разделе
    [/list]
    http://www.sysman.ru/
0

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

http://www.sysman.ru/
0

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


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

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


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

Заказ дизайна форума

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

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

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

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

IPB 3.x ¦ IPB 2.x

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

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