2009-08-24 60 views
0

私はサイトを開発しています(今のところ例として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が機能する方法に何かをやっている場合、私は知らないが、私はこれを無効にし、サイトはまだ同じことを行いますスタイル、ページの空白、ヒット・ゴー・バック、ボイラをクリックすると、スタイルは変更されましたが、元のページを取得できませんでした。

いくつかのアイデア?どんな助けも役に立つかもしれません。

答えて

0

が、私はこれを解決し...解決策は、3〜4エラーが固定された:

すべての最初のをcoockieが空でなかった場合は、それが設定されている場合は、HTMLでクッキーチェッカーはありません、求めているはずです。したがって:

<?php // Checks for, and assigns cookie to local variable: 
if(!empty($_COOKIE['style'])) $style = $_COOKIE['style']; 
// If no cookie is present then set style as "red" (default): 
else $style = 'red'; 
?> 

これは最初に修正することでした。 この行は修正されています.JQueryプラグインが変更するためにヘッダーにIDを要求したからです。私は、私はまた

<?php echo $this->baseurl ?> 

はベースアドレスに置き換えられますが、ドメインなしにする必要があることを発見したリンクのスタイルシートの宣言このラインで

<link id="stylesheet" rel="stylesheet" type="text/css" href="<?php echo $this->baseurl ?>/templates/wh1/css/template_<?php echo $style ?>.css" media="screen" /> 

のIDを持っていない実現しませんでしたそれは、jQueryプラグインの初期化中に、私は致命的なミスを犯し、また

/gloom/templates/wh1/css/template_<?php echo $style ?>.css 

でなければなりません。私はプラグインでキャプチャしようとしていたタグのコンテナのIDを変更しませんでした。これは、スタイルシートのヘッダーのIDとタグコンテナのIDとの間の混乱の原因の一部でした。そこで私はDIVのIDに "#tselect"を使用し、Jqueryの作業を解決しました。さらに、プラグインのすべてのステートメントでad $ jに必須です。

私は先端誰かがクッキーについて私に言った使用styleswitcher.phpで今
$j(document).ready(function(){ 
    $j.preloadCssImages({statusTextEl: '#textStatus', statusBarEl: '#status'}); 
     $j("img#hhead").toggle(
     function() { 
      $j("#headtop").slideDown(); 
     }, 
     function() { 
      $j("#headtop").slideUp(); 
     }); 
    $j("#tselect a").styleSwitcher(); // here is the "ID TAG".plugin() call. 
}); 

、:あなたは

<?php $style = $_GET['style']; 
setcookie("style", $style, time()+604800,"/"); // 604800 = amount of seconds in one week 
if(isset($_GET['js'])) echo $style; 
else header("Location: ".$_SERVER['HTTP_REFERER']); 
?> 

気づいていましたか?シンプル/スラッシュです。

すべて正常に機能します。スタイルチェンジャーはスタイルを変更し、JQueryエフェクトは機能します。 あなたはここにそれを見ることができます:link text

誰でもファイルと説明を望むなら、私にメッセージを送ってください。

1

リファラーは、リンクをクリックしたときにのみ設定されます(アドレスバーに直接入力しない場合)。実際には、ブラウザはユーザがこのリンクをクリックする前にどこにいたかを伝えるので、100%には信用できません(PHP Manual参照)。最後に訪問したページを$ _SESSIONに保存してこのページにリダイレクトします。空の場合は$ this-> baseurlにリダイレクトします。 '/index.php'

ベースタグは、相対リンクにのみ必要です。

<a href="index.php"> 

かさえ:

<a> 

もう一つのヒント:それが存在する場合は、クッキーからスタイルを服用する前に、確認してください(どちらかのすべての利用可能なテンプレートやfile_existsをハードコーディング())。そうでない場合は、デフォルトのもの(赤色)を選択します。