bonjour,
je vous livre mon petit code (sous licence WTFL) mais j'aimerais bien qu'il ne soit pas à la base d'un module payant.
Historique du pourquoi.
Je travaille sur un prestashop d'un client-ami, sa migration de 1.7.7 vers phenix suite. ET (sinon ce n'est pas drôle) je doit mettre en place un crm pour gérer diverses choses comme la facturation, les droits d'auteurs et autres joyeuseté.
Il a été convenu d'utiliser le crm (tryton pour être précis - parce que je le connais un peu, j'avais développé il y a plus de 10 ans un produit pour un esat basé sur openerp.), le crm comme base arrière. en clair : tout est sur le crm et phenixsuite est juste consacré à la vente. Je suis largement plus à l'aise à "développer " (bien grand mot) sur tryton que sur presta/phenix. Oui je suis long.
Et donc je dois récupérer toutes les infos de presta pour les passer sur tryton. (et accessoirement son ancien logiciel de gestion des droits) Et lors de la récup-traitment-import des produits je me suis aperçu que pour les cd, on avait le droit à des choses comme ça
<p style="text-align: left;"> </p>
<p style="text-align: center;"><span style="font-size: 12pt; color: #800000;"><strong>Contenu du CD</strong></span></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><strong><span style="color: #800000;">1. Chacha Latino</span></strong> 2'56</p>
j'ai abrégé. donc dans la base de donnée il y a ET des infos ET de la mise en forme. Beaucoup de bruit (outre la difficulté à récupérer avec du csv entre les sauts de ligne et les fins de lignes...) mais c'est un détail.
Cela veut dire qu'à CHAQUE fois on doit entrer tout le décorum html dans la base et donc avec la mise en forme. (même si on peut css-er une bonne partie.)
Et comme je suis un rationaliste tétu et entêté. je me suis dit, ce serait vachement plus cool de rentrer un truc comme ça
<cd titre="Le bal musette en france du 18ème siècle" auteurs="Duchmol Jean yves & josette Pierre" duree="45'32">
<piste no="1" duree="3'45" titre=" Ah le petit vin blanc"/>
<piste no="2" duree="2'58" titre=" Il est des nôtres"/>
</cd>
<cd titre="Le bal musette en france du 19ème siècle" auteurs="Lataupe rené & the crazy fogg" duree="45'32">
<piste no="1" duree="3'45" titre=" Il faut le voir"/>
<piste no="2" duree="2'58" titre=" Pour le croire"/>
</cd>
et gérer son affichage. alors j'ai un peu taffé et écrit quelques lignes de plain javascript, que les puristes trouveront peut être horrible. (n'hésitez pas à proposer des améliorations)
<script>
window.onload = function (){
do_convert('cd');
}
var dF = document.createDocumentFragment();
// dans cds le 1 est l'attribut du tag du cd, le 2 le tag a créer et le 3 la la classe du tag créé
const cds=[['titre','h3','vert jaune'],['auteurs','h4',''],['duree','h5','']];
// idem dessus sans style (facile à rajouter) comme on parcours ces array
// le ['','br',''] permet un saut de ligne
const tis=[['no','span',''],['titre','span',''],['duree','span',''],['','br','']];
function $$(t,e){
if (!e) return document.querySelectorAll(t);
else return e.querySelectorAll(t);
}
function do_liste(what,item){
for (const el of item) {
my_tag=document.createElement(el[1]);
if (el[0]) my_tag.textContent= what.attributes[el[0]].value;
if (el[2]) my_tag.className=el[2];
dF.appendChild(my_tag);
}
}
function do_convert(t){
let list_cd=$$(t);
if (list_cd.length<1) return;
for(var i = 0; i < list_cd.length; i++) {
do_liste(list_cd[i],cds)
let list_titres=$$('piste',list_cd[i]);
for(var j = 0; j < list_titres.length; j++) {
do_liste(list_titres[j],tis)
}
list_cd[i].replaceWith(dF);
}
}
</script>
le code est simpliste, je ne vais pas vous faire l'affront de le commenter. J'ai mis des balises html pour le voir tomber en marche. Il n'a pas besoin des sauts de ligne dans les éléments et, par nature, les <cd></cd> et <piste/> ne sont pas affichés et ensuite remplacé par le code fabriqué pour le plain javascript. On est certain du coup d'avoir partout la même présentation mise en forme te on gagne beaucoup de temps à saisir les trucs.
je ne l'ai pas encore mis dans phenix, je suis juste en phase de construction de l'ensemble.
j'espère que cela donnera des idées et aidera certains.