"Чат" техподдержки
режим чата на форумах ( = способы экспресс-уведомлений)
Страницы:
Распечатать
- 1
- 2
4X_Pro,можешь помочь твоему давнему читателю, тоесть мне? У меня на форуме я сделал дополнение, делающее выборку по запросу quote user. Тоесть делается выборка из бд, где списком выводятся посты, с юзерами процитировавшими меня. Была проблемма с кирилистическими никами, я исправил, не работало с русскими никами. Теперь работает, но выборку по русским никам показывает всю имеюющуюся, а по латинским (так нужно)-только новую. Движок-phpbb3. Давать кусок кода?
Всё, что мне известно о PHP-меня научил 4X_Pro
Опрос пользователей о деятельности _1_ http://intbpro.ru/flood/119/
4X_Pro написал(а):
Только я так и не понял, нужно, чтобы выборка шла только по новым сообщениям или наоборот, по всем?
Спасибо за отзывчивость. Тронут. Я сейчас пишу с мобильного, отправился на 2 дня в командировку. Там дело в свойстве htmlentitles () Чтоб ты полностью владел информацией, я по возвращению предоставлю код файла, и правки, которые я делал. Через 2 дня. Заскриню, в общем полностью опишу ситуацию. Сейчас доступа к серверу не имею, с мобильного не хочу лезть туда. Предварительно скажу, что некорректно работает с кириллицей, версия PHP 5.3
удачи и до связи.
Всё, что мне известно о PHP-меня научил 4X_Pro
Опрос пользователей о деятельности _1_ http://intbpro.ru/flood/119/
. Редактировалось 1 раз, последний — #14
Пользоватся не буду написал(а):
делается выборка из БД, где списком выводятся посты, с юзерами процитировавшими меня.
В постановке этой задачи не хватает универсальности:
1) Обычно, вопрос касается не только "меня". Например, ...
|
Функция поиска ответов на конкретный пост (не обязательно с цитированием) – это одна из главных возможностей современных форумов. Странно, что до сих пор даже в популярных движках этой возможности нет по умолчанию, и приходится программировать её вручную.
2) Кроме типовых запросов пригодятся модифицированные. Возможность изменять типовой запрос тоже надо предусматривать. И конечно, предоставлять её не только админам, но и обычным продвинутым пользователям.
4X_Pro написал(а):
Только я так и не понял, нужно, чтобы выборка шла только по новым сообщениям или наоборот, по всем?
Я вернулся. Выборка должна идти только по непрочитанным.
Суть проблеммы:
В инклуд файле function.php я вношу строку, которой там ранее не было. Вначале эта строка выглядела так:
'U_SEARCH_WHO_QUOTED_ME'=> append_sid("{$phpbb_root_path}search.$phpEx", 'st=0&sk=t&sd=d&sr=posts&keywords=quote+' . htmlentities($user->data['username'])), // & is and + is +
Вследствии этого возникает проблемма, что пользователи с латинскими никами, и цифровыми (например 1) Видят результаты поиска, так, как и задумывалось (см. скрин, я там всё написал и подчеркнул)
.
.
А вот пользователи с никами на кириллице (в частности я), видят пустую сроку. Битая кодировка. См. скрин.
.
.
После этого я внёс правки. Строка стала выглядеть так:
'U_SEARCH_WHO_QUOTED_ME'=> append_sid("{$phpbb_root_path}search.$phpEx", 'st=0&sk=t&sd=d&sr=posts&keywords=quote+' . htmlentities($user->data['username'],ENT_QUOTES,"UTF-8")), // & is and + is +
.
.
После этого кирилистические ники стали отображаться. Но показывет ВСЕ цитаты, где меня процитировали. А нужны-только новые, как с латинскими никами. См. скрин. Как исправить это?
.
.
Всё, что мне известно о PHP-меня научил 4X_Pro
Опрос пользователей о деятельности _1_ http://intbpro.ru/flood/119/
Весь файл не влазит. Вот массив.
$template->assign_vars(array(
'SITENAME' => $config['sitename'],
'SITE_DESCRIPTION' => $config['site_desc'],
'PAGE_TITLE' => $page_title,
// Advanced Meta Tags MOD
'PAGE_KEYWORDS' => $page_keywords,
'PAGE_DESCRIPTION' => $page_description,
'SCRIPT_NAME' => str_replace('.' . $phpEx, '', $user->page['page_name']),
'LAST_VISIT_DATE' => sprintf($user->lang['YOU_LAST_VISIT'], $s_last_visit),
'LAST_VISIT_YOU' => $s_last_visit,
'CURRENT_TIME' => sprintf($user->lang['CURRENT_TIME'], $user->format_date(time(), false, true)),
'TOTAL_USERS_ONLINE' => $l_online_users,
'LOGGED_IN_USER_LIST' => $online_userlist,
'RECORD_USERS' => $l_online_record,
'PRIVATE_MESSAGE_INFO' => $l_privmsgs_text,
'PRIVATE_MESSAGE_INFO_UNREAD' => $l_privmsgs_text_unread,
'S_USER_NEW_PRIVMSG' => $user->data['user_new_privmsg'],
'S_USER_UNREAD_PRIVMSG' => $user->data['user_unread_privmsg'],
'S_USER_NEW' => $user->data['user_new'],
'SID' => $SID,
'_SID' => $_SID,
'SESSION_ID' => $user->session_id,
'ROOT_PATH' => $phpbb_root_path,
'BOARD_URL' => $board_url,
'L_LOGIN_LOGOUT' => $l_login_logout,
'L_INDEX' => $user->lang['FORUM_INDEX'],
'L_ONLINE_EXPLAIN' => $l_online_time,
'U_PRIVATEMSGS' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'),
'U_RETURN_INBOX' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'),
'U_POPUP_PM' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=popup'),
'UA_POPUP_PM' => addslashes(append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=popup')),
'U_MEMBERLIST' => append_sid("{$phpbb_root_path}memberlist.$phpEx"),
'U_VIEWONLINE' => ($auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel')) ? append_sid("{$phpbb_root_path}viewonline.$phpEx") : '',
'U_LOGIN_LOGOUT' => $u_login_logout,
'U_INDEX' => append_sid("{$phpbb_root_path}index.$phpEx"),
'U_SEARCH' => append_sid("{$phpbb_root_path}search.$phpEx"),
'U_REGISTER' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register'),
'U_PROFILE' => append_sid("{$phpbb_root_path}ucp.$phpEx"),
'U_MODCP' => append_sid("{$phpbb_root_path}mcp.$phpEx", false, true, $user->session_id),
'U_FAQ' => append_sid("{$phpbb_root_path}faq.$phpEx"),
'U_SEARCH_SELF' => append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=egosearch'),
'U_SEARCH_WHO_QUOTED_ME'=> append_sid("{$phpbb_root_path}search.$phpEx", 'st=0&sk=t&sd=d&sr=posts&keywords=quote+' . htmlentities($user->data['username'],ENT_QUOTES,"UTF-8")), // & is and + is +
'U_SEARCH_NEW' => append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=newposts'),
'U_SEARCH_UNANSWERED' => append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=unanswered'),
'U_SEARCH_UNREAD' => append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=unreadposts'),
'U_SEARCH_ACTIVE_TOPICS'=> append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=active_topics'),
'U_DELETE_COOKIES' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=delete_cookies'),
'U_TEAM' => ($user->data['user_id'] != ANONYMOUS && !$auth->acl_get('u_viewprofile')) ? '' : append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=leaders'),
'U_TERMS_USE' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=terms'),
'U_PRIVACY' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=privacy'),
'U_RESTORE_PERMISSIONS' => ($user->data['user_perm_from'] && $auth->acl_get('a_switchperm')) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=restore_perm') : '',
'U_FEED' => generate_board_url() . "/feed.$phpEx",
'S_USER_LOGGED_IN' => ($user->data['user_id'] != ANONYMOUS) ? true : false,
'S_AUTOLOGIN_ENABLED' => ($config['allow_autologin']) ? true : false,
'S_BOARD_DISABLED' => ($config['board_disable']) ? true : false,
'S_REGISTERED_USER' => (!empty($user->data['is_registered'])) ? true : false,
'S_IS_BOT' => (!empty($user->data['is_bot'])) ? true : false,
'S_USER_PM_POPUP' => $user->optionget('popuppm'),
'S_USER_LANG' => $user_lang,
'S_USER_BROWSER' => (isset($user->data['session_browser'])) ? $user->data['session_browser'] : $user->lang['UNKNOWN_BROWSER'],
'S_USERNAME' => $user->data['username'],
'S_CONTENT_DIRECTION' => $user->lang['DIRECTION'],
'S_CONTENT_FLOW_BEGIN' => ($user->lang['DIRECTION'] == 'ltr') ? 'left' : 'right',
'S_CONTENT_FLOW_END' => ($user->lang['DIRECTION'] == 'ltr') ? 'right' : 'left',
'S_CONTENT_ENCODING' => 'UTF-8',
'S_TIMEZONE' => ($user->data['user_dst'] || ($user->data['user_id'] == ANONYMOUS && $config['board_dst'])) ? sprintf($user->lang['ALL_TIMES'], $user->lang['tz'][$tz], $user->lang['tz']['dst']) : sprintf($user->lang['ALL_TIMES'], $user->lang['tz'][$tz], ''),
'S_DISPLAY_ONLINE_LIST' => ($l_online_time) ? 1 : 0,
'S_DISPLAY_SEARCH' => (!$config['load_search']) ? 0 : (isset($auth) ? ($auth->acl_get('u_search') && $auth->acl_getf_global('f_search')) : 1),
'S_DISPLAY_PM' => ($config['allow_privmsg'] && !empty($user->data['is_registered']) && ($auth->acl_get('u_readpm') || $auth->acl_get('u_sendpm'))) ? true : false,
'S_DISPLAY_MEMBERLIST' => (isset($auth)) ? $auth->acl_get('u_viewprofile') : 0,
'S_NEW_PM' => ($s_privmsg_new) ? 1 : 0,
'S_REGISTER_ENABLED' => ($config['require_activation'] != USER_ACTIVATION_DISABLE) ? true : false,
'S_FORUM_ID' => $forum_id,
'S_TOPIC_ID' => $topic_id,
'S_LOGIN_ACTION' => ((!defined('ADMIN_START')) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=login') : append_sid("index.$phpEx", false, true, $user->session_id)),
'S_LOGIN_REDIRECT' => build_hidden_fields(array('redirect' => build_url())),
'S_ENABLE_FEEDS' => ($config['feed_enable']) ? true : false,
'S_ENABLE_FEEDS_OVERALL' => ($config['feed_overall']) ? true : false,
'S_ENABLE_FEEDS_FORUMS' => ($config['feed_overall_forums']) ? true : false,
'S_ENABLE_FEEDS_TOPICS' => ($config['feed_topics_new']) ? true : false,
'S_ENABLE_FEEDS_TOPICS_ACTIVE' => ($config['feed_topics_active']) ? true : false,
'S_ENABLE_FEEDS_NEWS' => ($s_feed_news) ? true : false,
'S_LOAD_UNREADS' => ($config['load_unreads_search'] && ($config['load_anon_lastread'] || $user->data['is_registered'])) ? true : false,
'S_SEARCH_HIDDEN_FIELDS' => build_hidden_fields($s_search_hidden_fields),
'T_THEME_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['theme_path']) . '/theme',
'T_TEMPLATE_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['template_path']) . '/template',
'T_SUPER_TEMPLATE_PATH' => (isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? "{$web_path}styles/" . rawurlencode($user->theme['template_inherit_path']) . '/template' : "{$web_path}styles/" . rawurlencode($user->theme['template_path']) . '/template',
'T_IMAGESET_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['imageset_path']) . '/imageset',
'T_IMAGESET_LANG_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['imageset_path']) . '/imageset/' . $user->lang_name,
'T_IMAGES_PATH' => "{$web_path}images/",
'T_SMILIES_PATH' => "{$web_path}{$config['smilies_path']}/",
'T_AVATAR_PATH' => "{$web_path}{$config['avatar_path']}/",
'T_AVATAR_GALLERY_PATH' => "{$web_path}{$config['avatar_gallery_path']}/",
'T_ICONS_PATH' => "{$web_path}{$config['icons_path']}/",
'T_RANKS_PATH' => "{$web_path}{$config['ranks_path']}/",
'T_UPLOAD_PATH' => "{$web_path}{$config['upload_path']}/",
'T_STYLESHEET_LINK' => (!$user->theme['theme_storedb']) ? "{$web_path}styles/" . rawurlencode($user->theme['theme_path']) . '/theme/stylesheet.css' : append_sid("{$phpbb_root_path}style.$phpEx", 'id=' . $user->theme['style_id'] . '&lang=' . $user->lang_name),
'T_STYLESHEET_NAME' => $user->theme['theme_name'],
'T_THEME_NAME' => rawurlencode($user->theme['theme_path']),
'T_TEMPLATE_NAME' => rawurlencode($user->theme['template_path']),
'T_SUPER_TEMPLATE_NAME' => rawurlencode((isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? $user->theme['template_inherit_path'] : $user->theme['template_path']),
'T_IMAGESET_NAME' => rawurlencode($user->theme['imageset_path']),
'T_IMAGESET_LANG_NAME' => $user->data['user_lang'],
'T_IMAGES' => 'images',
'T_SMILIES' => $config['smilies_path'],
'T_AVATAR' => $config['avatar_path'],
'T_AVATAR_GALLERY' => $config['avatar_gallery_path'],
'T_ICONS' => $config['icons_path'],
'T_RANKS' => $config['ranks_path'],
'T_UPLOAD' => $config['upload_path'],
'SITE_LOGO_IMG' => $user->img('site_logo'),
'A_COOKIE_SETTINGS' => addslashes('; path=' . $config['cookie_path'] . ((!$config['cookie_domain'] || $config['cookie_domain'] == 'localhost' || $config['cookie_domain'] == '127.0.0.1') ? '' : '; domain=' . $config['cookie_domain']) . ((!$config['cookie_secure']) ? '' : '; secure')),
));
Всё, что мне известно о PHP-меня научил 4X_Pro
Опрос пользователей о деятельности _1_ http://intbpro.ru/flood/119/
. Редактировалось 2 раза, последний — #17
Теперь в плане целей более менее понятно.
Насчет кириллицы — тут происходит вот что: htmlentities — это функция, которая экранирует кавычки в строке с именем для защиты от SQL-injection. По умолчанию она работает только с кодировкой windows-1252, а остальные символы режет, поэтому без указания кодировки на выходе получалась пустая строка, поэтому и "ничего не найдено". После того, как кодировку прописали явно, она стала кириллицу пропускать, но, видимо, либо что-то все-таки обрезает, либо экранирует не полностью. Почему так, сказать сложно, т.к. здесь нет текста SQL-запроса, который делается
Можно попробовать следующие варианты:
Еще вопрос: а не может ли быть так, что в скрипте предусмотрен вывод всех цитат в том случае, если новых не находится? И еще — правильно ли выставлены параметры sk=t и sd=d, может там что другое нужно указывать?
Насчет кириллицы — тут происходит вот что: htmlentities — это функция, которая экранирует кавычки в строке с именем для защиты от SQL-injection. По умолчанию она работает только с кодировкой windows-1252, а остальные символы режет, поэтому без указания кодировки на выходе получалась пустая строка, поэтому и "ничего не найдено". После того, как кодировку прописали явно, она стала кириллицу пропускать, но, видимо, либо что-то все-таки обрезает, либо экранирует не полностью. Почему так, сказать сложно, т.к. здесь нет текста SQL-запроса, который делается
Можно попробовать следующие варианты:
'U_SEARCH_WHO_QUOTED_ME'=> append_sid("{$phpbb_root_path}search.$phpEx", 'st=0&sk=t&sd=d&sr=posts&keywords=quote+' . htmlentities($user->data['username'],ENT_QUOTES | ENT_HTML5 | ENT_SUBSTITUTE,"UTF-8")),
Еще вопрос: а не может ли быть так, что в скрипте предусмотрен вывод всех цитат в том случае, если новых не находится? И еще — правильно ли выставлены параметры sk=t и sd=d, может там что другое нужно указывать?
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
4X_Pro написал(а):
Насчет кириллицы — тут происходит вот что: htmlentities — это функция, которая экранирует кавычки в строке с именем для защиты от SQL-injection. По умолчанию она работает только с кодировкой windows-1252, а остальные символы режет, поэтому без указания кодировки на выходе получалась пустая строка,
Где ты читаешь спецификацию к функциям? Я по этой функции с гугле ничего не нашёл.
Так, только чуть-чуть по другому
. htmlentities($user->data['username'],ENT_QUOTES | ENT_SUBSTITUTE,"UTF-8")),
С твоим примером там дебаг немножко ругался.
4X_Pro написал(а):
Еще вопрос: а не может ли быть так, что в скрипте предусмотрен вывод всех цитат в том случае, если новых не находится?
Я это дополнение нашёл на другом форуме, английском. Там автор писала, что цитаты новые выводятся. Я пытался сделать что-то наподобие блока уведомлений, как в гугло-сервисах, но уже нашёл другое решение, а это-оформлю, и отдам народу в инет. Может кому пригодится.
P.S. Я хоть тебя и критикую, но кодингом я начал заниматься из-за IntB2. Уж очень я хотел что-то путёвое с неё сделать.
Всё, что мне известно о PHP-меня научил 4X_Pro
Опрос пользователей о деятельности _1_ http://intbpro.ru/flood/119/
Я по этой функции ничего особо не нашёл.
Уж очень я хотел что-то путёвое с него сделать.
Дай мне право редактировать сообщения. А то часто ошибаюсь, тороплюсь.
Всё, что мне известно о PHP-меня научил 4X_Pro
Опрос пользователей о деятельности _1_ http://intbpro.ru/flood/119/
Право редактировать сообщения дал.
Вообще, самый лучший вариант — это официальный сайт http://docs.php.net, в частности http://php.net/manual/ru/function.htmlentities.php Причем полезно не только читать описания самих функций, но и комментарии внизу, там немало полезной информации бывает.
Вообще, самый лучший вариант — это официальный сайт http://docs.php.net, в частности http://php.net/manual/ru/function.htmlentities.php Причем полезно не только читать описания самих функций, но и комментарии внизу, там немало полезной информации бывает.
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
Страницы:
Распечатать - 1
- 2
У вас нет прав для отправки сообщений в эту тему.