Потянув все сообщения в vBulletin - PullRequest
0 голосов
/ 19 сентября 2011

Я хочу создать скрипт, который подсчитывает количество слов в темах на форуме vBulletin.В сущности, я хочу извлечь эту базу данных из базы данных mysql и поиграть с ней.У меня нет опыта работы с vBulettin, поэтому я думаю о двух способах:

  1. Предоставляет ли vBulletin API для работы с базами данных.(Позвольте мне захватить все темы потоков и URL-адреса).Я почти уверен, что есть ссылка с чего начать?

  2. Есть ли решение, которое делает это без вмешательства vBulletin.Это означает, что нужно вручную извлечь данные из базы данных mysql и выполнить типичные операции.

Я предпочту второй метод, если кривая обучения vBulettin слишком крутая.Спасибо за совет.

1 Ответ

10 голосов
/ 25 сентября 2011

Это для vBulletin 3 или 4?

В основном я работаю с vB3, и самый быстрый способ включить все ресурсы vBulletin - это создать новый php-файл в каталоге вашего форума со следующим кодом.

<?php
error_reporting(E_ALL & ~E_NOTICE & ~8192);
require_once('./global.php');
var_dump($vbulletin);

Эта переменная $ vbulletin - это объект реестра, содержащий практически все, что вам когда-либо понадобится, включая соединение с базой данных, функции чтения и записи, данные userinfo, очищенные значения _POST и _REQUEST и многое другое (фразы , данные сеанса, кэши и т. д.).

Есть 4 функции базы данных, которые вы будете использовать чаще всего.

  • $ vbulletin -> db -> query_read () // получить более одной строки
  • $ vbulletin -> db -> fetch_array () // преобразует возвращенные данные query_read в массив
  • $ vbulletin -> db -> query_first () // извлекает одну строку
  • $ vbulletin -> db -> query_write () // обновить, вставить или удалить строки, таблицы и т. Д.

query_read - это то, что вы будете использовать, когда ожидаете более одного результата, через который вы собираетесь зацикливаться. Например, если вы хотите сосчитать все слова в одной цепочке, вам нужно будет запросить таблицу постов с идентификатором потока, просмотреть все записи в этой ветке и сосчитать все слова в сообщении.

Примечание: «TABLE_PREFIX» - это константа, заданная в config.php. Важно всегда добавлять имя таблицы к этой константе на тот случай, если другие форумы решат префикс своих таблиц.

<?php
error_reporting(E_ALL & ~E_NOTICE & ~8192);
require_once('./global.php');

$threadid = 1;

// fetch all post from a specfic thread
$posts = $vbulletin->db->query_read("
    SELECT pagetext 
      FROM " . TABLE_PREFIX . "post 
     WHERE threadid = $threadid
");

/**
 * Loop through each post.
 *
 * Here we use the "fetch_array" method to convert the MySQL data into 
 * a useable array. 99% of the time you'll use "fetch_array" when you 
 * use "query_read".
 *
 * $post will contains the post data for each loop. In our case, we only
 * have "pagetext" avaliable to use since that's all we told MySQL we needed
 * in our query. You can do SELECT * if you want ALL the table data.
 */
while ($post = $vbulletin->db->fetch_array($posts)) {
    $totalWords = $totalWords + str_word_count($post['pagetext']);
}

/**
 * Print the total number of words this thread contains.
 *
 * The "vb_number_format" is basically wrapper of php's "number_format", but
 * with some vBulletin extras. You can visit the /includes/functions.php file
 * for all the functions available to you. Many of them are just convenient 
 * functions so you don't have to repeat a lot of code. Like vBDate(), or 
 * is_valid_email().
 */
echo sprintf("Thread ID %i contains %s words", $threadid, vb_number_format($totalWords));

Функция query_first используется для извлечения одной строки из базы данных. Не требуется зацикливание или что-то в этом роде. Если, например, вы хотите получить информацию об одном пользователе из базы данных - для которой вам не нужен запрос, но мы сделаем это в качестве примера - вы бы использовали что-то вроде этого.

<?php
error_reporting(E_ALL & ~E_NOTICE & ~8192);
require_once('./global.php');

$userid = 1;
$user = $vbulletin->db->query_first("
    SELECT *
      FROM " . TABLE_PREFIX . "user
     WHERE userid = $userid
");

echo sprintf("Hello, %s. Your email address is %s and you have %s posts",
    $user['username'], 
    $user['email'], 
    vb_number_format($user['posts'])
);

Наконец, если вы хотите обновить что-либо в базе данных, вы должны использовать « query_write ». Эта функция довольно проста. Эта функция принимает любой запрос вставки или удаления обновления MySQL. Например, если бы мне нужно было обновить идентификатор Yahoo Yahoo, вы бы сделали.

<?php
error_reporting(E_ALL & ~E_NOTICE & ~8192);
require_once('./global.php');

$userid = 1;
$update = $vbulletin->db->query_write("
    UPDATE " . TABLE_PREFIX . "user
       SET yahoo = 'myYahooID@yahoo.com'
     WHERE userid = $userid
");

if ($update) {
    $userinfo = fetch_userinfo($userid);
    echo sprintf("Updated %s yahoo ID to %s", $userinfo['username'], $userinfo['yahoo']);
}

Надеюсь, это поможет вам начать. Я бы порекомендовал использовать vBulletin 3, пока вы не освоитесь с ним. Я думаю, тебе будет легче. Большая часть этого будет переводиться в vBulletin 4 с некоторыми изменениями, но эта кодовая база не так дружелюбна для новичков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...