Categories > OpenTBS with ODT >

[fr] Imbrications dans Openoffice

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Franck
Date: 2010-12-13
Time: 08:52

[fr] Imbrications dans Openoffice

Bonjour,

Grâce à l'excellent manuel, j'ai pu réaliser des imbrications de sous-blocs avec requête dynamique pour faire un système de titre, sous-titre dans openoffice.
J'arrive en dernier niveau à imbriquer le contenu de la même façon. Toutefois, j'aimerai que ce contenu puisse posséder plusieurs styles et je n'arrive pas à savoir quelle technique adopter.

Ça devrait donner ca:
titre1
  titre2
    Contenu blabla
    *** contenu avec un style particuliers**
    Contenu
    ** un autre style **
   Contenu

En mettant 2 merges block de ce type:
$TBS->MergeBlock('contenu',$cnx_id,'SELECT id,id_titre2,titre3, contenu FROM titre3 WHERE (id_titre2=%p1%) AND type <> "remarque"');
$TBS->MergeBlock('contenu_type_remarque',$cnx_id,'SELECT id,id_titre2,titre3, contenu FROM titre3 WHERE (id_titre2=%p1%) AND type = "remarque"');

les 2 blocs sont parsés l'un après l'autre mais pas au fil de l'eau, ce qui semble un comportement normal, mais pas celui que je souhaite.

Je me demande, si dans ma table contenu, je ne pourrai pas mettre une balise qui fasse que tout ce qui entoure la balise soit appliqué au style remarque, mais j'ignore quelle fonction utiliser.

Si vous avez l'expérience de ce genre de chose, une astuce ou une meilleur méthode, je serai très heureux de pouvoir en bénéficier.

Merci.

Franck


By: Skrol29
Date: 2010-12-13
Time: 11:03

Re: Imbrications dans Openoffice

Salut Frank,

Le plus simple c'est de créer deux styles personnalisés sous OpenOffice (touche F11, ou menu "Format/Styles et formatage").
Puis tu utilises le paramètre "att" pour modifier l'attribut "text:style-name" qui est celui qui défini le style de texte sous OpenOffice.
"text:style-name" peut s'appliquer à une balise <text:p> si tu as défini le style personnalisé comme style de paragraphe, ou à une balise <text:span> si c'est un style de caractère.
Pour utiliser le paramètre "att", il faut effectivement que tu arrives à retourner le nom du style à appliquer à partir d'une colonne du bloc à fusionner. Le nom du style peut être directement une valeur d'une colonne, ou le résultat d'un expression avec if/then/else ou encore ope=msk.
Exemple :
[blk.type;att=text:style-name;if [val]='remarque';then 'styleperso1',else 'Standard'] [blk.contenu]
'Standard' est le texte style par défaut dans OpenOffice.
By: Franck
Date: 2010-12-13
Time: 13:04

Re: Imbrications dans Openoffice

Merci beaucoup Skrol29 pour cette réponse rapide.

Je comprends maintenant mieux vers quoi chercher.

Je n'ai malheureusement pas réussi à faire fonctionner la solution, je dois m'y prendre mal ou me planter dans la syntaxe.

Mon fichier odt comporte par exemple 2 styles personnalités: Console et note.  (la table contient un champ type qui vaut parfois console)
Pour essai, je place dedans:

[contenu;block=begin;p1=[titre2.id]]
[contenu.type;att=text:style-name;if [type]='console';then 'Console',else 'note'] [contenu.contenu]
[contenu;block=end;p1=[titre2.id]]

et dans le php, $TBS->MergeBlock('contenu',$cnx_id,'SELECT id,id_titre2,titre3,type, contenu FROM titre3 WHERE (id_titre2=2)');  


Mais le remplacement des style ne se fait pas. J'ai regardé le content.xml et je ne trouve nul trace d'un style Console ou note  (j'avais testé avec Standard auparavant comme tu l'as suggéré).

Je vais continuer à chercher.

Merci encore.

Franck.
By: Skrol29
Date: 2010-12-13
Time: 14:30

Re: Imbrications dans Openoffice

salut,

Il y a  deux erreur dans le code que tu viens de poster.
1)
if [type]='console'
c'est plutôt
if [val]='console'
sinon la condition sera toujours fausse, car [type] est pris pour une chaîne texte, et non pas comme une expression

2) ce n'est pas
then 'Console',else 'note'
mais plutôt
then 'Console';else 'note'

By: Franck
Date: 2010-12-13
Time: 14:41

Re: Imbrications dans Openoffice

Whouah! Ça marche impeccable.

J'ai honte de ne pas avoir vu le ; à la place de , avant le else.
Pour le [val], je n'avais pas compris la syntaxe.

Je ne sais comment te remercier Skrol29. Ça va me permettre de bien avancer.

Merci encore de ta rapidité et de ton partage de connaissances.

Franck