NAVIGATOR (+CSSDETECTOR)

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 - 13 nov. 2010 à 14:57
xXVoxPopuliXx Messages postés 8 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 16 novembre 2010 - 16 nov. 2010 à 22:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52472-navigator-cssdetector

xXVoxPopuliXx Messages postés 8 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 16 novembre 2010
16 nov. 2010 à 22:12
J'entends rangé par a la fin du code, pour la feuille annexe, je le ferais peut-être si je trouve d'autres trucs a ajouter car en attendant, ce n'est pas le plus utile ^^.
mugen23 Messages postés 125 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 27 novembre 2010
16 nov. 2010 à 17:06
bah heuuu néophyte, non, au contraire, un néophyte vas plus galérer en ayant à chercher ça dans le code qu'en ayant un fichier annexe.

Pour listenavigateur(); je ne comprends toujours pas l'intérêt, qu'appèle tu "ranger" ? $liste remplis déjà son rôle de "rangement".
xXVoxPopuliXx Messages postés 8 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 16 novembre 2010
16 nov. 2010 à 09:19
Pour l'utilité, moi c'est pour lorsque j'ai un css personnalisé pour firefox. Mais l'utilitaire est prévu pour toute future autre utilité, car je suis certains que d'autres auront du boulot pour lui pour d'autres utilisations que moi.

J'ai préféré garder tout en un seul fichier histoire qu'un néophite (comme moi) s'y retrouve facilement et éviter de produire deux fichiers pour un seul petit utilitaire.
Ce programme est actuellement prévu pour qu'on l'actualise manuellement, je pourrais peut-être améliorer le système de stockage mais je préfère tout garder dans un seul fichier php (j'aime pas me retrouver avec une flopée de fichier dans mes dossiers ^^).
Mais je dis pas qu'une version améliorée ne sera pas disponible dans le futur avec cette possibilité, je fais attention a toutes vos bonnes remarques ;)

Listenavigateur est une simple fonction permettant de ranger le tableau contenant la liste des navigateurs et la renvoyant a qui veut.
mugen23 Messages postés 125 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 27 novembre 2010
16 nov. 2010 à 00:26
Je ne vois pas d'autre lieu pour en causer.

'fin bref, perso, il y as un truc qui me perturbe, c'est la non externalisation de ton listing de navigateurs, trop galère à mettre à jour.

puis je capte pas le but de la fonction listenavigateur(); ( si ce n'est pour une question de modularité, dans ce cas, bien vus )
xXVoxPopuliXx Messages postés 8 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 16 novembre 2010
15 nov. 2010 à 22:49
Statistique par exemple, mais je laisse google amener les gens qui auront besoin de ce programme; je ne pense pas que le lieu soit vraiment a discuter de son utilité mais plutôt de son perfectionnement si tu veux bien :)

Je pense ajouter un détecteur de robot pour ceux qui voudraient faire un peu comme les forums et afficher quand le robot google ou autres se promène sur leur site :)
mugen23 Messages postés 125 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 27 novembre 2010
15 nov. 2010 à 22:37
oui mais je vois toujours pas l'intérêt en fait.

à tu un exemple d'implémentation autre qu'un routeur de feuille de style ?
xXVoxPopuliXx Messages postés 8 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 16 novembre 2010
15 nov. 2010 à 22:13
Mon outil te renvoi les variables avec le navigateur, la version du navigateur et le moteur css, a toi de décider se que tu veux faire avec après ;) (tu peux même supprimer l'appel à la fonction Navigator() pour ne l'appeler que quand tu le souhaite, il suffit de supprimer les lignes 10 à 20 ;) )

PS: au départ seulement les principaux navigateurs m'intéressais, puis finalement je me suis dis tant qu'a y aller ^^ je pense qu'il y a en a +-110 disponible maintenant (j'ai même oublié de mettre la nouvelle liste des navigateurs détectés dans la mise a jours, se sera pour la prochaine ^^ ).
mugen23 Messages postés 125 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 27 novembre 2010
15 nov. 2010 à 20:33
je n'ai fais qu'une lecture en diagonal mais si j'ai bien compris, l'idée c'est d'aiguiller le style qui serras envoyé au client suivant son navigateur ?

ça fais lourd comme process pour corriger ce que l'intégrateur n'as pas sus faire OO

puis, encore une fois, je n'ai lus qu'en diagonale, donc excuse moi si je me plante mais pourquoi ne pas stocker, par exemple, ton résultat dans une variable de session pour éviter de réexécuter la fonction à chaque requête ?

NB : en générale c'est IE qui fout la merde donc une feuille de style dédié à IE est amplement suffisante.
xXVoxPopuliXx Messages postés 8 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 16 novembre 2010
15 nov. 2010 à 13:32
Oups, désolé, mais cette petite phrase ne sert que d'exemple, personnellement je me sert des variables retournées par Navigator dans des conditions, pas pour afficher le navigateur ^^

Mais merci, se sera corrigé pour la prochaine fois
cs_armenak Messages postés 58 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 25 octobre 2010
15 nov. 2010 à 11:13
Bien que je sois assez d'accord avec l'argumentaire de neigedhiver, j'aime bien ce script et je vais m'en servir comme utilitaire. Merci pour le travail. Une petite remarque de rien : il faut un s à la fin de "tu utilises"...
xXVoxPopuliXx Messages postés 8 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 16 novembre 2010
15 nov. 2010 à 00:18
Woaw génial tes sources ! J'ai déjà amélioré mon petit Navigator, il peut te détecter un bon paquet de navigateur maintenant ^^
J'ai aussi rajouté la méthode via foreach comme tu l'as conseillé, en effet l'optimisation est meilleur, mais hélas beaucoup de navigateurs, en mauvais cannard, diminuent les performances en nécéssitant de vérifier leur présence en premier malgré qu'ils sont dans les moins exploités :(

Pour preg_match, je n'ai pas fini d'appréhender cette fonction qui à l'air plus compliqué qu'il n'y parait ^^ Mais dés que faire ce peut, cette fonction amènera son lot de performance a mon code :)

Encore un grand merci pour ton aide ;)
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
14 nov. 2010 à 04:24
Par ailleurs, ces liens pourraient t'intéresser...

http://www.useragentstring.com/pages/useragentstring.php
http://techpatterns.com/forums/about304.html

C'est peut-être plus que nécessaire, mais bon, pour la culture générale, c'est bien aussi ^^
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
14 nov. 2010 à 04:15
Je viens de regarder d'un peu plus près le fonctionnement de ta fonction DecoupeurDeChaineDeCaracteres et je te confirme qu'elle peut être avantageusement remplacée par une bête expression régulière avec preg_match().

Sinon, rajouter un espace devant la chaîne de caractère à tester... mouais... c'est du bricolage alors que la solution que je t'indique est non seulement plus rigoureuse, mais en plus plus rapide (bon pas de grand chose, mais on évite à PHP de convertir le résultat de strpos en booléen, puisqu'on compare justement cette valeur avec FALSE : si le type n'est pas correct, c'est à dire si le résultat de strpos() n'est pas un booléen, PHP ne va pas plus loin dans la comparaison).

En gros, je pense qu'on peut très nettement raccourcir le code de ta source... (peut-être même au point d'en faire un snippet... arf)
xXVoxPopuliXx Messages postés 8 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 16 novembre 2010
14 nov. 2010 à 01:01
Oui je savais pour les fonction strpos et stripos (j'ai eu le probleme pour Opera qui s'annonce dés la première case de la variable $_SERVER ^^), et pour éviter tout bug j'ai ajouté un espace au début de la chaine de caractère ^^ (voir ligne 25 du code)
Pour ce qui est de DecoupeurDeChaineDeCaractere, cette fonction permet de copier une partie (la version du navigateur) en utilisant un filtre se qui offre une solution adaptable pour la majorité des navigateurs (sauf quelques mauvais canards qui n'indiquent pas leur version).

La méthode que tu explique a l'air bien pratique, je vais inclure ça au plus vite :)
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
14 nov. 2010 à 00:46
Autre chose (désolé pour le double post) :
Les fonctions strpos() et stripos() peut renvoyer 0 (zéro) s'il s'agit du premier caractère, ce qui sera évalué comme FALSE par la structure if.
Il serait donc judicieux d'utiliser un test d'inégalité stricte :

if (FALSE !== strpos($secteurderecherche, $browser['search'])) {

Cf la doc à ce sujet : http://fr.php.net/strpos
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
14 nov. 2010 à 00:41
2/ Je ne sais pas si elle est vraiment utile pour ton code, parce que j'ai pas forcément bien saisi ce que faisait la fonction DecoupeurDeChaineDeCaracteres... Si ça se trouve, une simple expression régulière avec preg_match() suffit.

4) L'idée est d'avoir un fichier séparé contenant un tableau associatif avec les différents navigateurs, leur nom et la chaîne à chercher. L'idéal étant que l'inclusion de ce fichier retourne le tableau pour le stocker dans une variable :
<?php
return array(
array('name' => 'Firefox', 'search' => 'Firefox'),
array('name' => 'Internet Explorer', 'search' => 'MSIE'),
// Etc
);
?>

Utilisation de ce fichier :
$browsers = require 'navigators.inc.php';

Pour parcourir :
foreach ($browsers as $browser) {
if (strpos($secteurderecherche, $browser['search'])) {
break; // On sort de la boucle, on garde $browser avec les bonnes valeurs
}
}

Cette boucle remplace toute ta série de if. Le code du traitement n'a pas besoin d'être modifié pour rajouter un navigateur (comme IceWeasel par exemple, que tu as omis ;) )

5) T'as pas tort dans la pratique, même si je maintiens ce que j'ai dit dans l'absolu ;)

P.S. : désolé pour la présentation du code, mais les commentaires sur CS sont vraiment mal foutus...
xXVoxPopuliXx Messages postés 8 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 16 novembre 2010
13 nov. 2010 à 21:02
Merci COD57 ;)

Merci pour cette remarque très constructive NEIGEDHIVER.
1) Je vais revoir mon code pour implémenter cette optimisation (en veillant a se que les répétitions qui se font entre les navigateurs dans la variable $_SERVER ne perturbe pas le programme)

2) hum, je vais en voir plus sur cette fonction afin de voir si elle peut m'aider a améliorer Navigator mais j'avoue qu'aux premiers abords elle semble un peu complexe a saisir ^^

3) oups, se sera corrigé pour la prochaine mise a jours ^^

4) je ne suis pas encore de ce niveau pour me permettre ce type de programmation mais ça viendra :)

5) c'est bien pratique quand tu désire construire quelques petits chefs d'œuvres artistique en CSS pour ne les afficher que pour Firefox (par exemple). Ces "gadjets" sont comme tout se qui est porté design: inutile mais beau a voir pour ceux qui le peuvent. Ce programme te permet d'afficher tes œuvres sans perturber ton site niveau CSS (par exemple: je l'ai monté pour un menu CSS2/CSS3 qui ne dois qu'améliorer l'esthétique normalement, il respectait les standard CSS2 et pourtant seule firefox et chrome ont le bon rendu)
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
13 nov. 2010 à 19:46
Salut,

1/ Il serait bon de ne pas effectuer TOUS les tests de navigateurs : quand on en a trouvé un, a priori, ce ne sera aucun des suivants... Donc utiliser elseif peut être une bonne idée.
2/ Tu devrais t'intéresser à la fonction preg_split()
3/ Browser est la bonne orthographe, broswer une mauvaise.
4/ "Il se base sur une logique permettant d'éditer et rajouter aisément des navigateurs." => Pour que ce soit encore plus simple, le mieux est un fichier séparé avec les différents navigateurs.
5/ "Il vous permettra d'adapter le rendu graphique de vos pages en fonction des moteurs web graphiques utilisé par vos visiteurs" => C'est une pratique qui est découragée aujourd'hui, depuis que les standards ont réellement leur place sur le web ; ce qui est encouragé, c'est d'utiliser des standards. Si on se plie toujours aux contraintes imposées par des logiciels propriétaires qui implémentent leurs technologies propriétaires, on peut dire adieu à la compatibilité et la portabilité ; au lieu de ça, il est préférable, à mon sens, de pénaliser les logiciels qui ne respectent pas les standards afin de forcer leurs éditeurs à s'y mettre sérieusement (lesquels standards ne sont pas là pour freiner le développement et l'innovation, mais garantir à l'utilisateur final un affichage correct du contenu web).
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
13 nov. 2010 à 14:57
Bonjour
Bonne idée ce script pour charger des css personnalisés au navigateurs
a++
Rejoignez-nous