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

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

Recommended Posts

Добрый день!

Несколько недель бьюсь над задачей: нужно создать 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 поста и брать какое-нибудь другое уникальное число?

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...