gsf Опубликовано 4 Июня 2009 Жалоба Поделиться Опубликовано 4 Июня 2009 Между посетителями из разных стран иногда возникают непонятки по поводу цен, так как каждый даёт цену в своей валюте, а для других это пустой звук. Появилась идея, а если бы каждый мог в сообщении ставить валюту в некоем унифицированном виде, например $123.45, а у себя в профиле каждый бы ввёл например курс своей валюты к доллару и значок своей валюты в дополнительных полях, и при просмотре этого сообщения, текст начинающийся на $, цифры что стоят следом пересчитываются по коэффициенту из профиля и добавляется текст из поля знак валюты. Ну к примеру пользователь ввёл у себя значение 30 и знак валюты "р." тогда вместо $123.45 будет показано 3703.50р. А другой пользователь ввёл у себя в профиле 0.7 и "EUR" и он видит то-же самое как 86.42EUR. Это возможно? Ну или через тег, например [currency]123.45[/currency] что-бы пересчитывалось и отображалось в валюте пользователя. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
gsf Опубликовано 6 Июня 2009 Автор Жалоба Поделиться Опубликовано 6 Июня 2009 Ну хорошо, поставлю вопрос иначе:Возможно ли при создании нового BB-кода вызвать внутри него функцию форума, и как передать этой функции номер пользователя, просматривающего сообщение? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
FatCat Опубликовано 6 Июня 2009 Жалоба Поделиться Опубликовано 6 Июня 2009 Чем городить огород в парсере, ИМХО, логичней делать в class display, в котором уже вся страница собрана, и есть вся информация о текущем пользователе. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
gsf Опубликовано 6 Июня 2009 Автор Жалоба Поделиться Опубликовано 6 Июня 2009 Чем городить огород в парсере, ИМХО, логичней делать в class display, в котором уже вся страница собрана, и есть вся информация о текущем пользователе.Просто ради эксперимента попробовал в class_display добавить str_replace, на определённое сочетание символов. Ввёл это сочетание в тестовое сообщение, и порадовался результатом - строка изменилась на другую. Но радость была недолгой, оказалось что строка так-же меняется и в окне редактирования сообщения. Это значит, что если сообщение содержит цену в изначальном формате, но если кому-либо понадобится вдруг это сообщение отредактировать, то изначальный код будет из сообщения удалён и заменён на результат преобразования, тоесть смысл теряется.Вобщем идея не годится. Или тогда нужно вставить IF() и как-то определить, если это страница редактирования сообщения, то функцию не выполнять, или нужна другая идея. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
gsf Опубликовано 6 Июня 2009 Автор Жалоба Поделиться Опубликовано 6 Июня 2009 Появился ещё один вопрос по поводу всей информации о текущем пользователе. Массив $this->ipsclass->member содержит много информации, но не всю, как раз дополнительных полей профиля в нём нет. Вопрос - как их получить? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
FatCat Опубликовано 6 Июня 2009 Жалоба Поделиться Опубликовано 6 Июня 2009 Элементарно:1. Делается ББ-код [valuta] => <span class='valuta'>. 2. Для отправки сообщения в парсере делаете пересчет из любых валют в условные единицы.3. В class_display preg_replace-ами обсчитываете конструкции <span class='valuta'>цифра</span> - в зависимости от региона посетителя.4. Для редактирования делаете как хотите. Хотите - оставляете в уях, в окне редактирования уже не будет спанов и class_display не тронет. Хотите, сделаете в class_display и для [valuta], чтобы пользователь в редакторе получил свою привычную валюту. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
gsf Опубликовано 7 Июня 2009 Автор Жалоба Поделиться Опубликовано 7 Июня 2009 Я ещё спрашивал, как в 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], чтобы пользователь в редакторе получил свою привычную валюту.Да, спасибо, этот вариант сработал как надо, в сообщении текст меняет а в редакторе виден исходный тег. Остался последний штрих, добраться до данных из дополнительных полей. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
FatCat Опубликовано 7 Июня 2009 Жалоба Поделиться Опубликовано 7 Июня 2009 Я ещё спрашивал, как в class_display получить значения дополнительных полей, те что в таблице pfield_contents для просматривающего пользователя?Хммм...Если мне память не изменяет, для просматривающего они нигде не определены; придется наверное запрашивать из БД...Если только для просмотра топиков, то модифицировать запрос дополнительных полей профиля в топике, чтобы собирал не только по писавшим в топике, но и по смотрящему...Может проще продублировать это поле в таблицу members_extra? Или вообще в этой таблице хранить информацию о стране/валюте пользователя? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
gsf Опубликовано 7 Июня 2009 Автор Жалоба Поделиться Опубликовано 7 Июня 2009 Да, но тогда придётся ещё вручную прописывать эти два поля в редакторе личных данных. Собственно я по этому пути уже и пошёл, только я добавил два поля в таблицу members. Сейчас занимаюсь поиском того файла, в котором выполняется сбор данных с инпутов и запись их в базу данных. Пару инпутов в стиле личных данных я уже добавил, осталось совсем немного. Оказалось не всё так просто. Поля добавил, в профиле они есть, можно ввести и сохранить. С этим всем разобрался. Однако... в class_display массив ipsclass -> member этих полей так и не содержит. Если не сложно, подскажите, где искать тот запрос в базу, который собирает данные в этот массив? Приступаю к поискам и сам. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
FatCat Опубликовано 7 Июня 2009 Жалоба Поделиться Опубликовано 7 Июня 2009 В однушках в class_display определены все поля таблицы ibf_member_extra; рискну предположить, что и в двушках эта славная традиция сохранилась, очень удобно для создания новых настроек пользователя, которые будут требоваться на самых разных страницах. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
gsf Опубликовано 7 Июня 2009 Автор Жалоба Поделиться Опубликовано 7 Июня 2009 Проверил - перенёс два поля в member_extra. Результат нулевой, данные в массиве не появились. Нужно искать тот запрос, который вытаскивает данные из базы и добавить туда пару полей. Вот только ГДЕ ЭТО? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
WildRAID Опубликовано 7 Июня 2009 Жалоба Поделиться Опубликовано 7 Июня 2009 Идея - потенциальный фейл, если каждый день не править скурпулёзно курсы валют. На мой взгляд, простую запись 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 -> собираем данные из формы и сохраняем их в базу. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
gsf Опубликовано 7 Июня 2009 Автор Жалоба Поделиться Опубликовано 7 Июня 2009 Всё, нашёл! Это было в class_session Ну вот, заглянул бы на форум 10 минут назад... Но всё равно спасибо! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.