Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Генерация случайных чисел через 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

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.