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

Bibliothèques et frameworks PHP Discussion :

[phpBB] Template phpbb et latex


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2017
    Messages : 105
    Par défaut [phpBB] Template phpbb et latex
    Bonjour , j'ai mon site qui utilise le template phphbb.(cours http://genova.developpez.com/articles/template_phpbb/)
    Voilà depuis un moment j'ai voulu intégrer du code Latex mais les deux ne sont pas compatibles.
    Comment puis-je modifier le moteur de sorte qu'il ignore tout code qui ne commence pas par tpl_ ?
    Je m'explique voilà le code qui marche avec le moteur actuel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Voici une variable globale au template qui vaut : {VAR_GLOBAL}<br />
    <!-- BEGIN mon_bloc -->
     
    <b>Hello ! Mon nom est {mon_bloc.NAME}</b><br />
     
    <!-- END mon_bloc -->
     
    \documentclass{article}
    \begin{document}
    voici du code Latex
    \end{document}
    donc si je mets rien, le code est effacé à l'execution (pour le Latex qui utilise le même principe c'est foutu)
    donc je voudrai que mon template ne traite que le code du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Voici une variable globale au template qui vaut : {tpl_VAR_GLOBAL}<br />
    <!-- BEGIN tpl_mon_bloc -->
     
    <b>Hello ! Mon nom est {tpl_mon_bloc.NAME}</b><br />
     
    <!-- END tpl_mon_bloc -->
     
    \documentclass{article}
    \begin{document}
    voici du code Latex
    \end{document}
    Merci d'avance (j'ai mis en pièce jointe la class )
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 010
    Par défaut
    Pas testé, mais tu peux essayer de remplacer les lignes 293 à 307 par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    preg_match_all('#{tpl_((?:[a-z0-9_-]+\.)+)([a-z0-9_-]+)}#i', $code, $varrefs, PREG_SET_ORDER);
    foreach ($varrefs as $v) {
        $namespace = $v[1];
        $varname = $v[2];
        $new = $this->generate_block_varref($namespace, $varname);
     
        $code = str_replace($v[0], $new, $code);
    }
     
    $code = preg_replace('#{tpl_([a-z0-9_-]*)}#i', '\' . ( ( isset($this->_tpldata[\'.\'][0][\'\1\']) ) ? $this->_tpldata[\'.\'][0][\'\1\'] : \'\' ) . \'', $code);
    Voire même peut-être par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $that = $this;
    $code = preg_replace_callback('~{tpl_((?:[a-z0-9_-]+\.)*)([a-z0-9_-]*)}~i', function ($m) use ($that) {
        if ( empty($m[1]) )
            return '\' . ( ( isset($this->_tpldata[\'.\'][0][\''. $m[2] . '\']) ) ? $this->_tpldata[\'.\'][0][\'' . $m[2] . '\'] : \'\' ) . \'';
     
        return $that->generate_block_varref($m[1], $m[2]);
    }, $code);
    À partir de php 5.4, la ruse $that = $this; n'est plus utile, donc tu peux virer cette ligne ainsi que le use ($that) et remplacer $that par $this.

    À noter que ce code n'est pas tout jeune et qui plus est, entièrement basé sur eval(). Donc la meilleure chose à faire selon moi est de tout réécrire de A à Z pour supporter et le phpbb et le latex.

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2017
    Messages : 105
    Par défaut
    Pardon, je me suis planté de fichier source c'est dans template.class.php . Il est peut etre plus recent (mis à jour).
    Pour info, je touche un peu au php, mais cela reste très limité. Mon but est seulement de créer un plateforme de cours et d'exercices pour mes élèves.
    Pouvez vous regardez de nouveau le lieu de la modification s'il vous plait (je ne l'ai pas trouvé).

    merci et désolé (bonne journée)
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 010
    Par défaut
    Ah bah c'est malin ça!
    Tu dois remplacer la fonction compile_var_tags avec:
    Code php : 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
     
    <?php
        /**
        * Compile variables
        * @access private
        */
        private function compile_var_tags(&$text_blocks)
        {
            // change template varrefs into PHP varrefs
            $varrefs = array();
     
            // This one will handle varrefs WITH namespaces
            preg_match_all('#{(?i:tpl)_((?:[a-z0-9_-]+\.)+)(\$)?([A-Z0-9_-]+)}#', $text_blocks, $varrefs, PREG_SET_ORDER);
     
            foreach ($varrefs as $var_val) {
                $namespace = $var_val[1];
                $varname = $var_val[3];
                $new = $this->generate_block_varref($namespace, $varname, true, $var_val[2]);
     
                $text_blocks = str_replace($var_val[0], $new, $text_blocks);
            }
     
            // This will handle the remaining root-level varrefs
            // transform vars prefixed by L_ into their language variable pendant if nothing is set within the tpldata array
            $text_blocks = preg_replace('#{tpl_L_([a-z0-9_-]*)}#i', "<?php echo ((isset(\$this->_rootref['L_\\1'])) ? \$this->_rootref['L_\\1'] : '{ \\1 }'); ?>", $text_blocks);
     
            // Handle addslashed language variables prefixed with LA_
            // If a template variable already exist, it will be used in favor of it...
            $text_blocks = preg_replace('#{tpl_LA_([a-z0-9_-]*)}#i', "<?php echo ((isset(\$this->_rootref['LA_\\1'])) ? \$this->_rootref['LA_\\1'] : ((isset(\$this->_rootref['L_\\1'])) ? addslashes(\$this->_rootref['L_\\1']) : '{ \\1 }')); ?>", $text_blocks);
     
            // Handle remaining varrefs
            $text_blocks = preg_replace('#{tpl_([a-z0-9_-]+)}#i', "<?php echo (isset(\$this->_rootref['\\1'])) ? \$this->_rootref['\\1'] : ''; ?>", $text_blocks);
            $text_blocks = preg_replace('#{tpl_\$([a-z0-9_-]+)}#i', "<?php echo (isset(\$this->_tpldata['DEFINE']['.']['\\1'])) ? \$this->_tpldata['DEFINE']['.']['\\1'] : ''; ?>", $text_blocks);
     
            return;
        }

    ou avec cette version améliorée:
    Code php : 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
    <?php
        /**
        * Compile variables
        * @access private
        */
        private function compile_var_tags(&$text_blocks)
        {
            // handle varrefs WITH namespaces
            $text_blocks = preg_replace_callback('~{(?i:tpl)_((?:[a-z0-9_-]+\.)+)(\$)?([A-Z0-9_-]+)}~', function ($m) {
                return $this->generate_block_varref($m[1], $m[3], true, $m[2]);
            }, $text_blocks);
     
            // handle root-level varrefs
            $text_blocks = preg_replace_callback('~{tpl_(LA?_|\$)?([a-z0-9_-]+)}~i', function ($m) {
                switch(strtoupper($m[1])) {
                    // transform vars prefixed by L_ into their language variable pendant if nothing is set within the tpldata array
                    case 'L_': return "<?php echo ((isset(\$this->_rootref['L_${m[2]}'])) ? \$this->_rootref['L_${m[2]}'] : '{ ${m[2]} }'); ?>";
     
                    // Handle addslashed language variables prefixed with LA_
                    // If a template variable already exist, it will be used in favor of it...
                    case 'LA_': return "<?php echo ((isset(\$this->_rootref['LA_${m[2]}'])) ? \$this->_rootref['LA_${m[2]}'] : ((isset(\$this->_rootref['L_${m[2]}'])) ? addslashes(\$this->_rootref['L_${m[2]}']) : '{ ${m[2]} }')); ?>";
     
     
                    case '$': return "<?php echo (isset(\$this->_tpldata['DEFINE']['.']['${m[2]}'])) ? \$this->_tpldata['DEFINE']['.']['${m[2]}'] : ''; ?>";
                    default: return "<?php echo (isset(\$this->_rootref['${m[2]}'])) ? \$this->_rootref['${m[2]}'] : ''; ?>";
                }
            }, $text_blocks);
        }

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2017
    Messages : 105
    Par défaut
    Merci ça marche, je suis content de pouvoir continuer.
    Merci à vous du boulot que vous faîtes bénévolement.

    A+

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 010
    Par défaut
    De rien, content que ça fonctionne.

Discussions similaires

  1. [phpBB] Template phpBB affichage conditionnel
    Par diengkals dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 15/08/2012, 15h36
  2. [phpBB] Envoi des variables au gabarit avec phpBB Template phpBB
    Par okoweb dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 18/05/2010, 22h31
  3. [phpBB] Template phpBB
    Par schnito dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 20/02/2006, 10h50
  4. [phpBB] Template phpBB et/ou phpLib
    Par corwin dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 14/02/2006, 16h45
  5. [phpBB] Function avec le Template phpBB
    Par mangafan dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 27/09/2005, 17h32

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