IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Affichage des résultats du sondage: Quel système de template utilisez/utiliseriez - vous ?

Votants
147. Vous ne pouvez pas participer à ce sondage.
  • PHPLib

    42 28,57%
  • VTemplate

    5 3,40%
  • Smarty

    81 55,10%
  • ModeliXe

    10 6,80%
  • PowerTemplate

    1 0,68%
  • PHPTemplate

    5 3,40%
  • Xtemplates

    2 1,36%
  • EcTemplate

    0 0%
  • UltraTemplate

    0 0%
  • Itemplate

    0 0%
  • Quick Template

    1 0,68%
  • YATS

    0 0%
Bibliothèques et frameworks PHP Discussion :

[Templates] Quel système utilisez-vous ? Pourquoi ?


Sujet :

Bibliothèques et frameworks PHP

  1. #221
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    pour illustrer ce propos voici un exemple de template en phtml et le même avec ets (moteur de template de 89,5 Ko)
    le template ets fait 6793 octets le même en phtml fait 9250 soit 36,16% de plus
    mais surtout en terme de lisibilité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    {mask:main}
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:fast="urn:org.jquery.fast"
          fast:includepath="{baseUrl}/public/scripts/org.jquery.fast/components/"
          xml:lang="fr" lang="fr">
       <head>
          <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
          <title>{title}</title>
          <script type="text/javascript" src="{baseUrl}/public/scripts/org.jquery.fast/jquery-latest.js"></script>
          <script type="text/javascript" src="{baseUrl}/public/scripts/org.jquery.fast/org.jquery.fast.js"></script>
          <script type="text/javascript" src="{baseUrl}/public/scripts/org.jquery.fast/components/cascadingselect.js"></script>
          <link rel="stylesheet" type="text/css" media="screen" href="{baseUrl}/public/styles/default.css" />
       </head>
    <body><a name="top"> </a>
    <div id="page">
    <!--  Banniere -->
    <div id="banner">
       <table  width="100%" border="0" cellspacing="0" cellpadding="0">
          <tr>
             <td align="right" height="52" valign="top"><img src="{baseUrl}/public/images/orange_logo.gif" width="40" height="40"></td>
             <td class="title" height="52" align="center" valign="top">
                <span class="left">Fast</span> Application
             </td>
             <td align="left" height="52" valign="top"><img src="{baseUrl}/public/images/esperluette.gif" width="32" height="35"></td>
          </tr>
       </table>
       <table width="100%" border="0" cellspacing="0" cellpadding="0">
         <tr>
            <td><img src="{baseUrl}/public/images/bureauxVitres.jpg" width="590" height="73"></td>
            <td>
                <table width="90%" height="73" align="right" cellpadding="3" cellspacing="0" style="background-color:#EEEEEE; border:solid 1px #DDDDDD; margin-bottom:3px;">
                   <tr><td style="background-color:#DDDDDD; font-weight:bold;">My App en chiffres</td></tr>
                   <tr><td>(x) remontées déposées</td></tr>
                   <tr><td>(x) remontées concrétisées</td></tr>
                </table>
             </td>
         </tr>
       </table>
    </div><!--  Fin de banniere -->
    <!-- menus -->
    {set://menus}
    <table class="menus" border="0" cellspacing="0" cellpadding="0">
       <tr>
       {mask://menus}
          <td title="{help}">
             {if:{actif}=='true'}<a href="{//baseUrl}/{url}" >{const:flecheDroite}{label}</a>{/if}
             {if:{actif}=='false'}<a href="#" onClick="return false;" class="inactif">{const:flecheDroite}{label}</a>{/if}
          </td>
       {/mask}
       </tr>
    </table>
    {/set}
    <!-- fin des menus -->
     
    <!-- Messages d'avertissement, confirmation... -->
    <div id="message">{set:messages}<div class="hd"><div class="c"></div></div><div class="bd"><div class="c"><div class="s">
       {mask:messages}<li class="{type}">{label}</li>
       {/mask}</div></div></div><div class="ft"><div class="c"></div></div>{/set}</div>
    <!-- Fin de messages d'avertissement, confirmation... -->
     
    <!-- Contenu principal de la page -->
    {set:_content}{include:{_content}}{const:content}{/set}
    <!-- Fin du contenu principal de la page -->
     
    <!--  Pied de page-->
    <div id="piedDePage">
    <table width="100%" border="0">
       <tr>
          <td nowrap="nowrap"><span class="diffusion">interne Groupe France T&eacute;l&eacute;com</span></td>
          <td class="separateur">&nbsp;</td>
     
          <td nowrap="nowrap">{set:user}{const:homme}{/set}{mis:user}{const:hommeGris}{/mis}</td>
          <td class="separateur">&nbsp;</td>
     
          {set:user}<td nowrap="nowrap">
             {const:flecheDroiteGris}{user/usr_firstname} {user/usr_name}
             <br /> {const:flecheDroite}<a href="{baseUrl}/login/auth/newpwd">Changer de mot de passe</a>
          </td>
          {set:user/profile}<td nowrap="nowrap">
             {const:flecheDroiteGris}{profile/rol_label}<br />
             {const:flecheDroiteGris}{profile/wkg_label}.
          </td>{/set}
     
          <td class="separateur">&nbsp;</td>{/set}
     
          <td nowrap="nowrap">
             {set:user}{const:flecheDroite}<a href="{baseUrl}/login/auth/logout">D&eacute;connexion</a>
             <br /> {const:flecheDroite}<a href="{baseUrl}/login/auth/showRoles">Changer de profil</a>{/set}
             {mis:user}{const:flecheDroite}<a href="{baseUrl}/login/auth/showLogin">Connexion</a>{/mis}
          </td>
     
          <td class="separateur">&nbsp;</td>
     
          <td nowrap="nowrap">
             {const:flecheDroite}<a href="http://metiertransverse.vente.francetelecom.fr/Site.do?position=FAST&site=Processus_France" target="_blank">R&eacute;alis&eacute; par {const:fastLogo}</a>
             <br /> {const:flecheDroiteGris}Version {//app_version}
          </td>
     
          <td class="separateur">&nbsp;</td>
     
          <td align="right" nowrap="nowrap" id="hautdepage">
             {const:flecheDoubleHaut}<a href="#top">haut de page</a>
          </td>
     
        </tr>
      </table>
    </div><!-- fin du div #piedDePage -->
    {mask:audience}
    {* Taggage Intrametrics *}
    {* l'action détermine la page et le sujet la rubrique *}
    <script type="text/javascript">
    /* Taggage Intrametrics */
    <!--
    var Intrametrics = document.createElement('iframe');
    Intrametrics.setAttribute('name', 'pixel');
    Intrametrics.setAttribute('width', '0');
    Intrametrics.setAttribute('height', '0');
    Intrametrics.setAttribute('border', '0');
    Intrametrics.setAttribute('style', 'visibility: hidden');
    Intrametrics.setAttribute('src', '{url}?'
    + 'wc={witbecode}'
    + '&tag={witbetag}'
    + '&Rdm=' + Math.random()
    + '&Referrer=' + escape(document.referrer)
    + '&NomSite={site}'
    + '&Page=' + escape("{action}")
    + '&Rubrique=' + escape("{controller}")
    );
    document.getElementById('hautdepage').appendChild(Intrametrics);
    //-->
    /* Fin taggage Intrametrics */
    </script>
    {/mask}
     
    </div><!-- fin de page -->
    </body>
    </html>
    {/mask}
    {mask:fastLogo}<img src="{//baseUrl}/public/images/logo_fast_h10.gif" width="29" height="10" alt="Fast"/>{/mask}
    {mask:flecheDoubleHaut}<img src="{//baseUrl}/public/images/flecheDoubleHaut.gif" width="8" height="8" />{/mask}
    {mask:flecheDroiteGris}<img src="{//baseUrl}/public/images/flecheDroiteGris.gif" width="8" height="8" />{/mask}
    {mask:flecheDroite}<img src="{//baseUrl}/public/images/flecheDroite.gif" width="8" height="8" />{/mask}
    {mask:flecheGauche}<img src="{//baseUrl}/public/images/flecheGauche.gif" width="8" height="8" /> {/mask}
    {mask:homme}<img src="{//baseUrl}/public/images/bonhomme.gif" width="18" height="24" align="left"/> {/mask}
    {mask:hommeGris}<img src="{//baseUrl}/public/images/bonhommeGris.gif" width="18" height="24" align="left"/> {/mask}
    {mask:requestMark}&nbsp;<span class='request'>*</span><span class='error'>!</span>{/mask}
    {mask:norequestMark}&nbsp;<span class='request'>&nbsp;</span><span class='error'>!</span>{/mask}
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:fast="urn:org.jquery.fast"
          fast:includepath="<?php echo $this->baseUrl; ?>/public/scripts/org.jquery.fast/components/"
          xml:lang="fr" lang="fr">
       <head>
          <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
          <title><?php echo $this->title; ?></title>
          <script type="text/javascript" src="<?php echo $this->baseUrl; ?>/public/scripts/org.jquery.fast/jquery-latest.js"></script>
          <script type="text/javascript" src="<?php echo $this->baseUrl; ?>/public/scripts/org.jquery.fast/org.jquery.fast.js"></script>
          <script type="text/javascript" src="<?php echo $this->baseUrl; ?>/public/scripts/org.jquery.fast/components/cascadingselect.js"></script>
          <link rel="stylesheet" type="text/css" media="screen" href="<?php echo $this->baseUrl; ?>/public/styles/default.css" />
       </head>
       <body><a name="top"></a>
          <div id="page">
             <!--  Banniere -->
             <div id="banner">
                <table  width="100%" border="0" cellspacing="0" cellpadding="0">
                   <tr>
                      <td align="right" height="52" valign="top"><img src="<?php echo $this->baseUrl; ?>/public/images/orange_logo.gif" width="40" height="40"></td>
                      <td class="title" height="52" align="center" valign="top">
                         <span class="left">Fast</span> Application
                      </td>
                      <td align="left" height="52" valign="top"><img src="<?php echo $this->baseUrl; ?>/public/images/esperluette.gif" width="32" height="35"></td>
                   </tr>
                </table>
                <table width="100%" border="0" cellspacing="0" cellpadding="0">
                  <tr>
                     <td><img src="<?php echo $this->baseUrl; ?>/public/images/bureauxVitres.jpg" width="590" height="73"></td>
                     <td>
                         <table width="90%" height="73" align="right" cellpadding="3" cellspacing="0" style="background-color:#EEEEEE; border:solid 1px #DDDDDD; margin-bottom:3px;">
                            <tr><td style="background-color:#DDDDDD; font-weight:bold;">My App en chiffres</td></tr>
                            <tr><td>(x) remontées déposées</td></tr>
                            <tr><td>(x) remontées concrétisées</td></tr>
                         </table>
                      </td>
                  </tr>
                </table>
             </div><!--  Fin de banniere -->         
             <!-- menus -->
             <?php if (isset($this->menus)) { ?>
             <table class="menus" border="0" cellspacing="0" cellpadding="0">
                <tr>
                <?php foreach ($this->menus as $menu) { ?>
                   <td title="<?php echo $menu->help; ?>">
                      <?php if($menu->actif=='true') {?>'<a href="<?php echo $this->baseUrl; ?>/<?php echo $menu->url; ?>" ><?php $this->flecheDroite() ?><?php echo $menu->label; ?></a><?php } ?>
                      <?php if($menu->actif=='false') {?><a href="#" onClick="return false;" class="inactif"><?php $this->flecheDroite() ?><?php echo $menu->label; ?></a><?php } ?>
                   </td>
                <?php } //foreach menus?>
                </tr>
             </table>
             <?php } ?>
             <!-- fin des menus -->
     
             <!-- Messages d'avertissement, confirmation... -->
             <div id="message"><?php if (isset($this->messages)) { ?><div class="hd"><div class="c"></div></div><div class="bd"><div class="c"><div class="s">
                <?php foreach ($this->messages as $message) { ?><li class="<?php echo $message->type; ?>"><?php echo $message->label; ?></li>
                <?php } //foreach messages?></div></div></div><div class="ft"><div class="c"></div></div><?php } ?></div>
             <!-- Fin de messages d'avertissement, confirmation... -->
     
             <!-- Contenu principal de la page -->
             <?php include $this->_content ;?>
             <!-- Fin du contenu principal de la page -->
     
             <!--  Pied de page-->
             <div id="piedDePage">
             <table width="100%" border="0">
                <tr>
                   <td nowrap="nowrap"><span class="diffusion">interne Groupe France T&eacute;l&eacute;com</span></td>
                   <td class="separateur">&nbsp;</td>
     
                   <td nowrap="nowrap"><?php if (isset($this->user)) { ?><?php $this->homme() ?><?php } ?><?php if (!isset($this->user)) { ?><?php $this->hommeGris() ?><?php } ?></td>
                   <td class="separateur">&nbsp;</td>
     
                   <?php if (isset($this->user)) { ?><td nowrap="nowrap">
                      <?php $this->flecheDroiteGris() ?><?php echo $this->user->usr_firstname; ?> <?php echo $this->user->usr_name; ?>
                      <br /> <?php $this->flecheDroite() ?><a href="<?php echo $this->baseUrl; ?>/login/auth/newpwd">Changer de mot de passe</a>
                   </td>
                   <?php if (isset($this->user->profile)) { ?><td nowrap="nowrap">
                      <?php $this->flecheDroiteGris() ?><?php echo $this->profile->rol_label; ?><br />
                      <?php $this->flecheDroiteGris() ?><?php echo $this->profile->wkg_label; ?>.
                   </td><?php } ?>
     
                   <td class="separateur">&nbsp;</td><?php } ?>
     
                   <td nowrap="nowrap">
                      <?php if (isset($this->user)) { ?><?php $this->flecheDroite() ?><a href="<?php echo $this->baseUrl; ?>/login/auth/logout">D&eacute;connexion</a>
                      <br /> <?php $this->flecheDroite() ?><a href="<?php echo $this->baseUrl; ?>/login/auth/showRoles">Changer de profil</a><?php } ?>
                      <?php if (!isset($this->user)) { ?><?php $this->flecheDroite() ?><a href="<?php echo $this->baseUrl; ?>/login/auth/showLogin">Connexion</a><?php } ?>
                   </td>
     
                   <td class="separateur">&nbsp;</td>
     
                   <td nowrap="nowrap">
                      <?php $this->flecheDroite() ?><a href="http://metiertransverse.vente.francetelecom.fr/Site.do?position=FAST&site=Processus_France" target="_blank">R&eacute;alis&eacute; par <?php $this->fastLogo() ?></a>
                      <br /> <?php $this->flecheDroiteGris() ?>Version <?php echo $this->app_version; ?>
                   </td>
     
                   <td class="separateur">&nbsp;</td>
     
                   <td align="right" nowrap="nowrap" id="hautdepage">
                      <?php $this->flecheDoubleHaut() ?><a href="#top">haut de page</a>
                   </td>
     
                 </tr>
               </table>
             </div><!-- fin du div #piedDePage -->
             <?php if (isset(audience)) {
             /* Taggage Intrametrics *}
             * l'action détermine la page et le sujet la rubrique
             */?>
             <script type="text/javascript">
             /* Taggage Intrametrics */
             <!--
             var Intrametrics = document.createElement('iframe');
             Intrametrics.setAttribute('name', 'pixel');
             Intrametrics.setAttribute('width', '0');
             Intrametrics.setAttribute('height', '0');
             Intrametrics.setAttribute('border', '0');
             Intrametrics.setAttribute('style', 'visibility: hidden');
             Intrametrics.setAttribute('src', '<?php echo $this->audience->url; ?>?'
             + 'wc=<?php echo $this->audience->witbecode; ?>'
             + '&tag=<?php echo $this->audience->witbetag; ?>'
             + '&Rdm=' + Math.random()
             + '&Referrer=' + escape(document.referrer)
             + '&NomSite=<?php echo $this->audience->site; ?>'
             + '&Page=' + escape("<?php echo $this->audience->action; ?>")
             + '&Rubrique=' + escape("<?php echo $this->audience->controller; ?>")
             );
             document.getElementById('hautdepage').appendChild(Intrametrics);
             //-->
             /* Fin taggage Intrametrics */
             </script>
             <?php}
     
          </div><!-- fin de page -->
       </body>
    </html>
    <?php
    function fastLogo() {?><img src="<?php echo $this->baseUrl; ?>/public/images/logo_fast_h10.gif" width="29" height="10" alt="Fast"/><?php}
    function flecheDoubleHaut() {?><img src="<?php echo $this->baseUrl; ?>/public/images/flecheDoubleHaut.gif" width="8" height="8" /><?php}
    function flecheDroiteGris() {?><img src="<?php echo $this->baseUrl; ?>/public/images/flecheDroiteGris.gif" width="8" height="8" /><?php}
    function flecheDroite() {?><img src="<?php echo $this->baseUrl; ?>/public/images/flecheDroite.gif" width="8" height="8" /><?php}
    function flecheGauche() {?><img src="<?php echo $this->baseUrl; ?>/public/images/flecheGauche.gif" width="8" height="8" /> <?php}
    function homme() {?><img src="<?php echo $this->baseUrl; ?>/public/images/bonhomme.gif" width="18" height="24" align="left"/> <?php}
    function hommeGris() {?><img src="<?php echo $this->baseUrl; ?>/public/images/bonhommeGris.gif" width="18" height="24" align="left"/> <?php}
    function requestMark() {?>&nbsp;<span class='request'>*</span><span class='error'>!</span><?php}
    function norequestMark() {?>&nbsp;<span class='request'>&nbsp;</span><span class='error'>!</span><?phpphp}
    pour ma part je me dirige de plus en plus vers l'abandon des système de template même le phtml
    je me tourne de plus en plus vers du code pur PHP
    voici un exemple de ce vers quoi je m'achemine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    $htmlDocument = new my_App_Document('XHTML','Transitional')
       ->addNameSpace('fast'; 'urn:org.jquery.fast')
       ->addNSAtrribute('fast','includepath', $view->baseUrl.'/public/scripts/org.jquery.fast/components/')
       ->addLanguage('fr')
     
       ->getHead()
          ->title($view->title)
          ->addScript($view->baseUrl.'/public/scripts/org.jquery.fast/jquery-latest.js')
          ->addScript($view->baseUrl.'/public/scripts/org.jquery.fast/org.jquery.fast.js')
          ->addScript($view->baseUrl.'/public/scripts/org.jquery.fast/components/cascadingselect.js')
          ->addStyle('screen', $view->baseUrl.'/public/styles/default.css')
          ->getDocument()
       ->getBody()
          ->aName('top')
          ->addBanner()
          ->addMenu($view->menus)
          ->addMessages($view->messages)
          ->addContent($view->_content)
          ->addFooter($view);
     
    $htmlDocument->display();
    A+JYT

  2. #222
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    638
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 638
    Points : 408
    Points
    408
    Par défaut
    Citation Envoyé par Théolude Voir le message
    Bonjour,

    Ta remarque prouve que tu n'as pas compris ce qu'est un template, ni ce que peut être un modèle vue / contrôleur ce qui est un des fondements des modèles de développements modernes.

    L'intérêt immédiat est d'isoler complétement la présentation de ce qui est l'élaboration des données. Si tu veux intégrer un nouveau champ, une nouvelle variable, il est beaucoup plus simple d'utiliser un template que d'aller bidouiller dans un code imbriqué PHP / HTML.
    Ce système me permet très bien d'isoler les deux, et d'utiliser le MVC. Le template ne fait rien d'autre qu'afficher les données transmises par le contrôleur. Aucun traitement n'est effectué dans le template. Plusieurs CMS, dont Joomla, utilisent cette approche...

    Citation Envoyé par Théolude Voir le message
    Petit exemple (base ModeliXe), un champ de formulaire dont je veux faire varier les propriétés selon que le formulaire soit vu en mode consultation ou édition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dans mon template <mx:formField id="monChamp" size="10" maxlength="10" />
     
    Dans mon code PHP $obj_modelixe -> MxFormField('monChamp', 'text', 'int_ma_valeur', $int_ma_valeur, $str_style);
    avec 
    if($str_etat == 'edition') $str_style = ' readonly class="noedit" ';
    else $str_style = ' onBlur="checkField(this)" ';
    Essai de faire la même chose avec ta méthode, et reviens lire ton code 6 mois après... illisible.
    J'ai déjà utilisé une approche similaire, et j'en suis revenu. Je ne trouve pas du tout ce code plus clair et plus facile à maintenir. Maintenant je serais intéressé par un système de templates simple et léger, qui gère les variables, les blocs et les conditions.

  3. #223
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Points : 134
    Points
    134
    Par défaut [ModeliXe][The Source]
    Citation Envoyé par Neuromancien2 Voir le message
    Ce système me permet très bien d'isoler les deux, et d'utiliser le MVC. Le template ne fait rien d'autre qu'afficher les données transmises par le contrôleur. Aucun traitement n'est effectué dans le template. Plusieurs CMS, dont Joomla, utilisent cette approche...
    Non je ne pense pas. Quand je lis ce que tu écris, tu intègres des opérations logiques et des traitements dans ton template... c'est à l'opposé de l'objectif recherché.

    En ce qui concerne ModeliXe, il a de nombreux avantages, dont ceux de te permettre de générer les éléments HTML courants et de les paramètrer très simplement... ce qui s'avère pratique dans le cas de la gestion de formulaires avec des accès fonctionnels distincts (consultation, édition, suppression, etc.) ou d'éléments dont l'existence est conditonnée par d'autres traitements.
    Sa gestion des boucles est assez souple et pratique également...

    Maintenant à chacun ses manies et ses objectifs. Pour moi il est des plus aboutis dans le sens séparation traitement et affichage des données... mais ce n'est pas le seul.

    Quand à sa syntaxe, on s'y fait je pense assez bien... mon avis très partial

    Je te mets en pièce jointe la dernière version, celle que j'utilise, meilleur que celle proposée et en circulation aujourd'hui.

    Théo
    Fichiers attachés Fichiers attachés

  4. #224
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Points : 134
    Points
    134
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    pour ma part je me dirige de plus en plus vers l'abandon des système de template même le phtml
    je me tourne de plus en plus vers du code pur PHP
    voici un exemple de ce vers quoi je m'achemine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    $htmlDocument = new my_App_Document('XHTML','Transitional')
       ->addNameSpace('fast'; 'urn:org.jquery.fast')
       ->addNSAtrribute('fast','includepath', $view->baseUrl.'/public/scripts/org.jquery.fast/components/')
       ->addLanguage('fr')
     
       ->getHead()
          ->title($view->title)
          ->addScript($view->baseUrl.'/public/scripts/org.jquery.fast/jquery-latest.js')
          ->addScript($view->baseUrl.'/public/scripts/org.jquery.fast/org.jquery.fast.js')
          ->addScript($view->baseUrl.'/public/scripts/org.jquery.fast/components/cascadingselect.js')
          ->addStyle('screen', $view->baseUrl.'/public/styles/default.css')
          ->getDocument()
       ->getBody()
          ->aName('top')
          ->addBanner()
          ->addMenu($view->menus)
          ->addMessages($view->messages)
          ->addContent($view->_content)
          ->addFooter($view);
     
    $htmlDocument->display();
    A+JYT
    Oui j'aime bien aussi... et c'est ce que je finis par faire avec ModeliXe, tu as développé un framework... mais dans ton cas tu triches, car si tu n'utilises pas de templates, je suppose alors que dans tes méthodes addMenu, addMessages, etc. il y a du HTML tapé en toutes lettres dans ton code PHP.... par expérience ce genre de construction est très difficile à maintenir et à faire évoluer... surtout si tes projets ont de grosses exigences graphiques (ce qui est de plus en plus fréquent avec les technos web 2.0).

    My two pences, Théo

  5. #225
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    non je joue sur la dérivation
    mes classes de base me permettent de construire du html (enfin du xhtml pour le moment)
    mais je dérive ma classe Document_Html pour lui ajouter les méthodes addMessages addMenus etc.

    celles-ci créent un Document_Html_Element et utilisent la même syntaxe.
    je n'agis là qu'au niveau de la vue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function addMenu($menus) {
       if (isset($menus)) {
          $tr = $this->addTable ("menus")->getTbody()->addTr();
          foreach (menus as $menu) {
             $td = $tr->addTd(null, $menu->help); //addTd(class, Title)
             if ($menu->actif) {
                $td->addAHref($menu->url,$menu->label);
             } else {
                $td->addAHref(null,$menu->label,array('onClick' => 'return false;'));
             }
          } //foreach menus
       }
       return $this;
    }
    la principale difficulté de cette méthode est qu'elle demande un travail de traduction du travail du designer en code php. Mais c'est nettement plus claire que le phtml
    A+JYT

  6. #226
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    638
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 638
    Points : 408
    Points
    408
    Par défaut
    Citation Envoyé par Théolude Voir le message
    Non je ne pense pas. Quand je lis ce que tu écris, tu intègres des opérations logiques et des traitements dans ton template... c'est à l'opposé de l'objectif recherché.
    Ce n'est pas ce que j'appelle des traitements.

    Citation Envoyé par Théolude Voir le message
    En ce qui concerne ModeliXe, il a de nombreux avantages, dont ceux de te permettre de générer les éléments HTML courants et de les paramètrer très simplement...
    Oui, mais je ne peux pas l'utiliser avec un éditeur WYSIWYG. Un designer ne pourra pas travailler avec ça...

    Citation Envoyé par Théolude Voir le message
    e te mets en pièce jointe la dernière version, celle que j'utilise, meilleur que celle proposée et en circulation aujourd'hui.
    Je vais regarder...

  7. #227
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut
    J'utilise Smarty que je trouve puissant et plutôt complet.

    Une remarque que je peux faire au sujet de ce template c'est qu'il peut donner l'impression de réinventer la roue.

    Aux premières utilisation de ce système on se questionne souvent ainsi :

    "Je sais le faire en php mais comment je dois le faire en smarty, je suppose qu'il y a une fonction similaire existante".

    Au final je ne pense pas que ce soit si génant.
    Zend PHP5 Certification
    MySQL 4 Core Certification

  8. #228
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Salut à tous j'avais sous une pile de chose dans un coin de table perdu dans mon disque dur, couvert de toile d'araignée une classe pour générer du html. Je l’avais vaguement en php4 mais aussi une version JavaScript et une autre version jquery
    Le principe est de générer le html à partir d’un objet par enchainement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     <?php
     
    ini_set('display_errors', true);
       error_reporting(E_ALL);
     
    require_once dirname(__FILE__).'/Html.php';
    $htmlDocument = new Document_Html('XHTML','Transitional');
     
    $htmlDocument
       ->addNameSpace('fast', 'urn:org.jquery.fast')
       ->setNSAtrribute('fast','includepath', '/public/scripts/org.jquery.fast/components/')
       ->setLanguage('fr')
       ->getHead()
          ->contentType()
          ->meta ('test', 'machin')
          ->title('coucou', array('class'=>'test'))
          ->addScript('/public/scripts/org.jquery.fast/jquery-latest.js')
          ->addScript('/public/scripts/org.jquery.fast/org.jquery.fast.js')
          ->addScript('/public/scripts/org.jquery.fast/components/cascadingselect.js')
          ->linkStyle('/public/styles/default.css', 'screen')
          ->getDocument()
       ->getBody()
          ->aName('la','top')
             ->image('/truc/chose.gif', array('border'=>0), array('color'=>'#fff'))
                ->getParent()
             ->getParent()
          ->h2('coucou')
             ->getParent()
          ->inlineScript('<!--//')
             ->addContent("//alert('test');")
             ->addContent('//-->')
             ->getParent()
          ->aHref('ici','/truc/machin.html')
             ->getParent()
          ->br()
          ->form('/text.pg', 'POST')
             ->inputText('toto','5')
             ->label('test','25')->getParent()  
          ->pre('      ceci est un texte
          preformaté
          avec ce que ça implique')->br()
          ->addContent('test')->getParent()
          ->object()->getParent()
          ->table()
             ->thead()
                ->tr()
                   ->th('coucou')->getParent()
                   ->th('coucou')->getParent()
                   ->th('coucou')->getParent()
                   ->th('coucou')->getParent()
                   ->getParent()
                ->getParent()
             ->tbody()
                ->tr()
                   ->td()
                      ->b('test')->getParent()
                      ->getParent()
                   ->td()->text('<test>')
    ;
    $htmlDocument->display();
    echo '<pre>';
    print_r(htmlentities($htmlDocument->getHtml()));
    Vu que certain parmi vous cherchent aussi à faire ce genre de chose j’ai décidé de la reprendre et la passer sous php5

    Le tout pèse 35 Ko

    Vous retrouverez dedans des méthodes reprenant le nom des tag html
    Elles ont un prototype toujours semblable.
    ->tag( $attributes, $style) avec quelques variante par exemple les tag contenant habituellement un texte comme em
    ->em($text, $attributes, $style) et enfin quelque méthodes avec des non légèrement différent du tag variable (var étant un mot réservé)
    Mais aussi sur les inputs inputText inputPassword etc… elle n’est pas documenté mais je pense déjà compréhensible.
    Chaque appel retourne l’objet créé. Pour retrouver son père il suffit d’utiliser getParent() sauf pour quelques tag qui ne peuvent contenir d’élément comme <br> dans ce cas c’est le père qui est retourné.

    Ceci permet l’enchainement comme dans l’exemple ci-dessus.

    Si vous regardez dans le code vous trouverez dans le corps de ses méthodes trois booléen dans la construction du tag il servent à contrôler l’indentation du tag. Je na garantis pas dans l’état actuel une indentation parfaite.
    J’ai traité à part le document (tag html) car il a de grosses spécificités

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     <?php
    require_once dirname(__FILE__).'/Html/Element.php';
     
     
    class Document_Html {
       protected $_doctype;
       protected $_head;
       protected $_body;
       protected $_attributes = array ();
       protected $_nameSpaces = array();
     
       protected $_ElementClassName = 'Document_Html_Element';
     
       /**
       * Constructor
       * 
       * @param string $doctype Document Type (HTML|XHTML)
       * @param string $dtd Document Type Definition (Transitional...)
       * @param string $version Document Type Version (1.0...)
       * @return void
       */
       public function __construct($doctype = 'XHTML', $dtd = 'Transitional', $version ='1.0')
       {
          $this->setDocType($doctype, $dtd, $version);
          $this->_head = new $this->_ElementClassName($this, 'head', null, null, false, true, true);
          $this->_body = new $this->_ElementClassName($this, 'body', null, null, false, true, true);
       }
     
       public function setDocType($doctype = 'XHTML', $dtd = 'Transitional', $version ='1.0') {
          //TODO définir les règles pour générer les différente version du doctype
          /*
             <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/transitional.dtd">
             <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          */
     
          $this->_doctype = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'; 
          $this->setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');
       }
     
       public function addNameSpace($prefix, $urn) {
          $this->setAttribute('xmlns:'.$prefix, $urn);
          $this->_nameSpaces[$prefix] = $urn;
          return $this;
       }
     
       public function setLanguage($lang) {
          $this->setAttribute('lang', $lang);
          $this->setAttribute('xml:lang', $lang);
          return $this;
       }
     
       public function setNSAtrribute($prefix, $name, $value) {
          if (!array_key_exists($prefix, $this->_nameSpaces)) {
             $this->addNameSpace($prefix, 'Undefined_Urn_'.rand());
          }
          $this->setAttribute($prefix.':'.$name, $value);
          return $this;
       }
     
       public function setAttribute($name, $value) {
          $this->_attributes[$name] = $value;
          return $this;
       }
     
       public function getHead() {
          return $this->_head;
       }
     
       public function getBody() {
          return $this->_body;
       }
     
       public function getHtml() {
          $src = $this->_doctype."\n";
          $src.= '<html '."\n";
          foreach ($this->_attributes as $name=>$value) {
             $src.= '   '.$name."='".$value."'\n";
          }
          $src.= ">";
          $src.= $this->getHead()->getHtml();
          $src.= $this->getBody()->getHtml();
          $src.= "\n</html>";
          return $src;
       }
     
       public function display() {
          echo $this->getHtml();
       }
    }
    La suite dans le post suivant car c'est trop long

  9. #229
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Et enfin la génération de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
     <?php
    //TODO ajouter la gestion de fragment
     
    class Document_Html_Element {
       protected $_parent;
       protected $_tag;
       protected $_attributes = array ();
       protected $_styles = array();
       protected $_content = array();
     
       //indent system
       protected $_tab = '   ';
       protected $_indent = true;
       protected $_singleLine = false;
       protected $_indentContent = true;
     
       protected $_autoClose = true; //accepte <tag />
     
       /**
       * Constructor
       * 
       * @param Document_Html_Element $parent
       * @param string $tagName
       * @param string $attributes
       * @param string $styles
       * @return void
       */
       public function __construct($parent, 
                                   $tagName = null, 
                                   $attributes = null, 
                                   $styles = null,
                                   $singleLine = null,
                                   $indent = null,
                                   $identContent = null)
       {
          $this->_parent = $parent;
          if ($tagName)               $this->_tag = $tagName;
          if (is_array($attributes))  array_merge($this->_attributes = $attributes);
          if (is_array($styles))      array_merge($this->_styles = $styles);
          if (null !== $singleLine)   $this->_singleLine = $singleLine;
          if (null !== $identContent) $this->_indentContent = $identContent;
          if (null !== $indent)       $this->_indent = $indent;
       }
     
       public function getParent() {
          return $this->_parent;
       }
     
       public function getDocument() {
          require_once dirname(dirname(__FILE__)).'/Html.php';
          if ($this->_parent instanceOF Document_Html) {
             return $this->_parent;
          } else {
             return $this->_parent-> getDocument();
          }
       }
     
       public function forceClose() {
          $this->_autoClose = false;
          return $this;
       }
     
       public function setAttribute($name, $value) {
          $this->_attributes[$name] = $value;
          return $this;
       }
     
       Public function addContent($content) {
          $this->_content[] = $content;
          return $this;
       }
     
       function getHtml($tab = null) {
          $style = '';
          foreach ($this->_styles as $key=>$value) {
             $style.= $key.': '.$value.';';
          }
     
          if (null === $tab) $tab = $this->_tab;
          if ($this->_indent) {
             $src = "\n".$tab;
          } else {
             $src = '';
          }
          $src.= '<'.$this->_tag;
          foreach ($this->_attributes as $name=>$value) {
             $src.= ' '.$name."='".$value."'";
          }
          if ('' != $style) {
             $src.= " style='".$style."'";
          }
          if ($this->_autoClose&&(is_array($this->_content)&&(0 == count($this->_content)))) {
             $src.= ' />';
          } else {
             $src.= '>';
          }
     
          if (!(is_array($this->_content)&&(0 == count($this->_content)))||!$this->_autoClose){
             if ((is_array($this->_content))||
                 (is_string($this->_content))) $src.= $this->_getHtmlContent($tab.$this->_tab);
     
             if ($this->_indent&&!$this->_singleLine) {
                $src.= "\n".$tab;
             }
             $src.= '</'.$this->_tag.'>';
          }
          return $src;
       }
     
       function _getHtmlContent($tab = null) {
          if (null === $tab) $tab = $this->_tab;
          if(is_array($this->_content)) {
             $src = '';
             foreach ($this->_content as $content) {
                if ($content instanceOf Document_Html_Element) {
                   $src.= $content->getHtml($tab);
                } elseif (is_string($content)) {
                   if ($this->_indentContent) {
                      $src.= "\n".$tab.$content;
                   } else {
                      $src.= $content;
                   }
                }
             }
             return $src;
          }
       }
     
       //Methodes pour créer des éléments.
     
       Public function Text($text = null) {
          $this->addContent(htmlentities($text));
          return $this;
       }
     
       Public function Space() {
          $this->addContent(' ');
          return $this;
       }
     
       Public function noBreakSpace($text = null) {
          $this->addContent('&nbsp;');
          return $this;
       }
     
       Public function aName($text = null, $name = null, $attributes = null, $styles = null) {
          $attributes['name'] = $name;
          $a = $this->inlineElement($this, 'a', $text, $attributes, $styles, true, true, false);
          $this->addContent($a);
          return $a;
       }
     
       Public function aHref($text = null, $href = null, $attributes = null, $styles = null) {
          $attributes['href'] = $href;
          $a = $this->inlineElement($this, 'a', $text, $attributes, $styles, true, true, false);
          $this->addContent($a);
          return $a;
       }
     
       Public function abbr($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'abbr', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function acronym($text = null, $title = null, $attributes = null, $styles = null) {
          $attributes['title'] = $title;
          $tag = $this->inlineElement($this, 'acronym', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function address($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'address', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function applet($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'applet', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function area($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'area', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function b($text= null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'strong', $text, $attributes, $styles, true, false, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function base($text= null, $href = null, $attributes = null, $styles = null) {
          $attributes['href'] = $href;
          $tag = $this->inlineElement($this, 'base', $text, $attributes, $styles, true, true, false);
          $this->getDocument()->getHead()->addContent($tag);
          return $this;
       }
     
       Public function baseFont($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'basefont', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function bdo($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'bdo', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function big($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'big', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function blockquote($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'blockquote', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function br($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'br', $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $this;
       }
     
       Public function nobr($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'nobr', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function button($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'button', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function caption($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'caption', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function center($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'center', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function cite($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'cite', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function code($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'code', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function col($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'col', $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $this;
       }
     
       Public function colgroup($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'colgroup', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function dd($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'dd', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function del($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'del', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function dfn($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'dfn', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function dir($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'dir', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function div($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'div', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function dl($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'dl', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function dt($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'dt', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function em($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'em', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function fieldset($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'fieldset', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function font($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'font', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function form($action = null, $method = null, $attributes = null, $styles = null) {
          $attributes['action'] = $action;
          $attributes['method'] = $method;
          $tag = new Document_Html_Element($this, 'form', $attributes, $styles, false, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function frame($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'frame', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function frameset($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'frameset', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function h1($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'h1', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function h2($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'h2', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function h3($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'h3', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function h4($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'h4', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function h5($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'h5', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function h6($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'h6', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function hr($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'hr', $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $this;
       }
     
       Public function i($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'i', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function iframe($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'iframe', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function image($src = null, $attributes = null, $styles = null) {
          $attributes['src'] = $src;
          $img = new Document_Html_Element($this, 'img', $attributes, $styles, true, false, false);
          $this->addContent($img);
          return $img;
       }
     
       Public function input($type = null, $name = null, $value = null, $attributes = null, $styles = null) {
          $attributes['name'] = $name;
          $attributes['type'] = $type;
          $attributes['value'] = $value;
          $tag = new Document_Html_Element($this, 'input', $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $this;
       }
     
       Public function inputText($name = null, $value = null, $attributes = null, $styles = null) {
          return $this->input('text', $name, $value, $attributes, $styles);
       }
     
       Public function inputPassword($name = null, $value = null, $attributes = null, $styles = null) {
          return $this->input('password', $name, $value, $attributes, $styles);
       }
     
       Public function inputCheckBox($name = null, $value = null, $attributes = null, $styles = null) {
          return $this->input('checkbox', $name, $value, $attributes, $styles);
       }
     
       Public function inputRadio($name = null, $value = null, $attributes = null, $styles = null) {
          return $this->input('radio', $name, $value, $attributes, $styles);
       }
     
       Public function inputSubmit($name = null, $value = null, $attributes = null, $styles = null) {
          return $this->input('submit', $name, $value, $attributes, $styles);
       }
     
       Public function inputReset($name = null, $value = null, $attributes = null, $styles = null) {
          return $this->input('reset', $name, $value, $attributes, $styles);
       }
     
       Public function inputFile($name = null, $value = null, $attributes = null, $styles = null) {
          return $this->input('file', $name, $value, $attributes, $styles);
       }
     
       Public function inputHidden($name = null, $value = null, $attributes = null, $styles = null) {
          return $this->input('hidden', $name, $value, $attributes, $styles);
       }
     
       Public function inputImage($name = null, $value = null, $attributes = null, $styles = null) {
          return $this->input('image', $name, $value, $attributes, $styles);
       }
     
       Public function inputButton($name = null, $value = null, $attributes = null, $styles = null) {
          return $this->input('button', $name, $value, $attributes, $styles);
       }
     
       Public function ins($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'ins', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function isindex($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'isindex', $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $this;
       }
     
       Public function kbd($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'kbd', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function label($text = null, $forId = null, $attributes = null, $styles = null) {
          $attributes['for'] = $forId;
          $tag = $this->inlineElement($this, 'label', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function legend($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'legend', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function li($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'li', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function link($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'link', $attributes, $styles, false, true, false);
          $this->getDocument()->getHead()->addContent($tag);
          return $this;
       }
     
       Public function linkStyle($source = null, $media= null, $attributes = null, $styles = null) {
          $attributes['src'] = $source;
          $attributes['media'] = $media;
          $attributes['rel'] = 'stylesheet';
          $attributes['type'] = 'text/css';
          $tag = new Document_Html_Element($this, 'link', $attributes, $styles, false, true, false);
          $this->getDocument()->getHead()->addContent($tag);
          return $this;
       }
     
       Public function map($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'map', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function menu($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'menu', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function meta($name='', $content='', $attributes = null, $styles = null) {
          $attributes['name'] = $name;
          $attributes['content'] = $content;
          $tag = new Document_Html_Element($this, 'meta', $attributes, $styles, true, true, false);
          $this->getDocument()->getHead()->addContent($tag);
          return $this;
       }
     
       Public function contentType($content='text/html; charset=iso-8859-1', $attributes = null, $styles = null) {
          $attributes['http-equiv'] = 'Content-Type';
          $attributes['content'] = $content;
          $tag = new Document_Html_Element($this, 'meta', $attributes, $styles, true, true, false);
          $this->getDocument()->getHead()->addContent($tag);
          return $this;
       }
     
       Public function noframes($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'noframes', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function noscript($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'noscript', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function object($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'object', $attributes, $styles, false, true, true);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function ol($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'ol', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function optgroup($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'optgroup', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function option($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'option', $attributes, $styles, false, true, true);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
    et encore la suite dans le suivant attention j'ai coupé le code de la classe en deux

  10. #230
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
     
       Public function p($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'p', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function param($name = null, $value = null, $attributes = null, $styles = null) {
          $attributes['name'] = $name;
          $attributes['value'] = $value;
          $tag = new Document_Html_Element($this, 'param', $attributes, $styles, false, true, false);
          $this->getDocument()->getHead()->addContent($tag);
          return $this;
       }
     
       Public function pre($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'pre', $text, $attributes, $styles, true, false, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function q($text = null, $cite = null, $attributes = null, $styles = null) {
          $attributes['cite'] = $cite;
          $tag = $this->inlineElement($this, 'q', $text, $attributes, $styles, true, false, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function s($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 's', $text, $attributes, $styles, true, false, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function samp($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'samp', $text, $attributes, $styles, true, false, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function inlineScript($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'script', $text, null, $attributes, $styles, true, true, true);
          $tag->forceClose();
          $this->addContent($tag);
          return $tag;
       }
     
       Public function script($source = null, $attributes = null, $styles = null) {
          $attributes['src'] = $source;
          $tag = new Document_Html_Element($this, 'script', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->addContent($tag);
          return $this;
       }
     
       /*
       Public function addInlineScript($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'script', $text, null, $attributes, $styles, true, true, true);
          $tag->forceClose();
          $this->getDocument()->getHead()->addContent($tag);
          return $this; //TODO rupture de fux 
          return $tag;
       }
       */
     
       Public function addScript($source = null, $attributes = null, $styles = null) {
          $attributes['src'] = $source;
          $tag = new Document_Html_Element($this, 'script', $attributes, $styles, true, true, false);
          $tag->forceClose();
          $this->getDocument()->getHead()->addContent($tag);
          return $this;
       }
     
       Public function select($name = null, $value = null, $attributes = null, $styles = null) {
          $attributes['name'] = $name;
          $attributes['value'] = $value;
          $tag = new Document_Html_Element($this, 'select', $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function small($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'small', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function span($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'span', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function strike($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'strike', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function strong($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'strong', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function addInlineStyle($text = null, $media= null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'style', $text, null, $media, $attributes, $styles, false, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function sub($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'sub', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function sup($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'sup', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function table($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'table', $attributes, $styles, false, true, true);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function tbody($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'tbody', $attributes, $styles, false, true, true);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function td($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'td', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function textarea($name = null, $text = null, $attributes = null, $styles = null) {
          $attributes['name'] = $name;
          $tag = $this->inlineElement($this, 'textarea', $text, $attributes, $styles, true, false, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function tfoot($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'tfoot', $attributes, $styles, false, true, true);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function th($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'th', $text, $attributes, $styles, true, true, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function thead($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'thead', $attributes, $styles, false, true, true);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function title($title = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'title', $title, $attributes, $styles,true, true, false);
          $this->addContent($tag);
          return $this;
       }
     
       Public function tr($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'tr', $attributes, $styles, false, true, true);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function tt($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'tt', $text, $attributes, $styles, true, false, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function u($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'u', $text, $attributes, $styles, true, false, false);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function ul($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'ul', $attributes, $styles, false, true, true);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function varriable($text = null, $attributes = null, $styles = null) {
          $tag = $this->inlineElement($this, 'var', $text, $attributes, $styles, true, false, false);
          $this->addContent($tag);
          return $tag;
       }
     
     
       Public function body($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'body', $attributes, $styles, false, true, true);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function head($attributes = null, $styles = null) {
          $tag = new Document_Html_Element($this, 'head', $attributes, $styles, false, true, true);
          $this->addContent($tag);
          return $tag;
       }
     
       Public function inlineElement($parent, 
                                     $tagName = null,
                                     $text = null, 
                                     $attributes = null, 
                                     $styles = null,
                                     $singleLine = null,
                                     $indent = null,
                                     $identContent = null)
       {
          $tag = new Document_Html_Element($parent, $tagName, $attributes, $styles, $singleLine, $indent, $identContent);
          $tag->addContent($text);
          return $tag;
       }
    }
    voilà si cela peut vous être utile.
    le jour où j'aurais du temps je l'intègrerais à ZF en utilisant les Zend_Layout et Zend_Form

    si vous l'intégré dans vos travaux, je sais que certaint d'entre vous on déjà des plugins Zend qui vont dans ce sens. penssez à nous dire comment vous faites évoluer la chose.

    A+JYT

  11. #231
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 44
    Points : 36
    Points
    36
    Par défaut
    salut,

    bon d'1 an dans le temps pour ce topic mais j'aimerais savoir ce qu'il en est aujourd'hui.

    Personnelement, j'ai toujours inclu mon html dans mon php ou inversement jusque trés recemment.
    Puis un ami m'a parlé de moteurs de template et puis j'ai commencé à me documenter, j'ai lu une bonne partie des sujets qui sont consacré à ce sujet.

    J'ai finalement mis en place smarty à titre d'essai puis le résultat m'a bien plus, j'ai donc suivi cette voie. Surtout la séparation traitement / design qui est beaucoup plus souple et clair.

    bon, maintenant j'en suis à la question suivante, dans un projet un peu important avec des pages qui commencent à être lourde, est ce que smarty va ne pas tout ralentir.
    J'ai constaté que j'avais multiplié par deux les temps de génération de mes pages à cause de smarty. Pourtant j'essaie de faire les choses proprement et selon moi c'est plutot le cas. Passage de tableaux à smarty, boucle via foreach, etc.

    Je n'utilise pas de bibliothèques (zend, symfony, etc), j'ai écrit mes propres classes qui me conviennent parfaitement et je suis assez fier de certaines... et je me vois pas tout recommencer pour utiliser un framework. Ca serait tirer un trait sur plusieurs mois de travail.

    Donc la question, c'est qu'est ce que je peux utiliser pour m'assurer de pas trop ralentir le site en terme de génération de page. Autrement dit : comment ne pas faire exploser mon serveur.

    Ecrire mon propre moteur de template ?

    Je suis pret à acheter une license si il existe des outils propriétaires performants mais j'ai rien trouvé. On parle beaucoup de modèle MVC, mais c'est assez obscur pour moi meme si je comprends le principe.
    On parle aussi beaucoup de smarty, tbs, ... mais ca me semble être des solutions relativement amateures.

    Comment travailler proprement sans devoir tout refaire, tout en conservant cette séparation traitement / affichage

    Merci de vos avis qui j'espère me mettront sur la bonne voie...

  12. #232
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Écrire son moteur est un bon projet en sois,
    Mais je tiens à mettre les choses au point, smarty n'est pas un système de template amateur.
    Je dit sa en raison de la nouvelle version écrite en PHP 5,
    je pense bien entendu a smarty 3 toujours en développement dans les labos.
    Les framework tel que zend son orienté MVC et cette approche est la plus pratique en sois.
    Facile à mettre à jour, aisance pour évolution futur et j'en passe.
    Les avantages sont tel qu'une fois gouté on en reprend mais bien entendu il y à des faiblesses comme dans tout.

    Personnellement,
    je suis pour les frameworks et moteur de template
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  13. #233
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    638
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 638
    Points : 408
    Points
    408
    Par défaut
    Suite à cette discussion, j'envisage désormais d'intégrer un système de gabarits dans mon framework/CMS perso. Actuellement j'utilise des gabarits PHP natifs.

    Je recherche un système de gabarits simple et léger qui gère uniquement les gabarits et pas autre chose. Par exemple ce n'est pas au moteur de templates de fournir des fonctions pour effectuer des requêtes sur une base de données comme le fait TinyButStrong . Je n'ai pas non plus besoin de fonctions pour gérer les formulaires, je dispose déjà des miennes.

    Mes critères sont les suivants :
    • PHP5
    • Syntaxe simple (pas Smarty)
    • Gestion de gabarits uniquement
    • Projet actif (pas ModeliXe)
    • Intégrant de préférence un système de cache


    Vtemplate a l'air intéressant mais n'est plus maintenu depuis 2004.

  14. #234
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2003
    Messages : 69
    Points : 55
    Points
    55
    Par défaut
    J'ai les mêmes besoins que Neuromancien2 avec en plus la possibilité d'inclure un fichier template dans un autre fichier template. Je sais que Smarty en est capable mais est-ce le seul ?

  15. #235
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Points : 134
    Points
    134
    Par défaut
    Citation Envoyé par dkmatt Voir le message
    J'ai les mêmes besoins que Neuromancien2 avec en plus la possibilité d'inclure un fichier template dans un autre fichier template. Je sais que Smarty en est capable mais est-ce le seul ?
    ModeliXe le fait très bien aussi...
    Si tu cherches un bon moteur de template, fonctionnel et très pratique je te conseille ModeliXe... Je l'utilises dans mes projets pros depuis plus de 6 ans.

    Théo

  16. #236
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Points : 134
    Points
    134
    Par défaut
    Citation Envoyé par Neuromancien2 Voir le message
    Suite à cette discussion, j'envisage désormais d'intégrer un système de gabarits dans mon framework/CMS perso. Actuellement j'utilise des gabarits PHP natifs.

    Je recherche un système de gabarits simple et léger qui gère uniquement les gabarits et pas autre chose. Par exemple ce n'est pas au moteur de templates de fournir des fonctions pour effectuer des requêtes sur une base de données comme le fait TinyButStrong . Je n'ai pas non plus besoin de fonctions pour gérer les formulaires, je dispose déjà des miennes.

    Mes critères sont les suivants :
    • PHP5
    • Syntaxe simple (pas Smarty)
    • Gestion de gabarits uniquement
    • Projet actif (pas ModeliXe)
    • Intégrant de préférence un système de cache


    Vtemplate a l'air intéressant mais n'est plus maintenu depuis 2004.
    Tu as donné la meilleur définition de ModeliXe

  17. #237
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    638
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 638
    Points : 408
    Points
    408
    Par défaut
    Citation Envoyé par Neuromancien2 Voir le message
    Suite à cette discussion, j'envisage désormais d'intégrer un système de gabarits dans mon framework/CMS perso. Actuellement j'utilise des gabarits PHP natifs.

    Je recherche un système de gabarits simple et léger qui gère uniquement les gabarits et pas autre chose. Par exemple ce n'est pas au moteur de templates de fournir des fonctions pour effectuer des requêtes sur une base de données comme le fait TinyButStrong . Je n'ai pas non plus besoin de fonctions pour gérer les formulaires, je dispose déjà des miennes.

    Mes critères sont les suivants :
    • PHP5
    • Syntaxe simple (pas Smarty)
    • Gestion de gabarits uniquement
    • Projet actif (pas ModeliXe)
    • Intégrant de préférence un système de cache


    Vtemplate a l'air intéressant mais n'est plus maintenu depuis 2004.
    Suite à cette discussion, j'ai continué à chercher.

    J'envisage d'utiliser un des systèmes de templates disponibles dans PEAR. Flexy semble correspondre à ce que je cherche. Je vais également tester IT, PHPLIB, Sigma et Xipe.

  18. #238
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    638
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 638
    Points : 408
    Points
    408
    Par défaut
    Je pense avoir trouvé ce que je cherche : Dwoo est un moteur de template inspiré de Smarty (et en grande partie compatible) mais entièrement réécrit, avec un code plus léger (PHP5 uniquement).

    Citation Envoyé par dkmatt Voir le message
    J'ai les mêmes besoins que Neuromancien2 avec en plus la possibilité d'inclure un fichier template dans un autre fichier template. Je sais que Smarty en est capable mais est-ce le seul ?
    Non. Beaucoup de moteurs de templates (parmi lequels Dwoo) incluent cette fonctionnalité sous une forme ou une autre.

    Cette page présente 19 moteurs de templates prometteurs. OOTemplate et H2o ont également l'air intéressants...

  19. #239
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    J'utilise un moteur de templates maison proche dans l'esprit de Zend_Layout + Zend_View: il n'y a pas de custom syntaxe, c'est du php qui est directement utilisé dans les fichiers de template. Tout comme Zend_View, les templates sont injectées dans le scope de la classe à l'aide de include et capturées avec les fonctions de buffering (ob_*). On accède donc aux variables via $this->.

    Personnellement, je trouve que c'est le meilleur compromis: c'est très light et on a la puissance de php à porté de main (peut être vu comme un défaut)

    Les helpers (plugin de template) à la Zend_View sont dans mon système des fonctions anonymes et closures (php 5.3) plutôt que des instances de classes. L'avantage c'est que ces helpers sont (re)définissables et chargeables à la volée (pas de fatal errors parce qu'une classe est déjà chargée, pas de reflexion).

  20. #240
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Points : 134
    Points
    134
    Par défaut
    Citation Envoyé par metagoto Voir le message
    J'utilise un moteur de templates maison proche dans l'esprit de Zend_Layout + Zend_View: il n'y a pas de custom syntaxe, c'est du php qui est directement utilisé dans les fichiers de template. Tout comme Zend_View, les templates sont injectées dans le scope de la classe à l'aide de include et capturées avec les fonctions de buffering (ob_*). On accède donc aux variables via $this->.
    C'est élégant mais ce n'est pas une solution de template (séparation fond / forme). Dans le cadre d'un travail avec une équipe graphique c'est moins simple à gérer. Dans le cadre d'une réutilisation du code également.

    Personellement je n'aime pas... ceci dit SMARTY fait dans le même esprit en plus compliqué, donc cette solution a le mérite d'être meilleure que Smarty

    Théolude (papa de ModeliXe)

Discussions similaires

  1. Quel EDI utilisez-vous en 2012 pour le développement Web ? Pourquoi ?
    Par Community Management dans le forum Outils
    Réponses: 69
    Dernier message: 31/08/2016, 10h12
  2. Quels Frameworks utilisez-vous ? et pourquoi ?
    Par snipes dans le forum Android
    Réponses: 5
    Dernier message: 22/02/2013, 15h03
  3. Quel outil de supervision système utilisez-vous ?
    Par cyberzoide dans le forum Linux
    Réponses: 0
    Dernier message: 08/02/2013, 11h09
  4. Réponses: 8
    Dernier message: 10/11/2006, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo