Sahifa : thème « star » de ThemeForest, codé avec les doigts de pied

  • Statut : non résolu
8 sujets de 1 à 8 (sur un total de 8)
  • Auteur
    Messages
  • #549492
    Lumiere de Lune
    Participant
    Maître WordPress
    19385 contributions

    Très grosse colère ce soir contre ces abrutis de themeforest en général et sahifa en particulier !

    Ca me donne l’occasion d’expliquer avec un exemple précis pourquoi les thèmes surchargés d’option sont à éviter, et encore plus les thèmes faits par les développeurs qui ont en stock plusieurs thèmes qui se ressemblent et qui travaillent, pour se simplifier la vie, sur leur propre ensemble de fonctions php, ce qu’on appelle un « framework ».

    J’ai participé à un site fait sur un Sahifa fortement modifié, dans le thème enfant, presque partout.
    Visuellement, ça ne se voit pas, mais en coulisse, il y a de l’optimisation SEO et pas mal de petites modifications des templates.

    Sahifa fait une mise à jour, et il y a un problème avec notre thème enfant, il faut le mettre à jour lui aussi.

    Je prends mon petit winmerge, un utilitaire pour comparer les fichiers, pour voir ce qu’ils ont changé pour comparer les fichiers, et là surprise, du jaune (donc du changement) partout.

    Il y a des trucs qui « pourraient » se justifier, mais il y en a un qui m’a particulièrement exaspérée.

    Dans les fonctions de traduction, ces [censurés] ont remplacé TOUTES les fonctions de traduction (les appels gettext __( et _e( ) par les leurs :

    _eti( et __ti(

    Alors qu’on utilise les fonctions de base avec un « textdomain » (qui permet d’appeler le bon fichier de traduction), du genre :

    __(‘Hello World’, ‘montextdomaine’)

    les fonctions Sahifa c’est

    __ti(‘Hello World’)

    Je me demande à ce moment là si ces abrutis ont fait ça « juste » pour avoir le nom de domaine en implicite. C’est pire…

    Je vous copie le code de la fonction __ti

    function __ti( $text ){
    	$sanitize_text = sanitize_title( htmlspecialchars ( $text ) );
    
    	if( tie_get_option( $sanitize_text ) ){
    		return htmlspecialchars_decode ( tie_get_option( $sanitize_text ) );
    	}else{
    		return __( $text , ‘tie’ );
    	}	
    }

    __ti( prend une chaine de caractère, remplace les caractères spéciaux [é, à etc…], « au cas où il faudrait le faire », c’est-à-dire, concrètement, au cas où la base de données ne serait pas en UTF8, cherche si il y a dans la base de données une option du thème dont le nom est celui de $text, renvoie la valeur « nettoyée des caractères spéciaux » de l’option, ou, s’il n’y a pas d’option, passe le texte « nettoyé » dans la fonction gettext normal.

    Déjà, conceptuellement, le mélange entre « valeur d’option » et « chaine à traduire » est …. douteux.

    Ensuite, l’idée qu’on puisse avoir des caractères spéciaux comme nom d’option est … douteux. Le développeur du thème maitrise ses noms d’options, il a donc toute latitude pour éviter d’y mettre des caractères étranges.

    De plus, il y a un mécanisme WP pour gérer les bases de données non utf8 (après tout, à la base, php ignorait utf8 et ceux d’entre nous qui ont des vieux blogs ont peut être encore des bases de données encodées en windows).

    Mais là où ça devient un délire absolu, c’est quand on trouve ça dans le code :

    _eti( ‘Feed Subscription’ );

    Pourquoi un délire absolu ?

    Parce que la chaine à traduire est codée en dur dans le template. Elle n’a donc AUCUN potentiel de caractère dangereux, elle est en anglais, elle n’a, à la base, AUCUN caractère spécial à convertir.

    Mais pour satisfaire le délire de je ne sais quel développeur qui a appris son métier chez les Marx Brothers, TOUS les appels de chaine du thème vont exécuter un nettoyage de chaine inutile, puis un appel aux options du blog, et enfin utiliser la fonction initialement nécessaire.

    Pourquoi un appel aux options du blog ?

    Les esprits perspicaces auront noté le tie_get_option qui remplace le « get_option » de base de WordPress.

    Et il fait quoi le tie_get_option ? Eh bien il va chercher la valeur d’une option spécifique dans la « grosse option » sérialisée :

    function tie_get_option( $name ) {
     $get_options = get_option( ‘tie_options’ );
     
     if( !empty( $get_options[$name] ))
     return $get_options[$name];
     
     return false ;
    }

    Il y a un gros débat sur les options, sérialisées (toutes les options dans un enregistrement) ou pas (un enregistrement par option).

    En théorie, la première version serait meilleure, parce qu’elle permet de faire une seule interrogation de la base de données. Elle pose problème, parce qu’il faut ensuite « désérialiser » le gros tableau. On ne peut pas faire directement

    get_option(‘ma_grosse_option[ma_sous_option]’)

    Il FAUT faire

    $mes_options = get_option(‘ma_grosse_option’) ;
    echo $mes_options[‘ma_petite_option’] ;

    Mais… comme WordPress a un système dit d’autoload des options (chargement au départ de toutes les options), en pratique, faire des options directement séparées n’a pas d’impact sur la performance.

    Donc là, parce que Môssieur le développeur de Sahifa n’a pas compris ça et croit optimiser, déjà on a une fonction supplémentaire pour des prunes. (tie_get_option).

    Parce que Môssieur le développeur de Sahifa n’a pas compris qu’on nettoie les données AVANT de les envoyer dans la base de données, et qu’on ne met pas de caractères spéciaux dans les noms d’options, chose dont il a la maitrise, on a une fonction de « nettoyage » inutile. (Je pense que c’est lié aux possibilités de créer des sidebar à volonté en les appelant comme on veut, il doit avoir peur d’avoir des caractères étranges là dedans, mais ça se fait dans la gestion des sidebars).

    Parce que Môssieur le développeur de Sahifa a fumé un truc étrange, il a mélangé la gestion des ses noms d’options avec la traduction des chaines de caractères du template.

    Parce que Môssieur le développeur de Sahifa n’a pas compris qu’on ne traduit que des éléments issus de la base de données, pas des « interactions avec l’utilisateur » (puisque, par définition, celles ci ne peuvent pas se trouver dans le fichier .po) il fait un test / nettoyage sur des éléments qui ont dû, obligatoirement, être nettoyés avant.

    Et parce que Môssieur le développeur de Sahifa qui a modifié ses fonctions dans la nouvelle version de son thème a eu la flemme de faire les remplacements lui-même, il a confié ça au stagiaire qui ne pige que couic et qui a fait un chercher remplacer sans réfléchir à chaque fois « est ce que je dois le faire » ?

    Et on se retrouve donc à sanitiser une chaine sans variable et sans caractères spéciaux codée en dur, ce qui est aussi utile que faire la danse du ventre devant un fossile de mammouth

    #1004234
    Noaneo
    Participant
    Maître WordPress
    30000 contributions

    Bonjour déjà,

    n’étant pas codeur, je ne comprends pas tout, déjà pourquoi dans Thèmes et non Bar ?
    puis c’est au niveau de la traduction, ce que l’on peut traduire dans ce thème est dans le tableau de bord, onglet Sahifa -> Thème Settings -> Translations

    Mais pourquoi l’auteur de Sahifa utilise _eti( et __ti( au lieu de la méthode classique, il faudrait lui poser la question
    http://themeforest.net/item/sahifa-responsive-wordpress-news-magazine-blog-theme/2819356/comments
    http://support.tielabs.com/forums/forum/wordpress-themes/sahifa

    je trouve que l’on se mord rapidement les doigts avec les thèmes payants, il est difficile de dire à une personne acheter votre thème là, il sera sans problème.
    La preuve votre message prouve que même la Star des thèmes est mal codés.

    #1004235
    Lumiere de Lune
    Participant
    Maître WordPress
    19385 contributions

    Bonjour noaneo,

    Sahifa est un thème, j’explique avec un point précis pourquoi un thème donné est mal codé. C’est parfaitement à sa place dans « thème » :D , on va appeler ça une mini revue de thème, un avertissement pour ceux qui font une recherche, et quelques explications sur « comment ne PAS créer un thème ».

    Mon problème n’est pas de savoir « pourquoi », j’ai parfaitement compris « pourquoi ».

    Le problème est que, quelque que soit la raison, c’est mal foutu. J’ai essayé d’expliquer en détaillant pour les non codeurs pourquoi c’est affreusement mal foutu, s’il y a des points qui restent obscurs n’hésitez pas à poser des questions.

    Accessoirement, ce genre de conneries est parfaitement invisible pour l’utilisateur final, il a simplement une voiture qui fait quatre tours de moteurs quand un seul serait nécessaire.

    #1004233
    Noaneo
    Participant
    Maître WordPress
    30000 contributions

    Bonjour,

    je posais juste la question pour comprendre en quoi il est plus judicieux d’avoir posté dans cette rubrique et non dans Bar, je comprends maintenant.

    Le Pourquoi n’était pas pour vous mais plus pour l’auteur, pourquoi préfère-t-il codé ainsi ?

    #1004236
    Li-An
    Modérateur
    Maître WordPress
    21692 contributions

    Bon, moi je n’en suis pas à ce niveau mais j’ai voulu personnaliser un thème – version light, c’est à la mode – et rien que pour arriver au content il faut passer par trois fonctions qui s’appellent les unes les autres… J’ai laissé tomber.
    Je t’avoue que je n’ai pas compris grand chose – juste vaguement Lumière – mais c’est le cas pour beaucoup de choses dans la vie courante pour moi 🙂

    #1004237
    zairovic26
    Membre
    Initié WordPress
    1 contributions

    bonjour , si’l vous plait si quelqu’un connaitre un theme wordpress payé ou gratuit comme le théme suivant :

    Homepage

    #1004238
    Li-An
    Modérateur
    Maître WordPress
    21692 contributions

    @Zairovic: il aurait fallut ouvrir votre propre sujet. Regardez les thèmes « magazine ». https://fr.wordpress.org/themes/search/magazine/

    #1004239
    energyk
    Participant
    Initié WordPress
    3 contributions
    zairovic26 wrote:
    bonjour , si’l vous plait si quelqu’un connaitre un theme wordpress payé ou gratuit comme le théme suivant :

    J’ai jamais vu ce thème..Probablement qu’il est personnalisé mais il existe des thèmes de magazine plus professionnel que celui-là

8 sujets de 1 à 8 (sur un total de 8)
  • Vous devez être connecté pour répondre à ce sujet.