Constantes pour simplifier le code et fonction include

cpalocpalo Member
7 nov. 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

  • 12 oct. 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

    Remise en ligne et test de mon vieux site re7net.com . le design et moi on ne sait ... s'est jamais reconnu en fait! mais je fait des efforts.

  • cpalocpalo Member
    12 oct. 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>
    
  • 12 oct. 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 :)

    Remise en ligne et test de mon vieux site re7net.com . le design et moi on ne sait ... s'est jamais reconnu en fait! mais je fait des efforts.

  • cpalocpalo Member
    12 oct. 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.

  • cpalocpalo Member

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

  • cpalocpalo Member
    13 oct. 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']));
    ?>
    
  • Ayden29Ayden29 Member

    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

    Remise en ligne et test de mon vieux site re7net.com . le design et moi on ne sait ... s'est jamais reconnu en fait! mais je fait des efforts.

  • cpalocpalo Member
    8 nov. 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.