Тема: просмотр стилей при выборе в профиле (2 варианта). Release.
[size=24]Вариант №1: Компактный. Работает в FF и Opera. в IE ничего не делает.[/size]
[size=16]файл: profile.php[/size]
ищем:
<select name="form[style]">заменяем на:
<select name="form[style]" onchange="if(navigator.userAgent.indexOf('MSIE') == -1) {document.getElementById('styleLink').href='style/'+this.value+'.css';}">[size=16]файл: header.php[/size]
ищем:
<link rel="stylesheet" type="text/css" href="style/<?php echo $pun_user['style'].'.css' ?>" />заменяем на:
<link rel="stylesheet" type="text/css" href="style/<?php echo $pun_user['style'].'.css' ?>" id="styleLink" />Минусы и плюсы:
[li]минус : не работает в IE[/li][li]плюс : компактен, экономит трафик при выборе себе стиля[/li]
[size=24]Вариант №2: Универсальный.[/size]
[size=16]создать файл: include/styles.js[/size]
с кодом:
var styleWarnShowing=false;
var lastStyle=-1;
function changeStyle(title,text) {
var i, a, main;
var j=-1;
for(i=0; i< document.getElementsByTagName("link").length; i++) {
a=document.getElementsByTagName("link")[i];
if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
j++;
a.disabled = true;
if(a.getAttribute("title") == title) {
if(navigator.userAgent.indexOf('MSIE') != -1 && j>30) {
if(lastStyle==-1) document.getElementsByTagName("link")[i-j].disabled = false;
else document.getElementsByTagName("link")[lastStyle].disabled = false;
if(!styleWarnShowing) {
alert(text);
styleWarnShowing=true;
}
break;
}
a.disabled = false;
lastStyle=i;
}
}
}
}[size=16]открыть файл: header.php[/size]
найти:
<link rel="stylesheet" type="text/css" href="style/<?php echo $pun_user['style'].'.css' ?>" />заменить на:
<?php
if (in_array(basename($_SERVER['PHP_SELF']), array('profile.php')) && $section == 'display')
{
$styles = array();
$d = dir(PUN_ROOT.'style');
while (($entry = $d->read()) !== false)
{
if (substr($entry, strlen($entry)-4) == '.css')
$styles[] = substr($entry, 0, strlen($entry)-4);
}
$d->close();
echo '<link rel="stylesheet" type="text/css" href="style/'. $pun_user['style'].'.css" title="'. $pun_user['style'].'" media="screen" />'."\n";
// вывод основного стиля первым обусловлен особеностями IE
if (count($styles) > 1)
{
natsort($styles);
while (list(, $temp) = @each($styles))
{
if ($pun_user['style'] != $temp)
echo '<link rel="alternate stylesheet" type="text/css" href="style/'. $temp.'.css" title="'. $temp.'" media="screen" />'."\n";
}
echo '<script type="text/javascript" src="include/styles.js"></script>';
}
} else
echo '<link rel="stylesheet" type="text/css" href="style/'. $pun_user['style'].'.css" title="'. $pun_user['style'].'" media="screen" />'."\n";
?>[size=16]открыть файл: profile.php[/size]
найти:
<select name="form[style]">заменить на:
<select name="form[style]" onchange="changeStyle(this.value,<?php echo "'".addslashes(htmlspecialchars($lang_profile['Only 30 Style']))."'" ?>);">[size=16]открыть все файлы: lang/[Ваши языки]/profile.php[/size]
найти:
'Ban redirect' =>добавить ПЕРЕД:
'Only 30 Style'=>'IE может показать только первые 30 стилей и установленный в настройках (повторно это сообщение выводиться не будет)',Для каждого языка на своем языке. (у меня приведено для папки "Russian")
Минусы и плюсы:
[li]минус : в меню "Отображения" подгружаются все файлы стилей (в IE только выбранный + первые 30 из остальных) !!!трафик!!![/li][li]плюс : Даже с учетом подгрузки всех файлов стиля Выбор занимает меньше трафика чем применение стиля и последующий просмотр. (и снова изменение и снова просмотр)[/li][li]минус : ...но больше, чем если точно знаешь на какой хочешь переключить[/li][li]плюс : работает в IE (только на первых 30 из списка)[/li]
p.s.: отдельное спасибо за помощь в нахождении решений hcs