Joomla / PHP / jQuery / CSS Switchstyle Sorunu

2 Cevap php

Ben bir site gelişmekte oldum (şimdi burada bir örnek olarak: http://neurotoxine.mine.nu/gloom), ve ben bir styleswitcher koddan bir garip davranış alıyorum. O yüzden lütfen sabırlı olun büyük.

First, you may go to the site I appointed first and see it. What you've got there, it's a joomla page, with a Jquery using

var $j = jQuery.noConflict();

in order to avoid mootools conflicts. Then, I used these:

<?  // 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 sonra $ style = kırmızı ayarlı değilse, bu, sadece çerez ayarı içindir, ve bu değişken CSS eklenecektir. Bu gibi:

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

The first code, $this->baseurl=directory for joomla installation, in this case gloom. The second one, echo $style, will write the cookie loaded value or the value assigned from the options, in the case you get there for first time then you'll got RED as value then, template_red.css will be the CSS for the entire site.

Bazı jquery hileler yaparak çalışan bir JS, var:

 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(); }

O, benim sayfa fonksiyonu başlatmak:

$j(document).ready(function(){
$j('#style-switcher a').styleSwitcher();
});

ve ben böyle bir bağlantıdan çağrı:

<a href="<?php echo $this->baseurl ?>/templates/wh1/style-switcher.php?style=fire">img</a>

Son olarak, styleswitcher.php kodu burada:

<?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"]); ?>

(- Stylechanger için bağlantıları üst ve bunların sol THEMES diyor http://neurotoxine.mine.nu/wht/index-test.php) Şimdi, sorun ben bir sitede bu test edildiğinde, her şey iyi çalıştı olmasıdır. Ben joomla şablonda tüm kodu takıldığında Ama, bütün sistem başarısız oldu. Ben burada ve orada bazı düzeltmeler (başta $ j beyanname) yaptım ve sonra ben bu şablonları yolu ile ilgili bir şey olabilir fark, bu yüzden vb beyannamelerin birçok türde mutlak yolları, göreli yolları, test edilmiş ve hiçbir şey olmuyor.

Sonra joomla (neurotoxine.mine.nu / kasvet) kök styleswitcher.php kopyalanan ve ti orada çalışmak olsaydı kontrol, ve ben boş bir sayfa alıyorum. Gidip geri tıkladım ve daha sonra WOW stylechanger çalıştı, ama sonra bir şey ben header ("Location:". $ _SERVER ["HTTP_REFERER"]) olabileceğini düşünmek için geri dönmek için nereye söylemiyor; talimat, ama o iş yapmak için değiştirmek var bilmiyorum.

Joomla kendi şablonları için başlığında bir bildiri verir:

<base href="http://neurotoxine.mine.nu/gloom/" />

Ben bu http_referer çalışır şekilde bir şey yapıyor bilmiyorum, ama ben bu devre ve site hala aynı işi yapar, bir stili tıklatın yok, sayfa boş, vur-geri gitmek ve işte, tarzı değişti ama başarısız oldu Ben sayfasını almak.

Bazı fikirler? Herhangi bir yardım yararlı olabilir.

2 Cevap

Ben bu çözüldü ... çözümler 03:57 hataları tespit edildi:

coockie boş değilse, her şeyden önce, html çerez denetleyicisi sormam gerekirdi, o SET ise hayır. Yani:

<?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';
?>

That was the first thing to fix. Then this line is fixed, because the JQuery plugin asked for an ID in the header to alter. I didn't realized I haven't an ID at the link stylesheet declaration

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

Bu satırda ben de keşfetti

<?php echo $this->baseurl ?>

etki olmadan taban adresi ancak, değiştirilmesi gerekir, öyle de olmalıdır

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

Ayrıca, JQuery eklentisi başlatma, ben ölümcül bir hata yaptı. Ben eklenti tarafından çekilecek gidiyordu etiketi konteyner için kimliği değişmemiştir. Bu etiket ambalaj üzerinde biçembentteki ve kimliği için başlığındaki kimliği arasındaki karışıklık parçası oldu. Yani bir DIV kimliği için "# tselect" kullanılan ve jQuery işi çözdü. Ayrıca, eklenti her tablosunda reklam $ j zorunludur.

$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.
});

Şimdi, styleswitcher.php ben birisi çerezi hakkında bana bir ipucu kullanılır:

<?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']);
?>

Fark mı? Basit / yırtmaç olduğunu.

Now everything works fine. The stylechanger changes the styles and the JQuery effects work. You could see it here: link text

Herkes dosya ve bir açıklama istiyorsa, bana bir mesaj gönderin.

(Eğer adres çubuğuna doğrudan girdiğinizde değil) Eğer bir linke tıkladığınızda Referans sadece ayarlanır. Aslında tarayıcı kullanıcı bu linke tıklayarak önce olmuştur siteyi söyler, böylece (bkz. PHP Manual)% 100 güven olamaz. Ben $ _SESSION son ziyaret edilen sayfa depolamak ve bu bir yönlendirme olur; boşsa ve, $ bu-> BaseURL yönlendirmek. '/ Index.php'.

Baz-Tag sadece göreceli linkleri, örneğin için gereklidir

<a href="index.php">

hatta:

<a>

Başka bir ipucu: çerezden stili almadan önce, eğer varsa kontrol edin (ya da mevcut tüm şablonları veya file_exists () kodlamalısınız). Eğer değilse, varsayılan bir (kırmızı) alır.