Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Страницы 1
Тема закрыта
Во-первых я не хочу гонять пользователя в Профиль/Внешний вид каждый раз, когда он хочет изменить что-то во внешнем виде форума.
Во-вторых я не хочу добавлять новое поле в профиль на каждый чих. Сейчас в таблице users 37 полей. Немало! Моды могут добавить еще какие-то настройки пользователя в виде новых полей users. Так мы и до сотни полей можем дорости Не критично, но как-то нехорошо.
Можете считать этот топик заявкой на написание нового мода.
1. мод должен хранить параметры внешнего вида форума (ПВВ) в куках или в таблице online - то есть как свойства текущей сессии.
например online.display TEXT, хранит сериализованные ПВВ.
2. ПВВ должны быть доступны в том месте, где они используются, например опция "Показывать аватары" должна включаться во viewtopic без захода в личный профиль
3. смена стиля и языка должны быть доступны везде. как вариант, можно вызывать попап-окошко с параметрами. когда пользователь выбрал стиль, главное окно отрефрешится. пользователю нравится видеть результат сразу, без промежуточных страниц.
4. следствие: гость тоже сможет настраивать ПВВ для текущего сеанса работы
Прошу высказываться
Для смены языка уменя есть готовое решение, в шапке две ссылки - на русский и английский язык.
вида:
<a href="change_lang.php?lang=English" style="float:left">English</a><!-- //--><a href="change_lang.php?lang=Russian" style="float:right">Русский</a>
код скрипта change_lang.php:
<?php
define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';
if (isset($_GET['lang'])) {
if ($_GET['lang'] == "English")
$lang = "English";
if ($_GET['lang'] == "Russian")
$lang = "Russian";
if ($pun_user['is_guest']) {
if (version_compare(PHP_VERSION, '5.2.0', '>='))
setcookie('guest_language', $lang, time()+ 31536000, $cookie_path, $cookie_domain, $cookie_secure, true);
else
setcookie('guest_language', $lang, time()+ 31536000, $cookie_path.'; HttpOnly', $cookie_domain, $cookie_secure);
}
else {
if (!file_exists(PUN_ROOT.'lang/'.$lang.'/common.php'))
message($lang_common['Bad request']);
$db->query('UPDATE '.$db->prefix.'users SET language="'.$db->escape($lang).'" WHERE id='.$pun_user['id']) or error('Unable to update profile', __FILE__, __LINE__, $db->error());
}
}
$redirect_url = (isset($_SERVER['HTTP_REFERER']) && preg_match('#^'.preg_quote($pun_config['o_base_url']).'/(.*?)\.php#i', $_SERVER['HTTP_REFERER'])) ? htmlspecialchars($_SERVER['HTTP_REFERER']) : 'index.php';
redirect($redirect_url, $lang_common['Lang changed']);
небольшая модификация function.php функции set_default_user после строки
$pun_user['is_guest'] = true;
добавляем:
if (isset($_COOKIE['guest_language'])) {
$pun_user['language'] = $_COOKIE['guest_language'];
}
else {
global $cookie_path, $cookie_domain, $cookie_secure, $cookie_seed;
$pun_user['language'] = $pun_config['o_default_lang'];
if (version_compare(PHP_VERSION, '5.2.0', '>='))
setcookie('guest_language', $pun_config['o_default_lang'], time()+ 31536000, $cookie_path, $cookie_domain, $cookie_secure, true);
else
setcookie('guest_language', $pun_config['o_default_lang'], time()+ 31536000, $cookie_path.'; HttpOnly', $cookie_domain, $cookie_secure);
}
Работает и для зареганых и для гостей.
hcs
Работает и для зареганых и для гостей.
Подскажи пожайлуста что я могу делать не так? я всё сделал как в описании, у пользователей всё нормально работает, а вот у гостей нет, пробывал сам разобраться не получилось.=((( А для гостей то вообщем то оно больше нужно, пока у него нет доступа к профилю разобраться как зарегистрироваться если он Engl, помоги пожайлуста.
Сделал по инструкции все работает.
создал файл change_lang.php вписал код что ниже.
сразу после строки $pun_user['is_guest'] = true; в файле functions.php вписал прилагающися код.
мгновенно возрадовался и поблагодарил hcs
спасибо hcs! я включил переключалку в свой проект PunBB PE http://punbb-pe.org.ru/
только вместо создания change_lang.php я включил тот текст в misc.php, в остальном практически то же самое.
Добавлено спустя 7 минут 33 секунды:
забыл сказать: еще вот такую фишку применил. формирование меню-переключателя по факту присутствия языковых файлов.
в include/common.php добавил что-то типа:
// Make language menu
$dh = opendir(PUN_ROOT.'lang/');
while (false !== ($file = readdir($dh)))
{
if (is_dir(PUN_ROOT.'lang/'.$file) && $file != '.' && $file != '..')
$languages[] = '<a href="misc.php?lang='.$file.'">'.substr($file,0,3).'</a>';
}
closedir($dh);
sort($languages);
$lang_menu = '['.implode('|',$languages).']';
unset($languages);
потом в header.php эту $lang_menu можно вывести где посчитаете нужным
у меня тоже,в гостях не меняется язык....сделал все тоже самое..(((((
а у пользователях отображается..странно!
Здравствуйте, я вот попробовал переделать как у artoodetoo, проблема осталась, может проблема где то в functions.php или в Индексном файле, так как не меняется только у гостей.
Страницы 1
Тема закрыта