Why using Trait to transform a big Class in multiple parts

During the upgrade (and upgrade to the WP Code Standards) of a php source code sometimes of more than 10 years old, the file problem of a class of nearly 10,000 lines arose. Indeed, the phpcs process is very slow and it can be difficult to group the added functions over the years. Subclassing or specific class with new names is not easy and requires a lot of changes in the files. Searching through the docs and forums, few people cite the approach with “Trait” that look like a very simple php class.

Take the case of a method set that manages a page of admin settings and related functions in the meta boxes.

We create a file, the Trait is inside, we copy these said functions. No renaming, the pseudo variable $ this remains operative …

  • The call to the Trait is at the beginning of the class that is reorganized with “use”.

So it remains to set up the file containing the Trait (preferably only one per file)

It is required before the class containing the “use” otherwise a fatal error is caused.

And now, part by part, it is easier to change the code obviously on the admin side.

Pourquoi utiliser l’approche Trait avec une grande Class ?

Lors de la remise à niveau (et mise au norme WP Code Standards) d’un code source parfois de plus de 10 ans, le problème de fichier d’une classe de près de 10000 lignes s’est posé. En effet, le process phpcs est très lent et il peut être difficile de regrouper les functions ajoutées au fil des années. La répartition en sous-classe ou classe spécifique avec des nouveaux noms n’est pas aisée et demande beaucoup de changements dans les fichiers. En fouillant et cherchant dans la doc et les forums, rares sont ceux qui citent l’approche par des Trait qui ressemblent à une classe très simple en php.

Prenons le cas d’un ensemble de méthode qui gère une page de réglages de l’admin et des functions connexes dans les meta boxes.

On crée un fichier, le Trait est dedans, on y copie ces dites functions. Pas de renommage, la pseudo variable $this reste opérante…

  • L’appel au trait se fait en début de la classe que l’on réorganise avec “use”.

Donc il reste plus qu’à mettre en place le fichier contenant le Trait (de préférence un seul)

Il est requis avant celui de la classe contenant le “use” sinon une erreur fatale est provoquée.

Et maintenant, partie par partie, il est plus aisé de faire évoluer le code notamment du côté admin.

Cet article contient trois blocks en chaque langue

dans les trois blocs, trois textes dans chaque langue :

the block is edited in english.

Ce bloc paragraphe est en français.

Dieser Absatzblock ist in deutscher Sprache.

Si la langue secondaire est cochée, Search trouvera cet article ! ( une fonctionnalité unique de la dernière version du plugin xili-language ! ) Après avoir édité cet article complexe, il est facile de créer et d’éditer ceux dans d’autres langues avec le tableau de bord du plugin (meta-box).

This article contains three blocks in each language

in the three block below, three texts in each language :

the block is edited in english.

Ce bloc paragraphe est en français.

Dieser Absatzblock ist in deutscher Sprache.

If secondary language are checked, Search will find this article ! (an unique features of newest version of xili-language plugin ! After editing this complex article, it is easy to create and edit those in other languages with plugin dashboard (meta box).

What new with xili-language 2.23.11 ?

The latest version includes a better management of the metabox of translations in the new Gutenberg universe which considerably upsets the interface and its mode of dialogue with the database.

Of course, we can easily make columns (for example).

But, for the developer, we must reconsider all the interfaces that were added to assist the publisher, the editor.

Can not add a simple “input” with few lines of php:

Strong knowledge of JS (reactive) is needed. In addition, it is first of all a minimum block that must be added.

Example: it was easy to add the check box for the permalink to be adapted according to the modified title of the translated article. In classic mode, it was not far from the update button, put online. Now, this is no longer possible, so it is under the list of translations. Like the other checkboxes in the list, the gutenberg mode, detects a change (check, uncheck, …) and then triggers the process js, json and updates the contents (and links between the various translations).

checkbox is on bottom left…

Quoi de neuf avec xili-language 2.23.11 ?

La dernière version intègre une meilleure gestion de la metabox des traductions dans le nouvel univers Gutenberg qui bouleverse considérablement l’interface et son mode de dialogue avec la base de données.

Certes, on peut facilement faire des colonnes (par exemple).

Mais, pour le développeur, il faut reconsidérer tous les interfaces qu’on ajoutait pour assister l’éditeur, le rédacteur.

Impossible d’ajouter un simple “input” par quelques lignes de php :

De solides connaissances en JS (réact) sont nécessaires. De plus, c’est d’abord un block a minima qu’il faut ajouter.

Exemple : il était facile d’ajouter la case à cocher pour que le permalien soit adapté selon le titre modifié de l’article traduit. En mode classique, elle était non loin du bouton de mise à jour, mise en ligne. Or, ce n’est plus possible, elle a donc mise sous la liste des traductions. Comme les autres cases de la liste, le mode gutenberg, détecte un changement (cocher, décocher,…) et alors enclanche le processus js, json et met à jour les contenus (et liens entre les diverses traductions).

Exemple illustré

l’image est prise en bas de l’éditeur

la case à cocher est en bas à gauche

Pourquoi coder avec les “WP Coding Standards” ?

Quand des sources de code ont parfois plus de dix ans, il est maintenant temps de les réécrire avec les bonnes pratiques.

La première étape consiste à utiliser des outils efficaces comme WPCS module de PHPCS. Le résultat parle de lui-même avec ces deux instantanés l’écran de l’éditeur Sublime :

php w/o wpcs
php w/o wpcs

php-with-format
php-with-format

Les points rouges sur la première image indiquent les nombreuses erreurs de formatage !

Je vous laisse deviner la masse de travail et de vérifications quand il y près de 30000 lignes dans 4 extensions !

 

Why coding with WP Coding Standards ?

When a code source is sometime more than ten years old, it is now time to rewrite it with good practices.

The first step is to use efficient tools. The result speaks for itself with these two snapshots :

php w/o wpcs
php w/o wpcs

php-with-format
php-with-format

Red points on first image indicate formatting errors !

I let you guess the mass of work and checks when there are nearly 30,000 lines in 4 plugins!

Where is wiki xili ?

The xiki wiki is for the moment suspended because its content had become obsolete given the evolution of WP and the xili-language trilogy.

où est le wiki xili ?

Le wiki xiki est pour le moment suspendu car son contenu était devenu obsolète compte tenu des évolutions de WP et de la trilogie xili-language.