Pages :
Bonjour,

Je suis en train de faire mumuse sur un nouveau site web et j'ai à répéter plusieurs fois le même bout de code HTML, et c'est pénible.

Certes, je pourrai le faire en PHP, mais le code devient vite brouillon.
Certes bis, je pourrai le faire en JS à grand coups de changement de innerHTML, mais là c'est le JS qui devient brouillon.

J'ai donc cherché une autre solution. Comme j'utilise Backbase dans le cadre professionnel, j'ai vite trouvé ce que je voulais faire.
J'aimerai, comme le fait Backbase, créer des objets moi-même, qui seraient donc de gros raccourcis pour simplifier mon code.
Je sais qu'il faut faire des DTDs et les utiliser en coordination avec du XHTML : je sais faire une DTD et je sais faire du XHTML... mais comment faire pour mixer le tout pour pouvoir obtenir quelque chose du style <z:mon_objet>le inner de mon objet</z:mon_objet> ?

Quelqu'un pourrai-t-il m'éclairer de sa lanterne afin de pouvoir faire ceci ?
Je pense qu'une telle manipulation pourrai intéresser pas mal de monde.

edit : oups, je voulais mettre le message dans "HTML, XHTML, sémantique web", où il serai mieux à sa place...
Modifié par Maze (23 Feb 2007 - 17:59)
Maze a écrit :
Certes, je pourrai le faire en PHP, mais le code devient vite brouillon.

Ca, ça dépend comment est torché le code PHP Smiley lol

Maze a écrit :
Je sais qu'il faut faire des DTDs et les utiliser en coordination avec du XHTML

C'est possible, sauf que tu va perdres toute sémantique. A moins que tes balises soient publiquements documentées (et encore, ça suffira pas), il vaut mieux rester en bon vieux html
Pour le PHP :
- soit j'ai une fonction à laquelle je passe une grosse chaine de caractère pour le contenu, allant d'une phrase à une plein de balises HTML remplie de texte avec CSS et tout le bazar : c'est pas génial de produire autant de HTML à grand coups de echo.
- soit j'ai 2 fonctions, une pour ouvrir, une pour fermer l'objet : moins de html généré avec echo mais pas mal quand même, mais entourer mon HTML de 2 fonctions à chaque fois, ça devient pesant.

Pour les nouvelles balises, la sémantique et leur doc, je ne vois pas le problème : JSP et JSF, ce n'est que ça des nouvelles balises et une nouvelle sémantique avec de la doc ; Backbase (la version communautaire) c'est la même chose mais en JS.
En plus, si c'est pour mon usage personnel, la doc peut attendre Smiley murf

J'ai cherché un sacré moment mais je n'ai rien trouvé sur comment créer sa propre sémantique. Comme la DTD je n'ai pratiqué que pour définir des clusters Xylem, le faire dans le cadre du dev en XJTML, je sais pas comment l'intégrer.

J'ai tenté de "décrypter" ce que fait Backbase mais c'est du JS "optimisé" en mettant des fonctions et des variables à une ou 2 lettres, le tout en monoligne... et puis en plus, vu que ça génère tout en JS, je te raconte pas le temps de chargement de la page... Smiley ohwell

Personne sait faire ce qui m'intéresse alors ?
Bonjour,

Si tu veux faire simple et propre utilise simplement la balise <object>, elle est faite pour cela. Elle te permet d'insérer toute sorte de chose dont des fragments html.

Si tu veux faire compliqué, le principe est expliqué par le W3C dans le cadre de la modularisation XHTML. A la DTD de base tu peux ajouter des modules (target, mathml, svg ...)
Bonjour,

Xavier a écrit :
Si tu veux faire simple et propre utilise simplement la balise <object>, elle est faite pour cela. Elle te permet d'insérer toute sorte de chose dont des fragments html.


De manière non accessible dans les implémentations actuelles.
Bonjour,

Donc avec <object> je peux faire un truc du genre :
<object codebase="..." [...] >
mon code à inséré
</object>
en définissant une structure XHTML appelé par <object> ?
Mais comment... ?
À priori Laurent dit que pour l'instant ce n'est pas vraiment possible pour faire ce que je veux.

Je sais que l'on peut incruster du SVG et du MATHML direct dans le XHTML, en rajoutant l'attribut xmlns qui convient à ces balises, d'ailleurs je compte bien coller du SVG dans mes pages Smiley langue
C'est justement parce que je sais que le XHTML est modulable que je pose la question Smiley cligne
Mais le problème c'est que je ne vois pas comment mettre ça en place.

À la W3C, ils sont bien gentils mais quand je les lis, j'ai l'impression de relire mes cours de droit tellement c'est brumeux... Ce sont des specs techniques complexes qu'ils exposent brut de décoffrage, mais pas d'explications simples pour les mettre en pratique : si quelqu'un a un lien, je suis preneur ; où si quelqu'un veut bien dépenser de son temps à m'expliquer, je suis preneur aussi.
Modifié par Maze (05 Mar 2007 - 11:14)
Maze a écrit :

À priori Laurent dit que pour l'instant ce n'est pas vraiment possible pour faire ce que je veux.


Disons que je serais très curieux de voir un site en production réalisé de cette manière, qui me semble relever actuellement davantage du fantasme incantatoire qu'autre chose.
Modifié par Laurent Denis (05 Mar 2007 - 11:19)
Si ça marche, je suis prêt à tester : j'ai envie de rester sur du XHTML 1.0 transitional.

Mais à priori, il semblerai que pour faire ce que je veux, la seule solution qui me reste soit XML + XSLT, parce que personne ne semble savoir comment faire autrement qu'avec du PHP ou du JS.

Un XML généré en PHP parsé par une XSL, ça peut être ce qui sera le plus simple, bien que je n'aime pas faire du XSL : je ne sais pas pourquoi, je n'accroche pas. Surtout qu'il me semble que certains navigateurs ont des problèmes d'interprétation du duo XML + XSL (je sais que c'était le cas de Opera pendant un temps).

Ou alors je télécharge la DTD XHTML 1.0, je la modifie en rajoutant ce qu'il me faut et je la met en référence dans mon doctype de ma page ?
a écrit :
parce que personne ne semble savoir comment faire autrement qu'avec du PHP


Disons que les langages serveurs sont fait exactement pour répondre à ce besoin Smiley cligne
Modifié par Laurent Denis (05 Mar 2007 - 11:33)
C'est pas faux, ça peut servir à ça.

Mais pour moi, le PHP ne me sert qu'à insérer des valeurs dans le HTML et à répéter des blocs de HTML brut (avec des valeurs insérées en PHP dedans bien sûr) : écrire le HTML à grands coups de echo je trouve ça un peu sale et un peu super chiant à maintenir.
Je ne dis pas qu'un petit echo d'un petit bout de HTML de temps en temps ne soit pas plus rapide à faire que fermer et ouvrir des balises PHP tous les 10 caractères, et j'emploie donc echo volontiers dans ces cas là.

Le problème ici est que pour générer ce que je veux en PHP, je dois faire une fonction qui déjà d'elle même génèrera le HTML avec echo, et en paramètre cette fonction va recevoir encore du HTML sous forme de texte pour le générer avec echo.
Là c'est quand même du chiant à maintenir puissance 10.

Peut-être qu'il est possible de faire quelque chose du genre :
maFonctionPHP (?>
mon html
<?php);

je ne pense pas ?
Dans la même veine, est-ce qu'il est possible de faire :
function maFonctionPHP ($paramètre) {
/* du code */
?> du html <?php
/* du code */
}

et coller ça genre avant le <head> ?
Les 2 en combinaison, ça m'irai bien, mais est-ce réellement faisable ?

J'aime faire du code modulaire et facile à maintenir, je suis comme ça Smiley langue
Pour ce qui concerne l'inclusion d'un contenu avec la balise object, quelque chose comme cela devrait convenir :
<object data="/chemin/vers/fragment.html" type="text/html" >
</object>

Je l'ai déjà utilisé en production, cela fonctionne donc. Mais c'est vrai que le contenu inclus n'est pas accessible. Et puis cela ne semble guère convenir à Laurent Denis, ce qui globalement fini par faire beaucoup d'inconvénients.

Pour l'aspect modularisation, voici un exemple avec MathML.
Si j'ai bien compris les recommandations W3C, <object> devrait remplacer <iframe> à terme, donc rien d'étonnant à inclure un bout de HTML par ce moyen.
Par contre, ce qui m'intéresse, c'est de récupérer ce qu'il y aurai entre <object> et </object> pour l'inclure dans le contenu du bout de code appelé, et ça, ce n'est pas possible. (Ou alors si mais comment ?)

L'exemple sur MathML est très intéressant (celui que j'avais vu pour SVG était plus simpliste). J'en ai déduit 2 choses :
- soit je crée ma propre DTD en faisant un include de la DTD de XHTML dedans et en rajoutant ma sauce, et ensuite je la mets dans le doctype,
- soit, à priori, je peux créer directement ma déclaration d'entité en rajoutant quelque chose du genre :
[
  <!ENTITY % xhtml-mon_modul.mod
     PUBLIC "-//W3C//ENTITIES XHTML 1.1 Mon Module 1.0//EN"
            "http://monadresseweb.com/xhtml-mon_modul.mod" >
]
juste avant la fermeture de ma balise doctype.

Que quelqu'un me corrige si je dis une bêtise, mais là je crois je tiens le bon bout.

Au passage, cette discussion ne serai-t-elle pas mieux dans "HTML, XHTML, sémantique web" ? (avis aux admin)
Xavier a écrit :

Je l'ai déjà utilisé en production, cela fonctionne donc. Mais c'est vrai que le contenu inclus n'est pas accessible. Et puis cela ne semble guère convenir à Laurent Denis, ce qui globalement fini par faire beaucoup d'inconvénients.


Ce n'est pas que cela ne me plaît pas. C'est que cette arlésienne commence à devenir lassante.

Donc, bis repetitat: une url ? un cas concret ? quelque-chose d'analysable ?
Maze a écrit :
Par contre, ce qui m'intéresse, c'est de récupérer ce qu'il y aurai entre <object> et </object> pour l'inclure dans le contenu du bout de code appelé, et ça, ce n'est pas possible. (Ou alors si mais comment ?)
J'avoue que je ne comprends pas réellement ta phrase.
Le principe de la balise <object> est le suivant :
- avoir un fragment html dans une page séparée fragment.html
- inclure autant de fois que nécessaire le fragment dans un document principal comme ceci :
<html>
...du code html ....
<body>
 ...du code html ....
<object data="/chemin/vers/fragment.html" type="text/html" >
</object>
...du code html ....
<object data="/chemin/vers/fragment.html" type="text/html" >
</object>
...du code html ....
</body>
</html>


Concernant la modularisation, un exemple plus complet nécessitant la composition d'une nouvelle DTD à propos du module target (voir le bas de la page).
Maze a écrit :
Si j'ai bien compris les recommandations W3C, <object> devrait remplacer <iframe> à terme, donc rien d'étonnant à inclure un bout de HTML par ce moyen.
Par contre, ce qui m'intéresse, c'est de récupérer ce qu'il y aurai entre <object> et </object> pour l'inclure dans le contenu du bout de code appelé, et ça, ce n'est pas possible. (Ou alors si mais comment ?)


???
Entre <object> et </object>, il y a le contenu alternatif de l'objet. Ici, il ne peut s'agir que d'un lien vers l'url de la page incluse par l'objet (avec la navigation démente que cela suppose dans les contenus ainsi gérés, mais passons), ainsi une brève description de son rôle. Or, ces informations sont nécessairement déjà connues...
Modifié par Laurent Denis (06 Mar 2007 - 13:06)
Administrateur
Bonjour,

un langage côté serveur (PHP ou autre), une boucle d'itération (for, while), l'utilisation de fonctions (ou de classes objets), le passage de paramètres par référence ou par valeur (ce n'est pas toujours sale) ne seraient-ils pas un moyen tout à fait approprié de "répéter plusieurs fois le même bout de code HTML"?
Enfin si le but c'est de n'utiliser ni function() ni for(), OK ... Smiley crazy

EDIT: et mod_gzip sauvera le monde aussi
Modifié par Felipe (06 Mar 2007 - 14:05)
Un exemple simple illustrant le truc vachement plus compliqué que j'aimerai faire.
Imaginons que l'on veuille faire un bloc qui contient du texte et une image qui est en en haut à gauche. Donc le code donnerai ça :
<div class="monblock">
<img src="mon_image.jpg" class="lesimagesdemonblock" />
blablabla mon texte blabla
</div>

Et en fait, on utilise cette structure partout et souvent. Le but serai de créer une balise exprès qui remplace tout ça, ce qui donnerai :
<mabalise scr="mon_image.jpg" class="monblock">
blablabla mon texte blabla
</mabalise>
(cf http://backbase.com qui eux le font en JS et que c'est bien lourd)
Ce n'est qu'un exemple hypothétique totalement improvisé mais j'espère que ça explique mieux ce que je cherche à faire.

Laurent, c'est bien ce que je pensais, donc <object> ne va pas.

Felipe, comme je l'ai dit dans un précédent post (24 Feb 2007 - 18:49:41, redis le 05 Mar 2007 - 11:12:47), le but est de ne pas utiliser
echo "plein du code HTML en texte".$la_grosse_chaine_en_paramètre_de_ma_fonction."plein du code HTML en texte";
parce que justement c'est sale : ça rend le code HTML difficile à maintenir rapidement étant donné que c'est une chaine de caractères, avec tous les échappements style \" nécessaires à sa bonne interprétation, et sa non colorisation dans l'IDE.
En plus, créer un objet exprès XHTML simplifierai nettement le code dans la page.

Je ne suis pas contre l'utilisation de PHP pour répéter du HTML, je le fais dans mes blogs. Mais c'est un cas spécial puisque qu'il n'y a pas de fonction, juste un while pour répéter le même bloc à la suite de son précédent, donc le HTML n'est pas écrit avec des echo.

Mais là, l'objet utilisé sera répété à divers endroits du code, donc une fonction serai appropriée mais je serai obligé de passé à l'utilisation du echo, bien crade comme expliquée plus haut.
Maze a écrit :
le but est de ne pas utiliser
echo "plein du code HTML en texte".$la_grosse_chaine_en_paramètre_de_ma_fonction."plein du code HTML en texte";
parce que justement c'est sale : ça rend le code HTML difficile à maintenir rapidement étant donné que c'est une chaine de caractères, avec tous les échappements style \" nécessaires à sa bonne interprétation, et sa non colorisation dans l'IDE.


Question un peu brutale, sans doute, mais nécessaire: pourquoi ne pas apprendre à utiliser correctement PHP ? Le fond du problème me semble surtout résider là Smiley cligne
Modifié par Laurent Denis (06 Mar 2007 - 14:54)
Alors réponse brutal : pourquoi ne pas avoir répondu au post du 05 Mar 2007 - 12:22:51 (remis en forme) ?
a écrit :
Peut-être qu'il est possible de faire quelque chose du genre :
maFonctionPHP (?>

mon html

<?php);

je ne pense pas ?
Dans la même veine, est-ce qu'il est possible de faire :
function maFonctionPHP ($paramètre) {

/* du code */

?> du html <?php

/* du code */

}

et coller ça genre avant le <head> ?
Les 2 en combinaison, ça m'irai bien, mais est-ce réellement faisable ?

Mais sinon je veux bien que tu m'expliques comment bien utiliser PHP dans cette situation et apprendre grâce à ta démonstration de compétences.
Maze a écrit :
Mais là, l'objet utilisé sera répété à divers endroits du code, donc une fonction serai appropriée mais je serai obligé de passé à l'utilisation du echo, bien crade comme expliquée plus haut.

Failure. Fait un fichier template dont l'hôte serait l'html, qui serait inclus par une fonction :
function pouet($machin, $truc)
{
  require('pouet.tpl.php');
}

Et le fichier pouet :
<div>
plein de code html
<p><?php echo htmlspecialchars($machin) ?></p>
<p><?php echo htmlspecialchars($truc) ?</p>
</div>

Et voilà !
Pages :