私はサイトを開発してきました (今のところ例としてここにあります: http://neurotoxine.mine.nu/gloom )、styleswitcher コードから奇妙な動作を取得しています。大きいので我慢してください。
まず、私が最初に指定したサイトに行って見てください。そこにあるのは、Jqueryを使用したjoomlaページです
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 インストール用のディレクトリ、この場合は gloom. 2 番目の echo $style は、Cookie が読み込まれた値またはオプションから割り当てられた値を書き込みます。最初にそこに到達した場合、値として RED が取得され、template_red.css がその CSS になります。サイト全体。
いくつかのjqueryトリックを実行するJSがあります:
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) にコピーし、そこで ti が機能するかどうかを確認したところ、空白のページが表示されました。go-back をクリックすると、すごいスタイルチェンジャーが機能しましたが、戻る場所がわかりません。header("Location: ".$_SERVER["HTTP_REFERER"]); 命令ですが、それを機能させるために何を変更すればよいかわかりません。
Joomla は、そのテンプレートのヘッダーで宣言を行います。
<base href="http://neurotoxine.mine.nu/gloom/" />
これが http_referer の動作に影響を与えているかどうかはわかりませんが、これを無効にしてもサイトは同じように動作し、スタイルをクリックし、ページを空白にし、戻るをクリックしてほら、スタイルは変更されましたが失敗しました私がいたページを取得します。
いくつかのアイデア?どんな助けでも役に立ちます。