Compatibilité affichage des menus sous opera pour SPIP 1.8+ (1.8.3)

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Comme beaucoup des utilisateurs de SPIP qui ont adoptés les versions 1.8 de notre CMS préféré, vous l’aurez remarqué les menus des bandeaux principal et secondaire ne s’affichent pas sous Opera (navigateur web gratuit, indépendant mais non libre en effet les sources ne sont pas disponibles à la communauté ! C’est dommage d’ailleurs !).

Situons le problème

Comme vous l’aurez déjà remarqué ces troubles visuels (d’affichage) des menus de la partie privée dans spip 1.8+ n’existent pas dans la nouvelle version (grandiose du reste) qu’est 1.9+

En effet grâce à l’orientation très intelligente et rapide (si si très speed aussi !) de CEDRIC, je vous propose une solution qui résoudra ce problème pour vous définitivement.

Le fichier qui gère les menus de la partie privée de Spip dans 1.8+ (dans mon cas 1.8.3) est le fichier « inc_layer.php3 » contenu dans le dossier « ecrire ». Dans ce fichier la fonction « verif_butineur() » permet en effet de reconnaitre le butineur (navigateur web) utilisé et ainsi faire appel à un autre fichier javascript responsable du bon fonctionnement des menus (ce dernier est tout a fait bien fait et fonctionne parfaitement).

Voici donc la partie du code du fichier inc_layer.php3 qui pause problème :

//
// Tests sur le nom du butineur
//
function verif_butineur() {
	global $browser_name, $browser_version;
	global $browser_description, $browser_rev, $browser_layer, $browser_barre;
	ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $_SERVER['HTTP_USER_AGENT'], $match);
	$browser_name = $match[1];
	$browser_version = $match[2];
	$browser_description = $match[3];
	$browser_layer = '';
	$browser_barre = '';

	if (eregi("opera", $browser_description)) {
		eregi("Opera ([^\ ]*)", $browser_description, $match);
		$browser_name = "Opera";
		$browser_version = $match[1];
		$browser_layer = (($browser_version < 7) ? '' :  http_script('', _DIR_INCLUDE . 'layer.js',''));
	}
   	else if (eregi("msie", $browser_description)) {
		eregi("MSIE ([^;]*)", $browser_description, $match);
		$browser_name = "MSIE";
		$browser_version = $match[1];
		$browser_layer = (($browser_version < 5) ? '' :  http_script('', _DIR_INCLUDE . 'layer.js',''));
		$browser_barre = ($browser_version >= 5.5);
	}
	else if (eregi("KHTML", $browser_description) &&
		eregi("Safari/([^;]*)", $browser_description, $match)) {
		$browser_name = "Safari";
		$browser_version = $match[1];
		$browser_layer = http_script('', _DIR_INCLUDE . 'layer.js','');
		$browser_barre = ($browser_version >= 5.0);
	}
	else if (eregi("mozilla", $browser_name) AND $browser_version >= 5) {
		$browser_layer = http_script('', _DIR_INCLUDE . 'layer.js','');
		// Numero de version pour Mozilla "authentique"
		if (ereg("rv:([0-9]+\.[0-9]+)", $browser_description, $match))
			$browser_rev = doubleval($match[1]);
		// Autres Gecko => equivalents 1.4 par defaut (Galeon, etc.)
		else if (strpos($browser_description, "Gecko") and !strpos($browser_description, "KHTML"))
			$browser_rev = 1.4;
		// Machins quelconques => equivalents 1.0 par defaut (Konqueror, etc.)
		else $browser_rev = 1.0;
		$browser_barre = $browser_rev >= 1.3;
	}

	if (!$browser_name) $browser_name = "Mozilla";
}

// Obsolete. Present pour compatibilite
function afficher_script_layer(){echo $GLOBALS['browser_layer'];}
function test_layer(){return $GLOBALS['browser_layer'];}

verif_butineur();

Comme vous le voyait pour Opera cette fonction ne reconnait pas les dernières versions de ce navigateur (elle se limite à la 7e version et précédentes).

Solutionnons le problème

Pour résoudre le problème, il vous faut seulement réinjecter le code employé dans la version 1.9+ de Spip, dont voici le lien spécifique vers la zone.

Sinon voici le code à utiliser :

//
// Tests sur le nom du butineur
//
// http://doc.spip.org/@verif_butineur
function verif_butineur() {

	global $browser_name, $browser_version;
	global $browser_description, $browser_rev, $browser_layer, $browser_barre;
	ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $_SERVER['HTTP_USER_AGENT'], $match);
	$browser_name = $match[1];
	$browser_version = $match[2];
	$browser_description = $match[3];
	$browser_layer = '';
	$browser_barre = '';

	if (!eregi("opera", $browser_description)&&eregi("opera", $browser_name)) {
		$browser_name = "Opera";
		$browser_version = $match[2];
		$browser_layer = (($browser_version < 7) ? '' :  http_script('', _DIR_JAVASCRIPT . 'layer.js',''));
		$browser_barre = ($browser_version >= 8.5); 
	}
	else if (eregi("opera", $browser_description)) {
		eregi("Opera ([^\ ]*)", $browser_description, $match);
		$browser_name = "Opera";
		$browser_version = $match[1];
		$browser_layer = (($browser_version < 7) ? '' :  http_script('', _DIR_JAVASCRIPT . 'layer.js',''));
		$browser_barre = ($browser_version >= 8.5); 
	}
	else if (eregi("msie", $browser_description)) {
		eregi("MSIE ([^;]*)", $browser_description, $match);
		$browser_name = "MSIE";
		$browser_version = $match[1];
		$browser_layer = (($browser_version < 5) ? '' :  http_script('', _DIR_JAVASCRIPT . 'layer.js',''));
		$browser_barre = ($browser_version >= 5.5);
	}
	else if (eregi("KHTML", $browser_description) &&
		eregi("Safari/([^;]*)", $browser_description, $match)) {
		$browser_name = "Safari";
		$browser_version = $match[1];
		$browser_layer = http_script('', _DIR_JAVASCRIPT . 'layer.js','');
		$browser_barre = ($browser_version >= 5.0);
	}
	else if (eregi("mozilla", $browser_name) AND $browser_version >= 5) {
		$browser_layer = http_script('', _DIR_JAVASCRIPT . 'layer.js','');
		// Numero de version pour Mozilla "authentique"
		if (ereg("rv:([0-9]+\.[0-9]+)", $browser_description, $match))
			$browser_rev = doubleval($match[1]);
		// Autres Gecko => equivalents 1.4 par defaut (Galeon, etc.)
		else if (strpos($browser_description, "Gecko") and !strpos($browser_description, "KHTML"))
			$browser_rev = 1.4;
		// Machins quelconques => equivalents 1.0 par defaut (Konqueror, etc.)
		else $browser_rev = 1.0;
		$browser_barre = $browser_rev >= 1.3;
	}

	if (!$browser_name) $browser_name = "Mozilla";
}

Ne faites pas seulement du copier-coller dès mainteant car cela ne donnera pas le résultat escompté, en effet, depuis 1.9 « _DIR_JAVASCRIPT » indique clairement l’emplacement des fichiers javascripts, mais cet emplacement n’existe pas dans les versions précédentes 1.8+, et il vous faudra remplacer « _DIR_JAVASCRIPT » par « _DIR_INCLUDE ».

Selon cette méthode/logique, voici le code définitif à remplacer (là oui faites du copier-coller !) , pour avoir une meilleure compatibilité pour les navigateurs (dont Opera 8.5 et plus).

// Tests sur le nom du butineur
//
// http://doc.spip.org/@verif_butineur
function verif_butineur() {

	global $browser_name, $browser_version;
	global $browser_description, $browser_rev, $browser_layer, $browser_barre;
	ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $_SERVER['HTTP_USER_AGENT'], $match);
	$browser_name = $match[1];
	$browser_version = $match[2];
	$browser_description = $match[3];
	$browser_layer = '';
	$browser_barre = '';

	if (!eregi("opera", $browser_description)&&eregi("opera", $browser_name)) {
		$browser_name = "Opera";
		$browser_version = $match[2];
		$browser_layer = (($browser_version < 7) ? '' :  http_script('', _DIR_INCLUDE . 'layer.js',''));
		$browser_barre = ($browser_version >= 8.5);
	}
	else if (eregi("opera", $browser_description)) {
		eregi("Opera ([^\ ]*)", $browser_description, $match);
		$browser_name = "Opera";
		$browser_version = $match[1];
		$browser_layer = (($browser_version < 7) ? '' :  http_script('', _DIR_INCLUDE . 'layer.js',''));
		$browser_barre = ($browser_version >= 8.5);
	}
	else if (eregi("msie", $browser_description)) {
		eregi("MSIE ([^;]*)", $browser_description, $match);
		$browser_name = "MSIE";
		$browser_version = $match[1];
		$browser_layer = (($browser_version < 5) ? '' :  http_script('', _DIR_INCLUDE . 'layer.js',''));
		$browser_barre = ($browser_version >= 5.5);
	}
	else if (eregi("KHTML", $browser_description) &&
		eregi("Safari/([^;]*)", $browser_description, $match)) {
		$browser_name = "Safari";
		$browser_version = $match[1];
		$browser_layer = http_script('', _DIR_INCLUDE . 'layer.js','');
		$browser_barre = ($browser_version >= 5.0);
	}
	else if (eregi("mozilla", $browser_name) AND $browser_version >= 5) {
		$browser_layer = http_script('', _DIR_INCLUDE . 'layer.js','');
		// Numero de version pour Mozilla "authentique"
		if (ereg("rv:([0-9]+\.[0-9]+)", $browser_description, $match))
			$browser_rev = doubleval($match[1]);
		// Autres Gecko => equivalents 1.4 par defaut (Galeon, etc.)
		else if (strpos($browser_description, "Gecko") and !strpos($browser_description, "KHTML"))
			$browser_rev = 1.4;
		// Machins quelconques => equivalents 1.0 par defaut (Konqueror, etc.)
		else $browser_rev = 1.0;
		$browser_barre = $browser_rev >= 1.3;
	}

	if (!$browser_name) $browser_name = "Mozilla";
}

// Obsolete. Present pour compatibilite 
function afficher_script_layer(){echo $GLOBALS['browser_layer'];}
function test_layer(){return $GLOBALS['browser_layer'];}

verif_butineur();

Ben voilà j’espère que cela servira à tous ceux qui rencontrent ou vont rencontrer ce problème alors qu’ils souhaitent toujours rester sous leur bonne ancienne version 1.8+, qui rend bien des services (même si le passage à la version 1.9 ou + est aussi une solution des plus appréciable voire la plus recommandée !).

Pour le reste merci à toute la communauté SPIP et longue vie à SPIP.

@+

Une solution pour ceux qui ne souhaitent pas modifier les fichiers inclus dans Spip (ecrire), mais n’est valide que pour les navigateurs Opera 8.5+ (mais inférieure à Opera 9), c’est d’indiquer Opera comme étant internet explorer et là ça fonctionne, faudrait-il que chaque visiteur utilisant Opera veuille le faire ?!

Dernière modification de cette page le 15 juillet 2009

Discussion

Une discussion

  • 1
    jean claude

    Bonjour,

    Merci à toi superyms, effectivement j’avais ce même problème très génant !
    Sous spip 1.8.3 un peu modifiée, j’en suis très satisfait.

    Je ne pense à pas aller vers les verisons en cours 1.9+ pour le moment, car les choses me sembent bouger trop vite pour moi, j’attendrais une stabilité meilleure dans le fonctionnement, la disposition définitive des fichiers et dossiers et surtout de meilleures documentations pour ces versions là et aussi les plugins y afférents.

    PS : j’ai récemment rencontré, un problème bizarre avec ma verison 1.8.3 : le site s’affiche sous firefox et opera mais pas internet explorer (à part la 7), j’ai une page blanche, mais la page est chargée (le code y est totalement) mais pas l’affichage !!!!!!!!

    T’as une solution à proposer superyms ? ou quelqu’un d’autre (sns aller vers ue nversion 1.9+ ?)

    • bonjour,

      ben je te recommande vivement de passer à la version en cours (1.9.2b), ce fichu souci de la plage blanche sous IE (et parfois Firefox pour certains) n’as pas été résolu pour les versions antécédantes (avant 1.9).

      amicalement,

    Répondre à ce message

Ajouter un commentaire

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom