Constantes pour simplifier le code et fonction include

cpalocpalo Member
novembre 2021 modifié dans Entraide

Bonjour
Mon dossier thèmes
themes
--> assets
--> theme1
--> theme2
Dans header.php :

<link rel="stylesheet" href="<?= $plxShow->plxMotor->urlRewrite($plxShow->plxMotor->aConf['racine_themes']) ?>assets/framework/base.css">
<link rel="stylesheet" href="<?php $plxShow->template(); ?>/css/theme.css"> 
<link rel="stylesheet" href="<?= $plxShow->plxMotor->urlRewrite($plxShow->plxMotor->aConf['racine_themes']) ?>assets/fonts/fontawesome/css/fontawesome.css">

Dans footer.php

script>
if (typeof jQuery == "undefined") { 
    document.write('<script src="<?= $plxShow->plxMotor->urlRewrite($plxShow->plxMotor->aConf['racine_themes']) ?>assets/libs/jquery-3.5.1.js"><\/script>');
}
</script>
<script src="<?php $plxShow->template(); ?>/js/theme.js"></script>
<script src="<?= $plxShow->plxMotor->urlRewrite($plxShow->plxMotor->aConf['racine_themes']) ?>assets/vendors/prism/prism.js"></script>

Par quoi pourrai-je remplacer

<?= $plxShow->plxMotor->urlRewrite($plxShow->plxMotor->aConf['racine_themes']) ?>

afin que cela soit plus court à ré-utiliser?

Réponses

  • octobre 2021 modifié

    Bonjour,

    peut-être en utilisant une constante dans le premier fichier commun de ton/tes thémes:

    ROOT_THEMES = $plxShow->plxMotor->urlRewrite($plxShow->plxMotor->aConf['racine_themes']);
    

    ensuite <?= ROOT_THEMES ?> devrait être plus court à réutilisé et compréhensible.

    Pas tester , mais devrait se suffire :)
    Cdt

    ♣♣♣♣ <°(((((-{ ~ Mon site avec PluXml: https://re7net.com | Mes plugins pour PluXml : https://github.com/gcyrillus }-))))°> ♣♣♣♣

  • cpalocpalo Member
    octobre 2021 modifié

    Effectivement... et cela fait resurgir mon ancien post sur comment inclure des constantes personnalisées. Et solutions que j'avais un peu oubliées.
    Le problème que je rencontre, c'est dès que j'entre la définition de la constante, cela provoque une page blanche de pluxml.

    <?php if (!defined('PLX_ROOT')) exit; ?>
    
    <?php
    const ROOT_THEMES = $plxShow->plxMotor->urlRewrite($plxShow->plxMotor->aConf['racine_themes']);
    ?> 
    
    <!DOCTYPE html>
    
  • octobre 2021 modifié

    Ah zut! mais bien sur, il faut l'injecter dans le code avant de traiter les template, j'opterais dans ou plutôt avant avant le prechauffage , il te faut bricoler un plugin avec un seul hook (Index ou IndexBegin ) et une seule ligne pour injecter la constante (des que plxShow et plxMotor sont dispos) ;)

    Cdt

    Edit : Une variable est aussi suffisante,
    exemple de plugin minimal :

    <?php
        if(!defined('PLX_ROOT')) {
            die('oups!');
        }
        class themeSroot extends plxPlugin {
            const HOOKS = array(
                'IndexBegin',
            );
            const BEGIN_CODE = '<?php' . PHP_EOL;
            const END_CODE = PHP_EOL . '?>';
    
            public function __construct($default_lang) {
            # appel du constructeur de la classe plxPlugin (obligatoire)
            parent::__construct($default_lang);
    
            # Ajoute des hooks
            foreach(self::HOOKS as $hook) {
                $this->addHook($hook, $hook);
            }
        }
            #variable chemin themes
        public function IndexBegin() {
            echo self::BEGIN_CODE;
    ?>
    $rootStheme =  $plxShow->plxMotor->urlRewrite($plxShow->plxMotor->aConf['racine_themes']);   
    <?php
               echo self::END_CODE;
        }
     }
    ?>
    

    et de l'autre coté ça donne : <?= $rootStheme; ?> , plus court à l'usage :)

    ♣♣♣♣ <°(((((-{ ~ Mon site avec PluXml: https://re7net.com | Mes plugins pour PluXml : https://github.com/gcyrillus }-))))°> ♣♣♣♣

  • cpalocpalo Member
    octobre 2021 modifié

    Merci
    je ne pensais pas retravailler sur un petit plugin tout de suite. Mais voilà une bonne occasion pour en refaire un.
    Ce plugin injecterai le code dans index.php?
    Par contre ce que je ne comprends pas, c'est que normalement en début du header.php on doit pouvoir déclarer des constantes?
    Cordialement

  • On ne peut pas utiliser la directive "const" pour évaluer une constante à partir d'une valeur variable à l'exécution.
    Il faut utiliser la fonction "define" :
    https://www.php.net/manual/fr/function.define
    https://www.php.net/manual/fr/language.constants.syntax.php

    <?php
    if(!defined('PLX_ROOT')) {
        die('oups!');
    }
    
    define('ROOT_THEMES', $plxShow->plxMotor->urlRewrite($plxShow->plxMotor->aConf['racine_themes']));
    ?>
    

    const évalue une constante à la compilation.

  • @bazooka07
    Bonsoir
    Oups!! Merci pour ce rappel. Cela fonctionne correctement maintenant.
    Content de te revoir sur le forum.
    Cordialement

  • cpalocpalo Member
    octobre 2021 modifié

    Oups...erreur d'envoi

  • On peut aussi utiliser directement la variable $plxMotor déclaré dans index.php :

    <?php
    if(!defined('PLX_ROOT')) {
        die('oups!');
    }
    
    define('ROOT_THEMES', $plxMotor->urlRewrite($plxxMotor->aConf['racine_themes']));
    ?>
    
  • Moi, j’ai remarqué que lorsque je passe un objet par référence à une fonction, cet objet est constant.

  • et moi j'avais complétement zappé les ob_start();et CIE et surtout totalement ignoré le define()
    Petite question simple au départ qui s’avère bien plus . Merci @cpalo

    ♣♣♣♣ <°(((((-{ ~ Mon site avec PluXml: https://re7net.com | Mes plugins pour PluXml : https://github.com/gcyrillus }-))))°> ♣♣♣♣

  • cpalocpalo Member
    novembre 2021 modifié

    Bonjour,
    Avant de marquer résolu pour ce post, je souhaiterai avoir vos avis par rapport au code que j'ai retenu et qui fonctionne.
    Structure de mon dossier thèmes:

    themes
       assets
       theme-1
       theme-2
         css
         img
         tpl-components
            component.php
         tpl-parts
            header.php
         home.php    
    

    Dans home.php :

    <?php include 'tpl-parts/header.php'; ?>
    

    Dans header.php :

    <?php if (!defined('PLX_ROOT')) exit; ?>
    
    <!DOCTYPE html>
    <html lang="<?php $plxShow->defaultLang() ?>">
    
    <?php
    // Traitement du dossier assets (à la racine des thèmes)
    define('ROOT_THEMES', $plxShow->plxMotor->urlRewrite($plxShow->plxMotor->aConf['racine_themes']));
    define('PLS_ASSETS', ROOT_THEMES.'assets/');
    // Traitement du dossier components (à la racine du thème)
    define('PLS_COMPONENTS', PLX_ROOT.$plxMotor->aConf['racine_themes'].$plxMotor->style.'/tpl-components/');
    ?>
    <head>
           <link rel="stylesheet" href="<?= PLS_ASSETS ?>css/simpleplucss.css">
    
    <body id="top" class="page grid-body mode-<?php $plxShow->mode(true) ?>">
        ..........
        <div>
            <?php include PLS_COMPONENTS.'component.php' ?>
        </div>
    
Connectez-vous ou Inscrivez-vous pour répondre.