Query Path

Query Path (http://querypath.org/) est une librairie PHP permettant de récupérer, sélectionner et manipuler un contenu HTML comme le fait la librairie javascript jQuery. Ce plugin permet d’utiliser cette librairie dans SPIP.

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 :

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;
	}
}

Discussion

5 discussions

  • 2

    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:100
    

    Il y en a d’autres, mais impossible de coller tout ici, voilà juste les lignes

    ( ! ) Deprecated: Return type of QueryPath\CSS\Selector::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in plugins\querypath\lib\querypath-3.0.4\src\QueryPath\CSS\Selector.php on line 61
    ( ! ) Deprecated: Return type of QueryPath\CSS\Selector::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in plugins\querypath\lib\querypath-3.0.4\src\QueryPath\CSS\Selector.php on line 76
    ( ! ) 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
    
    

    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

  • 1

    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”.

    // charger QueryPath
    include_spip('inc/querypath');
                    
    $html = $flux['data'];
    $env = $flux['args']['contexte'];
    $qp = htmlqp($html, 'body');
                    
    //effacer tout les champs extras
    $qp->top('body')->find('div.afficher')->remove();
                    
    //stocker un squelette calculé
    $saisies_mieux = recuperer_fond('auteur_extras_vue', $env);
    
    // retourner le HTML modifie
    $flux['data'] = $saisies_mieux.$qp->top('body')->xhtml();
    • 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:

      $qui_est_lauteur=_T('entree_infos_perso_2');
      $qp->top('body')->find('.editer_bio label')->html($qui_est_lauteur);

    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 :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite / PostgreSQL
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparait.

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.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom