Ce plugin permet d’utiliser dans SPIP la librairie QueryPath dans le code PHP d’un plugin. Cette librairie est entre autre un portage en PHP des sélecteurs et des manipulateurs de document de jQuery. Cela dit QueryPath permet bien d’autres choses également.
Pour l’utiliser, il faut charger inc/querypath.php :
include_spip('inc/querypath');Une fois le fichier chargé, vous avez à disposition les fonctions prévues par la librairie :
-
qp() -
htmlqp() - ou encore directement la classe
QueryPath
Reportez vous à la documentation de QueryPath pour connaître les paramètres et fonctions.
Ce plugin requiert une version de PHP >= 5.3
Manipuler du HTML
J’ai été confronté à différents problèmes lors de mon utilisation avec pour source un morceau de page HTML issu d’un pipeline de SPIP. Aussi, pour faciliter l’utilisation, une fonction apportée par ce plugin est aussi disponible avec les mêmes paramètres que les fonctions d’origine :
-
spip_query_path()
La fonction retourne pareillement un objet QueryPath, mais le chargement modifie certaines propriétés (lire inc/querypath.php pour plus de détails) pour que le fonctionnement soit le plus simple et transparent pour les développeurs.
Je n’ai pas encore tout le recul nécessaire pour savoir si cela fonctionne à tous les coups, mais vos tests le diront certainement :)
Exemple d’utilisation
Dans le plugin Groupes de mots arborescents, j’utilise ce plugin pour ajouter du code HTML sous le formulaire d’édition d’un groupe après le titre, et pour enlever une partie du HTML également lorsque nous sommes dans un groupe enfant d’un autre. Cela se fait (le jour de l’écriture) de la sorte :
function gma_formulaire_fond($flux) {
// sur le formulaire d'édition de groupe de mot
if ($flux['args']['form'] == 'editer_groupe_mot') {
$html = $flux['data'];
$env = $flux['args']['contexte'];
// charger QueryPath
include_spip('inc/querypath');
$qp = spip_query_path($html, 'body');
// la parenté sur tous
// on récupère le sélecteur et on l'ajoute après le titre...
$selecteur_parent = recuperer_fond('formulaires/selecteur_groupe_parent', $env);
$qp->top('body')->find('li.editer_titre')->after($selecteur_parent);
// les paramètres techniques sont uniquement sur les groupes racine
if ($env['id_parent']) {
$qp->top('body')->find('li.fieldset_config')->remove();
}
// retourner le HTML modifie
$flux['data'] = $qp->top('body>div')->xhtml();
}
return $flux;
}Manipulez du HTML5
6 mai 2020
Avec la dernière version du plugin Querypath V2.0.0 avec la librairie https://github.com/technosophos/querypath
$qp = html5qp("path/to/file.html");
Voici un exemple dans une fonction pour insérer du html avant le tag $class
function inserer_du_html($html, $class, $a_inserer) {
if(isset($html) AND isset($a_inserer) AND isset($class)){
include_spip('lib/querypath-3.0.4/vendor/autoload');
if (function_exists("html5qp")){
$qp = html5qp($html);
$qp->find($class)->before($a_inserer);
return $qp->html5();
}
} else {
return $html;
}
}
Discussions by date of activity
6 discussions
Bonjour,
L’URL de la doc tombe sur une 404.
Il faudrait remplacer par http://querypath.org/
Reply to this message
Bonjour,
Je teste ce plugin avec un plugin qui l’utilise : spip_bible.
Cela sous SPIP 4.1.2 Git + PHP 8.1.6.
J’ai juste créé un article en écrivant dans le texte :
<bible|passage=Gn1,1-2,1>Et j’ai des warnings PHP. Voici ce que me dit xdebug :
Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in plugins\querypath\lib\querypath-3.0.4\src\QueryPath\DOMQuery.php on line 100 Call Stack # Time Memory Function Location 1 0.0002 436472 {main}( ) ...\index.php:0 2 0.0897 7612352 charger_fonction( $nom = 'fond', $dossier = ???, $continue = ??? ) ...\index.php:159 3 0.0897 7612504 include_spip( $f = 'exec/fond', $include = ??? ) ...\utils.php:82 4 0.0897 7612544 find_in_path( $file = 'exec/fond.php', $dirname = '', $include = TRUE ) ...\utils.php:159 5 0.1025 7629528 include_once( 'C:\laragon\_spipmu4_\ecrire\exec\fond.php ) ...\utils.php:1626 6 0.1161 7686944 include( 'C:\laragon\_spipmu4_\ecrire\public.php ) ...\fond.php:75 7 0.1875 13241280 include( 'C:\laragon\_spipmu4_\ecrire\public\evaluer_page.php ) ...\public.php:157 8 0.1875 13261280 eval( 'C:\laragon\_spipmu4_\ecrire\public\evaluer_page.php(53) : eval()'d code ) ...\evaluer_page.php:53 9 0.1875 13262728 recuperer_fond( $fond = 'prive/squelettes/structure', $contexte = ['exec' => 'article', 'id_article' => 37, 'date' => '2022-06-08 20:07:53', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:53', 'date_redac_default' => TRUE, 'type-page' => 'article', 'composition' => '', 'lang' => 'fr'], $options = ['compil' => [0 => '../prive/squelettes/page.html', 1 => 'html_4eba727ca88eb65d7d2303ecd437642b', 2 => '', 3 => 1, 4 => 'fr']], $connect = '' ) ...\evaluer_page.php(53) : eval()'d code:10 10 0.1875 13263480 evaluer_fond( $fond = 'prive/squelettes/structure', $contexte = ['exec' => 'article', 'id_article' => 37, 'date' => '2022-06-08 20:07:53', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:53', 'date_redac_default' => TRUE, 'type-page' => 'article', 'composition' => '', 'lang' => 'fr'], $connect = '' ) ...\utils.php:3453 11 0.1965 13292400 include( 'C:\laragon\_spipmu4_\ecrire\public\evaluer_page.php ) ...\assembler.php:718 12 0.1965 13316912 eval( 'C:\laragon\_spipmu4_\ecrire\public\evaluer_page.php(53) : eval()'d code ) ...\evaluer_page.php:53 13 1.1307 16231128 recuperer_fond( $fond = 'prive/squelettes/body', $contexte = ['exec' => 'article', 'id_article' => 37, 'date' => '2022-06-08 20:07:53', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:53', 'date_redac_default' => TRUE, 'type-page' => 'article', 'composition' => '', 'lang' => 'fr', 'espace_prive' => '1'], $options = ['compil' => [0 => '../prive/squelettes/structure.html', 1 => 'html_9c3e24141047608e65b9379a18338a89', 2 => '', 3 => 9, 4 => 'fr']], $connect = '' ) ...\evaluer_page.php(53) : eval()'d code:30 14 1.1307 16231880 evaluer_fond( $fond = 'prive/squelettes/body', $contexte = ['exec' => 'article', 'id_article' => 37, 'date' => '2022-06-08 20:07:53', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:53', 'date_redac_default' => TRUE, 'type-page' => 'article', 'composition' => '', 'lang' => 'fr', 'espace_prive' => '1'], $connect = '' ) ...\utils.php:3453 15 1.1534 16431728 include( 'C:\laragon\_spipmu4_\ecrire\public\evaluer_page.php ) ...\assembler.php:718 16 1.1535 16475400 eval( 'C:\laragon\_spipmu4_\ecrire\public\evaluer_page.php(53) : eval()'d code ) ...\evaluer_page.php:53 17 2.7979 21170064 recuperer_fond( $fond = 'prive/squelettes/contenu/article', $contexte = ['exec' => 'article', 'id_article' => 37, 'date' => '2022-06-08 20:07:53', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:53', 'date_redac_default' => TRUE, 'type-page' => 'article', 'composition' => '', 'lang' => 'fr', 'espace_prive' => '1'], $options = ['compil' => [0 => '../prive/squelettes/body.html', 1 => 'html_26d034b0a2ae11e5cd9fbc75f7acd737', 2 => '', 3 => 22, 4 => 'fr'], 'ajax' => 'contenu'], $connect = '' ) ...\evaluer_page.php(53) : eval()'d code:73 18 2.7979 21170816 evaluer_fond( $fond = 'prive/squelettes/contenu/article', $contexte = ['exec' => 'article', 'id_article' => 37, 'date' => '2022-06-08 20:07:53', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:53', 'date_redac_default' => TRUE, 'type-page' => 'article', 'composition' => '', 'lang' => 'fr', 'espace_prive' => '1'], $connect = '' ) ...\utils.php:3453 19 2.9224 21728240 include( 'C:\laragon\_spipmu4_\ecrire\public\evaluer_page.php ) ...\assembler.php:718 20 2.9225 21772776 eval( 'C:\laragon\_spipmu4_\ecrire\public\evaluer_page.php(53) : eval()'d code ) ...\evaluer_page.php:53 21 3.1025 22414888 recuperer_fond( $fond = 'prive/objets/contenu/article', $contexte = ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr'], $options = ['compil' => [0 => '../prive/squelettes/contenu/article.html', 1 => 'html_fd316aea417fb537058a52c4fdb6a9fa', 2 => '', 3 => 22, 4 => 'fr'], 'ajax' => 'wysiwyg'], $connect = '' ) ...\evaluer_page.php(53) : eval()'d code:47 22 3.1025 22415640 evaluer_fond( $fond = 'prive/objets/contenu/article', $contexte = ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr'], $connect = '' ) ...\utils.php:3453 23 3.1025 22415640 inclure_page( $fond = 'prive/objets/contenu/article', $contexte = ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr'], $connect = '' ) ...\assembler.php:712 24 3.1025 22416144 public_produire_page( $fond = 'prive/objets/contenu/article', $contexte = ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr'], $use_cache = -1, $chemin_cache = '', $contexte_cache = ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr'], $page = [], $lastinclude = 0, $connect = '', $global_context = ???, $init_time = ??? ) ...\assembler.php:306 25 3.1026 22416176 public_produire_page_dist( $fond = 'prive/objets/contenu/article', $contexte = ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr'], $use_cache = -1, $chemin_cache = '', $contexte_cache = ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr'], $page = [], $lastinclude = 0, $connect = '' ) ...\cache_cool_options.php:129 26 3.1026 22416176 public_parametrer_dist( $fond = 'prive/objets/contenu/article', $contexte = ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr'], $cache = '', $connect = '' ) ...\assembler.php:342 27 3.1136 22473480 html_9c8e49d058fc00c80e8a2c9cd51cb2ca( $Cache = ['cache' => ''], $Pile = [0 => ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE]], $doublons = ???, $Numrows = ???, $SP = ??? ) ...\parametrer.php:112 28 3.1136 22473608 BOUCLE_afficher_contenuhtml_9c8e49d058fc00c80e8a2c9cd51cb2ca( $Cache = ['cache' => ''], $Pile = [0 => ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE], 1 => ['virtuel' => '', 'lang' => 'fr', 'surtitre' => '', 'id_article' => '37', 'titre' => 'SPIP Bible', 'soustitre' => '', 'descriptif' => '', 'chapo' => '', 'nom_site' => '', 'url_site' => '', 'texte' => ' ', 'ps' => '', 'id_rubrique' => '16']], $doublons = [], $Numrows = [], $SP = 0 ) ...\html_9c8e49d058fc00c80e8a2c9cd51cb2ca.php:277 29 3.1242 22496912 propre( $t = ' ', $connect = '', $env = ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE] ) ...\html_9c8e49d058fc00c80e8a2c9cd51cb2ca.php:190 30 3.1242 22496912 expanser_liens( $t = ' ', $connect = '', $env = ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE] ) ...\texte.php:836 31 3.1255 22518968 traiter_modeles( $texte = ' ', $doublons = FALSE, $echap = FALSE, $connect = '', $liens = [0 => [], 1 => []], $env = ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE] ) ...\lien.php:285 32 3.1256 22520384 inclure_modele( $type = 'bible', $id = '', $params = '|passage=Gn1,1-2,1', $lien = FALSE, $connect = '', $env = ['id' => '37', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE] ) ...\lien.php:855 33 3.1302 22540192 recuperer_fond( $fond = 'modeles/bible', $contexte = ['id' => '', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE, 'dir_racine' => '../', 'id_bible' => '', 'class' => '', 'args' => ['passage' => 'Gn1,1-2,1'], 'passage' => 'Gn1,1-2,1'], $options = [], $connect = '' ) ...\assembler.php:677 34 3.1302 22540944 evaluer_fond( $fond = 'modeles/bible', $contexte = ['id' => '', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE, 'dir_racine' => '../', 'id_bible' => '', 'class' => '', 'args' => ['passage' => 'Gn1,1-2,1'], 'passage' => 'Gn1,1-2,1'], $connect = '' ) ...\utils.php:3453 35 3.1302 22540944 inclure_page( $fond = 'modeles/bible', $contexte = ['id' => '', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE, 'dir_racine' => '../', 'id_bible' => '', 'class' => '', 'args' => ['passage' => 'Gn1,1-2,1'], 'passage' => 'Gn1,1-2,1'], $connect = '' ) ...\assembler.php:712 36 3.1302 22541768 public_produire_page( $fond = 'modeles/bible', $contexte = ['id' => '', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE, 'dir_racine' => '../', 'id_bible' => '', 'class' => '', 'args' => ['passage' => 'Gn1,1-2,1'], 'passage' => 'Gn1,1-2,1'], $use_cache = -1, $chemin_cache = '', $contexte_cache = ['id' => '', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE, 'dir_racine' => '../', 'id_bible' => '', 'class' => '', 'args' => ['passage' => 'Gn1,1-2,1'], 'passage' => 'Gn1,1-2,1'], $page = [], $lastinclude = 0, $connect = '', $global_context = ???, $init_time = ??? ) ...\assembler.php:306 37 3.1302 22541800 public_produire_page_dist( $fond = 'modeles/bible', $contexte = ['id' => '', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE, 'dir_racine' => '../', 'id_bible' => '', 'class' => '', 'args' => ['passage' => 'Gn1,1-2,1'], 'passage' => 'Gn1,1-2,1'], $use_cache = -1, $chemin_cache = '', $contexte_cache = ['id' => '', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE, 'dir_racine' => '../', 'id_bible' => '', 'class' => '', 'args' => ['passage' => 'Gn1,1-2,1'], 'passage' => 'Gn1,1-2,1'], $page = [], $lastinclude = 0, $connect = '' ) ...\cache_cool_options.php:129 38 3.1302 22541800 public_parametrer_dist( $fond = 'modeles/bible', $contexte = ['id' => '', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE, 'dir_racine' => '../', 'id_bible' => '', 'class' => '', 'args' => ['passage' => 'Gn1,1-2,1'], 'passage' => 'Gn1,1-2,1'], $cache = '', $connect = '' ) ...\assembler.php:342 39 3.1313 22571072 html_13497edf219f440a6393eb350b3e87ea( $Cache = ['cache' => ''], $Pile = [0 => ['id' => '', 'id_article' => '37', 'virtuel' => 'oui', 'wysiwyg' => '1', 'espace_prive' => '1', 'lang' => 'fr', 'date' => '2022-06-08 20:07:56', 'date_default' => TRUE, 'date_redac' => '2022-06-08 20:07:56', 'date_redac_default' => TRUE, 'dir_racine' => '../', 'id_bible' => '', 'class' => '', 'args' => [...], 'passage' => 'Gn1,1-2,1']], $doublons = ???, $Numrows = ???, $SP = ??? ) ...\parametrer.php:112 40 3.1313 22571104 bible( $passage = 'Gn1,1-2,1', $traduction = 'tob', $mode_test = ??? ) ...\html_13497edf219f440a6393eb350b3e87ea.php:23 41 3.1327 22592504 recuperer_passage_lire( $livre = 'Gn', $chapitre_debut = '1', $verset_debut = '1', $chapitre_fin = '2', $verset_fin = '1', $lire = 'TOB', $lang = 'fr' ) ...\bible_fonctions.php:185 42 4.0401 23482064 QueryPath\DOMQuery->remove( $selector = '.chapitre, .titre2, .titre3, .titre4' ) ...\lire.php:70 43 4.1048 23767896 QueryPath\DOMQuery->__construct( $document = class SplObjectStorage { private $storage = [0 => [...], 1 => [...], 2 => [...], 3 => [...], 4 => [...], 5 => [...], 6 => [...], 7 => [...], 8 => [...], 9 => [...], 10 => [...], 11 => [...], 12 => [...], 13 => [...], 14 => [...], 15 => [...], 16 => [...], 17 => [...], 18 => [...], 19 => [...], 20 => [...], 21 => [...], 22 => [...], 23 => [...]] }, $string = ???, $options = ??? ) ...\DOMQuery.php:1894 44 4.1048 23767896 trim( $string = NULL ) ...\DOMQuery.php:100Il y en a d’autres, mais impossible de coller tout ici, voilà juste les lignes
Par ailleurs, il ne m’est pas possible de poster un ticket via https://git.spip.net/spip-contrib-extensions/querypath.git
Et enfin, il y a une version 3.0.5 de la lib ici https://github.com/technosophos/querypath/releases/tag/3.0.5 qui apporte quelque chose pour HTML5.
Reply to this message
Comme je le signale ici http://zone.spip.org/trac/spip-zone/changeset/91788 il y a un gros bug avec la librairie libxml2 qui affecte querypath dans certaines versions récentes de PHP (5.6.4 en ce qui me concerne, avec libxml version 2.9.2).
Pas d’alternative au bug, qui a lieu dès qu’un attribut ID est présent dans le code HTML, c’est à dire… quasiment tout le temps !
Donc voilà, si vous avez “PHP Warning: DOMNode::cloneNode(): ID XXXXX already defined in quelquechose/DOMQuery.php on line 3176” ou proche, c’est que ça provient certainement de ce bug :/
Reply to this message
Avec le pipeline _afficher_contenu_objet, on peut afficher différemment les champs extra. Ce code efface ces champs (div.afficher) de la page d’un auteur pour ajouter le squelette “auteur_extras_vue”.
Avec Querypath, difficile de trouver une solution à l’utf-8 et au Bom des fichiers de lang, par contre le remplacement est assez fort pour respecter la chaine traduite. Pour ne pas avoir un “Qui est l?auteur?” mais bien un “Qui est l’auteur” ce code récupère la chaine et la remet en place:
Reply to this message
Merci pour ce plugin, je suis tombé dessus presque par hasard au moment même où j’avais besoin de quelque sorte de la sorte.
Très pratique pour modifier des morceaux de squelettes sans avoir à les surcharger, ou en complément des champs extras afin d’afficher les nouveaux champs exactement où on veut dans la page.
Dommage que la doc oficielle soit un peu spartiate cependant.
Ah, et un truc étrange : je n’ai pas testé avec spip_query_path(), mais pour moi seul htmlqp() fonctionne avec l’espace privé, qp() me renvoit plein d’erreurs, même en désactivant l’option correspondante.
Pourtant si j’ai bien lu, htmlqp est réservé au pages html de ’mauvaise’ qualité... Mystère.
Reply to this message
Intéressant... Cela pourrait donc être utilisé, lorsque l’on veut des formulaires un peu simplifiés par rapport ceux de la dist, de ne pas les surcharger dans notre plugin par une réécriture, mais en éliminant par QueryPath les champs d’édition non désirés ? ...
Reply to this message
Add a comment
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Follow the comments:
|
