Перейти к контенту

Конвертер валюты в сообщении


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

Между посетителями из разных стран иногда возникают непонятки по поводу цен, так как каждый даёт цену в своей валюте, а для других это пустой звук. Появилась идея, а если бы каждый мог в сообщении ставить валюту в некоем унифицированном виде, например $123.45, а у себя в профиле каждый бы ввёл например курс своей валюты к доллару и значок своей валюты в дополнительных полях, и при просмотре этого сообщения, текст начинающийся на $, цифры что стоят следом пересчитываются по коэффициенту из профиля и добавляется текст из поля знак валюты. Ну к примеру пользователь ввёл у себя значение 30 и знак валюты "р." тогда вместо $123.45 будет показано 3703.50р. А другой пользователь ввёл у себя в профиле 0.7 и "EUR" и он видит то-же самое как 86.42EUR.

 

Это возможно?

 

Ну или через тег, например [currency]123.45[/currency] что-бы пересчитывалось и отображалось в валюте пользователя.

Ссылка на комментарий
Поделиться на других сайтах

Ну хорошо, поставлю вопрос иначе:

Возможно ли при создании нового BB-кода вызвать внутри него функцию форума, и как передать этой функции номер пользователя, просматривающего сообщение?

Ссылка на комментарий
Поделиться на других сайтах

Чем городить огород в парсере, ИМХО, логичней делать в class display, в котором уже вся страница собрана, и есть вся информация о текущем пользователе.
Ссылка на комментарий
Поделиться на других сайтах

Чем городить огород в парсере, ИМХО, логичней делать в class display, в котором уже вся страница собрана, и есть вся информация о текущем пользователе.

Просто ради эксперимента попробовал в class_display добавить str_replace, на определённое сочетание символов. Ввёл это сочетание в тестовое сообщение, и порадовался результатом - строка изменилась на другую. Но радость была недолгой, оказалось что строка так-же меняется и в окне редактирования сообщения. Это значит, что если сообщение содержит цену в изначальном формате, но если кому-либо понадобится вдруг это сообщение отредактировать, то изначальный код будет из сообщения удалён и заменён на результат преобразования, тоесть смысл теряется.

Вобщем идея не годится. Или тогда нужно вставить IF() и как-то определить, если это страница редактирования сообщения, то функцию не выполнять, или нужна другая идея.

Ссылка на комментарий
Поделиться на других сайтах

Появился ещё один вопрос по поводу всей информации о текущем пользователе. Массив $this->ipsclass->member содержит много информации, но не всю, как раз дополнительных полей профиля в нём нет. Вопрос - как их получить?
Ссылка на комментарий
Поделиться на других сайтах

Элементарно:

1. Делается ББ-код [valuta] => <span class='valuta'>.

2. Для отправки сообщения в парсере делаете пересчет из любых валют в условные единицы.

3. В class_display preg_replace-ами обсчитываете конструкции <span class='valuta'>цифра</span> - в зависимости от региона посетителя.

4. Для редактирования делаете как хотите. Хотите - оставляете в уях, в окне редактирования уже не будет спанов и class_display не тронет. Хотите, сделаете в class_display и для [valuta], чтобы пользователь в редакторе получил свою привычную валюту.

Ссылка на комментарий
Поделиться на других сайтах

Я ещё спрашивал, как в class_display получить значения дополнительных полей, те что в таблице pfield_contents для просматривающего пользователя?

 

Элементарно:

1. Делается ББ-код [valuta] => <span class='valuta'>.

2. Для отправки сообщения в парсере делаете пересчет из любых валют в условные единицы.

3. В class_display preg_replace-ами обсчитываете конструкции <span class='valuta'>цифра</span> - в зависимости от региона посетителя.

4. Для редактирования делаете как хотите. Хотите - оставляете в уях, в окне редактирования уже не будет спанов и class_display не тронет. Хотите, сделаете в class_display и для [valuta], чтобы пользователь в редакторе получил свою привычную валюту.

Да, спасибо, этот вариант сработал как надо, в сообщении текст меняет а в редакторе виден исходный тег. Остался последний штрих, добраться до данных из дополнительных полей.
Ссылка на комментарий
Поделиться на других сайтах

Я ещё спрашивал, как в class_display получить значения дополнительных полей, те что в таблице pfield_contents для просматривающего пользователя?

Хммм...

Если мне память не изменяет, для просматривающего они нигде не определены; придется наверное запрашивать из БД...

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

Может проще продублировать это поле в таблицу members_extra? Или вообще в этой таблице хранить информацию о стране/валюте пользователя?

Ссылка на комментарий
Поделиться на других сайтах

Да, но тогда придётся ещё вручную прописывать эти два поля в редакторе личных данных. Собственно я по этому пути уже и пошёл, только я добавил два поля в таблицу members. Сейчас занимаюсь поиском того файла, в котором выполняется сбор данных с инпутов и запись их в базу данных. Пару инпутов в стиле личных данных я уже добавил, осталось совсем немного.

 

Оказалось не всё так просто. Поля добавил, в профиле они есть, можно ввести и сохранить. С этим всем разобрался. Однако... в class_display массив ipsclass -> member этих полей так и не содержит. Если не сложно, подскажите, где искать тот запрос в базу, который собирает данные в этот массив? Приступаю к поискам и сам.

Ссылка на комментарий
Поделиться на других сайтах

В однушках в class_display определены все поля таблицы ibf_member_extra; рискну предположить, что и в двушках эта славная традиция сохранилась, очень удобно для создания новых настроек пользователя, которые будут требоваться на самых разных страницах.
Ссылка на комментарий
Поделиться на других сайтах

Проверил - перенёс два поля в member_extra. Результат нулевой, данные в массиве не появились. Нужно искать тот запрос, который вытаскивает данные из базы и добавить туда пару полей. Вот только ГДЕ ЭТО?
Ссылка на комментарий
Поделиться на других сайтах

Идея - потенциальный фейл, если каждый день не править скурпулёзно курсы валют. На мой взгляд, простую запись 123,45$ поймут в любой точке земного шара.

 

$ipsclass->member собирается в /classes/class_session, функция load_member. Хранить такие вещи следует в таблице ibf_members. Extra и pfields - для других целей.

 

Class_display вообще как можно меньше следует трогать.

 

Если форум версии 2.3 - изменения делать нужно в /action_public/topics.php. Добавлять там replace на переменную $post['post'] в функции parse_row. При простом просмотре тем парсер вообще не вызывается.

 

Личные данные - это /action_public/usercp.php -> собираем форму на основании данных; и /lib/func_usercp.php -> собираем данные из формы и сохраняем их в базу.

Ссылка на комментарий
Поделиться на других сайтах

Всё, нашёл! Это было в class_session

 

 

 

Ну вот, заглянул бы на форум 10 минут назад... Но всё равно спасибо!

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.