Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Matias Nemo

Генерация случайных чисел через BB-код

Рекомендованные сообщения

Добрый день!

Несколько недель бьюсь над задачей: нужно создать BB-код, который бы выводил заданное количество случайных целых чисел в некотором промежутке. Он должен выглядеть примерно вот так:

[rand]3 from 1 to 100[/rand]

Если в скрипте просто использовать функцию mt_rand() или rand(), то возникает проблема: выпавшие значения сохраняются на какое-то время, но после обновления кэша они меняются, т.к. парсер заново обрабатывает текст сообщения и заново генерирует случайные числа.

Чтобы избежать этого, можно задать исходное число для генератора случайных чисел (seed), тогда каждый раз последовательность случайных чисел будет одной и той же. При этом для каждого форумного поста это исходное число должно быть уникальным. Было бы идеально для этого брать ID поста. Есть ли какой-нибудь способ, как в класс кастомного BB-кода можно вытянуть ID поста, текст которого сейчас обрабатывается?

Какие были идеи:

1) Можно было бы попробовать сделать запрос к базе данных типа 

SELECT pid FROM posts WHERE post = $txt;

где $txt - текст поста, подающийся для парсинга в класс BB-кода. Однако текст для парсинга BB-кода и текст поста в базе данных отличаются друг от друга, надо будет его дополнительно обрабатывать, это проблематично.

2) Можно было бы попробовать через $request. Если создается новый пост (или топик), то выясняем это через через значение поля "do", и тогда ID нового поста можно узнать через запрос к базе данных:

SELECT MAX[pid] FROM posts;

к которому прибавляем единицу. Но мне непонятно, насколько это долговечный способ и что будет с итоговыми случайными значениями при обновлении кэша. Возможно, этот способ можно скомбинировать с каким-то другим: при создании поста делаем так, а потом добываем ID поста как-то иначе.

3) Можно было бы попробовать передавать ID поста из класса в класс через сигнатуры методов с самого начала, но тут надо хорошо разбираться в устройстве форума, чтобы ничего не поломать.

Может быть, у этой задачи есть какое-то простое и элегантное решение? Может быть, можно вообще не заморачиваться с определением ID поста и брать какое-нибудь другое уникальное число?

Поделиться сообщением


Ссылка на сообщение

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

2 часа назад, Matias Nemo сказал:

Может быть, у этой задачи есть какое-то простое и элегантное решение?

Может быть можно обойтись и без ббкода? Зачем вам это случайное число в сообщение?

Поделиться сообщением


Ссылка на сообщение

Чем-то похоже на 

 

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...