私はサイトを開発しています(今のところ例としてhttp://neurotoxine.mine.nu/gloom)、スタイルウィジットコードから奇妙な動作が起こっています。それは大きいので、しばらくお待ちください。Joomla/Php/Jquery/CssのSwitchstyleの問題
まず、私が最初に任命したサイトに行ってみてください。あなたがそこに持っているもの 、それはMooToolsの競合を避けるために
var $j = jQuery.noConflict();
を使用してjQueryを使って、Joomlaのページです。 はその後、私はこれらを使用:
<? // 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';
}
?>
クッキーは、その後、赤$スタイル=に設定されていない、そしてこの変数はCSSに追加されます場合、これは、単にクッキーの設定のためです。この場合、暗がりで
<link rel="stylesheet" type="text/css" href="<?php echo $this->baseurl ?>/templates/wh1/css/template_<?php echo $style ?>.css" media="screen" />
最初のコード、Joomlaのインストールのための$ this - > BASEURL =ディレクトリ、:このように。 2番目のecho $ styleは、クッキーがロードされた値またはオプションから割り当てられた値を書き込みます。最初にそこに入った場合は、REDを値として取得し、template_red.cssはCSSサイト全体。
いくつかのjqueryのトリックやって働くJS、あります:
$j(document).ready(function(){
$j('#style-switcher a').styleSwitcher();
});
と私はこのようなリンクからそれを呼び出す:その後、
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(); }
を、私は自分のページに機能を開始
<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 - スタイルチェンジャのリンクがTHEMESの上部にあります)。しかし、私がjoomlaテンプレートにコード全体を挿入すると、システム全体が失敗しました。私はいくつかの修正をここで行いました(主に$ j宣言)。そして、それはテンプレートのパスに関連するものかもしれないことに気がついたので、多くの型の宣言、絶対パス、相対パスなどをテストしました。
次にjoomla(neurotoxine.mine.nu/gloom)のルートにstyleswitcher.phpをコピーし、そこでティが動作するかどうかを確認して、空白のページを取得しています。私はgo-backをクリックして、スタイルチェンジャーがうまくいきましたが、何かがどこに戻ったのかわからないので、ヘッダー( "Location:" $ _ SERVER ["HTTP_REFERER"]);私はそれを動作させるために何を変えるべきかを知らない。
Joomlaのは、そのテンプレートのヘッダー内の宣言を与える:
<base href="http://neurotoxine.mine.nu/gloom/" />
これはHTTP_REFERERが機能する方法に何かをやっている場合、私は知らないが、私はこれを無効にし、サイトはまだ同じことを行いますスタイル、ページの空白、ヒット・ゴー・バック、ボイラをクリックすると、スタイルは変更されましたが、元のページを取得できませんでした。
いくつかのアイデア?どんな助けも役に立つかもしれません。