Опубликовано: 16 августа 200718 г Song: В IP.Board 2.1 и выше есть API, которое позволяет создавать новые темы и публиковать сообщения: ./sources/api/api_topics_and_posts.php Внутри файла есть инструкция, как пользоваться данным API.Помимо описания назначения этих API там так же указаны примеры использования. © sM1Le, IBR
Опубликовано: 16 августа 200718 г 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, который мы создали. Мы будем его использовать дальше.
Опубликовано: 16 августа 200718 г 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'] .")");
Опубликовано: 16 августа 200718 г 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. Не обязательно заполнять все поля массива. Здесь они даны для разъяснения их предназначения. Можно не включать параметры в соответствующие массивы, и они добавятся параметрами по умолчанию.
Опубликовано: 16 августа 200718 г Song: 3. Добавление голосования Добавление в таблицу топиков (ibf_topics): Голосование - это тот же топик. Отличается только лишь включенными полями:poll_statelast_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]++; }
Опубликовано: 16 августа 200718 г 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 - количество постов в разделе
Song:
В IP.Board 2.1 и выше есть API, которое позволяет создавать новые темы и публиковать сообщения: ./sources/api/api_topics_and_posts.php
Внутри файла есть инструкция, как пользоваться данным API.
Помимо описания назначения этих API там так же указаны примеры использования.
© sM1Le, IBR