dev. ask Création d'un add-on : template modifications

Nicolas

Administrateur
Membre du Staff
Je bute sur une modification de template.
Dans le template thread_view je veux remplacer ce bout de code
HTML:
<xf:macro template="metadata_macros" name="metadata"
    arg-description="{$fpSnippet}"
    arg-shareUrl="{{ link('canonical:threads', $thread) }}"
    arg-canonicalUrl="{{ link('canonical:threads', $thread, {'page': $page}) }}" />
Par celui-ci
HTML:
<xf:if is="$thread.cover_image">
    <xf:macro template="metadata_macros" name="metadata"
        arg-description="{$fpSnippet}"
        arg-shareUrl="{{ link('canonical:threads', $thread) }}"
        arg-canonicalUrl="{{ link('canonical:threads', $thread, {'page': $page}) }}"
           arg-imageUrl="{$thread.cover_image}" />
    <xf:else/>
    <xf:macro template="metadata_macros" name="metadata"
        arg-description="{$fpSnippet}"
        arg-shareUrl="{{ link('canonical:threads', $thread) }}"
        arg-canonicalUrl="{{ link('canonical:threads', $thread, {'page': $page}) }}" />
</xf:if>

Voilà mon fichier template-modification.xml
XML:
<?xml version="1.0" encoding="utf-8"?>
<template_modifications>
  <modification type="public" template="thread_view" modification_key="replace_html_code" description="Replace HTML code to set the OG image" execution_order="10" enabled="1" action="str_replace">
    <find><![CDATA[<xf:macro template="metadata_macros" name="metadata"
    arg-description="{$fpSnippet}"
    arg-shareUrl="{{ link('canonical:threads', $thread) }}"
    arg-canonicalUrl="{{ link('canonical:threads', $thread, {'page': $page}) }}" />]]></find>
    <replace><![CDATA[<xf:if is="$thread.cover_image">
    <xf:macro template="metadata_macros" name="metadata"
        arg-description="{$fpSnippet}"
        arg-shareUrl="{{ link('canonical:threads', $thread) }}"
        arg-canonicalUrl="{{ link('canonical:threads', $thread, {'page': $page}) }}"
       arg-imageUrl="{$thread.cover_image}" />
    <xf:else/>
    <xf:macro template="metadata_macros" name="metadata"
        arg-description="{$fpSnippet}"
        arg-shareUrl="{{ link('canonical:threads', $thread) }}"
        arg-canonicalUrl="{{ link('canonical:threads', $thread, {'page': $page}) }}" />
</xf:if>]]></replace>
  </modification>
</template_modifications>
Mais aucune modification du template ne se fait et quand je clique sur test je constate que la modification n'est pas appliquée.
J'ai essayé aussi ça mais le résultat est le même :
XML:
<?xml version="1.0" encoding="utf-8"?>
<template_modifications>
  <modification type="public" template="thread_view" modification_key="replace_html_code" description="Replace HTML code to set the OG image" execution_order="10" enabled="1" action="str_replace">
    <find><![CDATA[<xf:macro template="metadata_macros" name="metadata"
    arg-description="{$fpSnippet}"
    arg-shareUrl="{{ link('canonical:threads', $thread) }}"
    arg-canonicalUrl="{{ link('canonical:threads', $thread, {'page': $page}) }}" />]]></find>
    <replace><![CDATA[<xf:if is="$thread.cover_image">
    <xf:macro template="metadata_macros" name="metadata"
        arg-description="{$fpSnippet}"
        arg-shareUrl="{{ link('canonical:threads', $thread) }}"
        arg-canonicalUrl="{{ link('canonical:threads', $thread, {'page': $page}) }}"
       arg-imageUrl="{$thread.cover_image}" />
    <xf:else/>
    $0
</xf:if>]]></replace>
  </modification>
</template_modifications>

Qu'est-ce que je fais mal ??
 
Solution
Si tu ne veux pas être embêté, tu créés les modifications de template depuis l'admin.

Sinon, il faut jouer avec les commandes export/import pour être sûr qu'il y a synchronisation entre tes fichiers et la database.
La commande de build release se base sur le contenu de la database et pas les fichiers.

Par contre, le dossier data est celui généré par le build release, celui de travail si tu veux coder en modifiant les templates ou autre depuis ton IDE c'est un dossier output (obtenu par l'utilisation de la commande export).

Jack's forum

Membre 
Je m'intéresse de loin comme ça...

Mais dans le cas de sauts de lignes avec une tabulation +1 pour la seconde ligne, ça part de zéro ou +1 par rapport à la ligne du dessus ?
Dans le <find> de Nicolas il faut tabuler comme ça ?
XML:
 <find><![CDATA[<xf:macro template="metadata_macros" name="metadata"
                    arg-description="{$fpSnippet}"
                    arg-shareUrl="{{ link('canonical:threads', $thread) }}"
                    arg-canonicalUrl="{{ link('canonical:threads', $thread, {'page': $page}) }}" />]]></find>

ou comme ça ?
XML:
<find><![CDATA[<xf:macro template="metadata_macros" name="metadata"
    arg-description="{$fpSnippet}"
    arg-shareUrl="{{ link('canonical:threads', $thread) }}"
    arg-canonicalUrl="{{ link('canonical:threads', $thread, {'page': $page}) }}" />]]></find>
 

MasterMan

Membre 
Sur le thème par défaut, le code à rechercher est

HTML:
<xf:macro template="metadata_macros" name="metadata"
    arg-description="{$fpSnippet}"
    arg-shareUrl="{{ link('canonical:threads', $thread) }}"
    arg-canonicalUrl="{{ link('canonical:threads', $thread, {'page': $page}) }}" />

Donc, il faudra mettre exactement la même chose

HTML:
<find><xf:macro template="metadata_macros" name="metadata"
    arg-description="{$fpSnippet}"
    arg-shareUrl="{{ link('canonical:threads', $thread) }}"
    arg-canonicalUrl="{{ link('canonical:threads', $thread, {'page': $page}) }}" /></find>

Si vous rajouter un espace sur une tabulation, il ne trouvera pas le code demandé.

Attention, certains codeurs rajoute des conditions ou du codage personnel.
Pour le rendre compatible sur le plus de thèmes possible, il faudra rajouter d'autres modifications de templates.
Alors vous pourrez avoir plusieurs modifications qui recherche plus ou moins la même chose en fonction des thèmes.
 

Nicolas

Administrateur
Membre du Staff
Il y a un truc que je ne pige pas, j'ai supprimé mon premier addon test pour repartir de zéro.
Je lance
Code:
$ php cmd.php xf-addon:create
Le système crée le dossier mon-addon dans src/addons/
Quelle est l'étape suivante ?
Créer manuellement le dossier _data et mon fichier template-modifications.xml ?
Ou bien lancer
Code:
$ php cmd.php xf-addon:build-release mon-addon
Qui crée automatiquement le dossier _data et tous les fichiers xml ?

Le souci c'est que quand je modifie template-modifications.xml et que je lance une nouvelle release le fichier se retrouve à chaque fois vide après la procédure...
XML:
<?xml version="1.0" encoding="utf-8"?>
<template_modifications/>

J'suis perdu, ça fonctionnait au début mais je ne sais pas si je refais exactement la même chose.
Finalement comment tester un add-on ? Faire des modifs >> faire une nouvelle release ? ou décompresser le .zip, modifier et recompresser ?
 

Nicolas

Administrateur
Membre du Staff
Et bien ça ne m'a pas beaucoup aidé, je n'y ai pas trouvé l'explication à mon fichier XML qui se vide lors de la création d'une release.
Je verrais ça de plus près ce week-end mais je comprends pas vraiment pourquoi ça fonctionnait et pourquoi ça ne fonctionne plus maintenant.

...
 

Clément

Nouveau membre
Si tu ne veux pas être embêté, tu créés les modifications de template depuis l'admin.

Sinon, il faut jouer avec les commandes export/import pour être sûr qu'il y a synchronisation entre tes fichiers et la database.
La commande de build release se base sur le contenu de la database et pas les fichiers.

Par contre, le dossier data est celui généré par le build release, celui de travail si tu veux coder en modifiant les templates ou autre depuis ton IDE c'est un dossier output (obtenu par l'utilisation de la commande export).
 

Nicolas

Administrateur
Membre du Staff
Si tu ne veux pas être embêté, tu créés les modifications de template depuis l'admin.
Génial ! C'est tellement plus simple. Merci pour cette précieuse indication.
Du coup j'ai réussi à créer mon premier add-on. En partant de cette astuce : https://xenforo.fr/discussions/definir-limage-opengraph-dune-discussion-xenforo.115/

Je viens de le tester il fonctionne parfaitement.
Comme cette modification de template n'est pas de moi je vais demander à son auteur s'il veut bien que je l'utilise sinon pour ceux qui veulent le tester je le mets en PJ.

Franchement ça fait plaisir.
Merci @Clément
 

Fichiers joints

  • OG-1.0.0.zip
    8,6 KB · Vues: 0

Oliver

Membre 
Cool @Nicolas :cool:

Petite question : s'agissant des modifications de template, tu modifies thread_view partant du principe qu'il est d'origine. Si l'utilisateur a modifié la partie à rechercher comment ça se passe ? L'add-on s'installe et écrase les modifications de l'utilisateur ? Il y a un message d'avertissement ? L'add-on crashe ? L'add-on s'installe mais rien ne se passe au niveau template ?
 

Oliver

Membre 
OK, et donc que ce soit en remplacement simple ou via regex ça ne fonctionnera pas.
Donc si j'installe cet add-on Open Graph et que je veux en installer un autre qui a besoin de la même partie de code du template c'est mort ? J'ai connu des forums avec plus de 50 add-ons installés et je me demande comment il n'y a jamais eu conflit.
 

Clément

Nouveau membre
Ce n'est pas le second installé, c'est une question d'ordre d'exécution qui détermine lequel sera appliqué en premier ou non.

Généralement avec les regexp, tu as plus de chance qu'il n'y ait pas d'incompatibilité entre deux add-ons, sauf si vraiment il y a de grosses modifs appliquées, çà arrive malheureusement parfois... surtout avec les styles très gros qui amènent tout un paquet de configuration avec des modifications substantielles des templates d'origine.
 

Oliver

Membre 
Donc pour être clair :
on a le template test_template dont la première ligne est
HTML:
<div class="block-minorHeader">

L'add-on A crée une modification de ce template avec un ordre de priorité 100 :
find <div class="block-minorHeader"> replace by <div class="block-header">

L'add-on B crée une modification du même template avec un ordre de priorité 10, qu'est-ce qu'il trouve à la première ligne de test_template ?
<div class="block-minorHeader"> OU <div class="block-header"> ??
 

Membres en ligne

Extras
Les tutoriels
en français
Collection de tutoriels exclusifs pour découvrir l'environnement XenForo.
Our translations
exclusives
French translation of official XenForo and XenAddons softwares.
The subscription
19.90 €
A premium account to access all our official resources.
Contribute to the development and sustainability of the forum with a donation to our PayPal account.
Haut