Я занимаюсь разработкой сайта (сейчас здесь в качестве примера: http://neurotoxine.mine.nu/gloom),, и я получаю странное поведение из кода переключателя стилей. Он большой, поэтому, пожалуйста, наберитесь терпения.
Сначала вы можете зайти на сайт, который я назначил первым, и посмотреть его.
То, что у вас есть, это страница Joomla, с Jquery, использующим
var $j = jQuery.noConflict();
во избежание конфликтов с mootools.
Затем я использовал это:
<? // Checks for, and assigns cookie to local variable:
if(isset($_COOKIE['style']))
{ $style = $_COOKIE['style'];
}
// If no cookie is present then set style as "red" (default):
else { $style = 'red';
}
?>
Это только для настройки cookie, если cookie не установлен, тогда $ style = red, и эта переменная будет добавлена в CSS. Как это:
<link rel="stylesheet" type="text/css" href="<?php echo $this->baseurl ?>/templates/wh1/css/template_<?php echo $style ?>.css" media="screen" />
Первый код, $ this-> baseurl = каталог для установки joomla, в данном случае мрачный.
Второй, echo $ style, запишет загруженное cookie-значение или значение, назначенное из опций, в случае, если вы попадете туда в первый раз, тогда вы получите КРАСНОЕ значение, тогда template_red.css будет CSS для весь сайт.
Есть JS, который работает, выполняя некоторые трюки с jquery:
jQuery.fn.styleSwitcher = function(){
$j(this).click(function(){
// We're passing this element object through to the loadStyleSheet function.
loadStyleSheet(this);
// And then we're returning false.
return false;
});
function loadStyleSheet(obj) {
$j('#preloader')
// Now fade in the div (#preloader):
.fadeIn(500,function(){
// The following will happen when the div has finished fading in:
// Request PHP script (obj.href) with appended "js" query string item:
$j.get( obj.href+'&js',function(data){
// Select link element in HEAD of document (#stylesheet) and change href attribute:
$j('#stylesheet').attr('href','css/' + data + '.css');
// Check if new CSS StyleSheet has loaded:
cssDummy.check(function(){
// When StyleSheet has loaded, fade out and remove the #overlay div:
$j('#preloader').fadeOut(500);
});
});
});
}
// CSS DUMMY SECTION
var cssDummy = {
init: function(){
// Appends "dummy-element" div to body:
$j('<div id="dummy-element" style="display:none" />').appendTo('body');
},
check: function(callback) {
// Checks if computed width equals that which is defined in the StyleSheets (2px):
if ($j('#dummy-element').width()==2) callback();
// If it has not loaded yet then simple re-initiate this function every 200 milliseconds until it had loaded:
else setTimeout(function(){cssDummy.check(callback)}, 200);
}
}
cssDummy.init(); }
затем я запускаю функцию на своей странице:
$j(document).ready(function(){
$j('#style-switcher a').styleSwitcher();
});
и я звоню по такой ссылке:
<a href="<?php echo $this->baseurl ?>/templates/wh1/style-switcher.php?style=fire">img</a>
Наконец, код styleswitcher.php находится здесь:
<?php
$style = $_GET['style'];
setcookie("style", $style, time()+604800*24); // 604800 = amount of seconds in one week *4=1 month *24=1/2 year *48=1 year
if(isset($_GET['js']))
echo $style;
else header("Location: ".$_SERVER["HTTP_REFERER"]); ?>
Теперь проблема в том, что когда я тестировал это на сайте, все работало нормально (http://neurotoxine.mine.nu/wht/index-test.php - ссылки для смены стилей находятся вверху, а слева от них написано ИМ). Но когда я вставил весь код в шаблон Joomla, вся система перестала работать. Я сделал некоторые исправления здесь и там (в основном объявление $ j), а затем понял, что это может быть связано с путем шаблонов, поэтому я протестировал многие типы объявлений, абсолютные пути, относительные пути и т. Д., И ничего не произошло.
Затем я скопировал файл styleswitcher.php в корень joomla (neurotoxine.mine.nu/gloom) и проверил, будет ли работать там, и я получаю пустую страницу. Я нажал кнопку возврата и затем WOW, сработал стайл-чейнджер, но потом что-то не говорит, куда вернуться, я думаю, что это может быть заголовок ("Location:". $ _ SERVER ["HTTP_REFERER"]); инструкция, но я не знаю, что там изменить, чтобы заставить его работать.
Joomla дает объявление в шапке для своих шаблонов:
<base href="http://neurotoxine.mine.nu/gloom/" />
Не знаю, работает ли это как-то так, как работает http_referer, но я отключил это, и сайт по-прежнему делает то же самое, нажимает стиль, страницу пустую, нажимает кнопку возврата и вуаля, стиль изменился но не удалось найти страницу, на которой я находился.
Есть идеи? Любая помощь может быть полезна.