Code php dans une template pour une page statique

ppmtppmt Member
avril 2017 modifié dans Entraide
Suite aux rapides amélioration qu'a subit le plugin plxMyShop je me décider a moi aussi améliorer le code de mon site

Jusqu’à présent ma homepage est en fait une page vide qui utilise une template qui elle contient tout le code nécessaire pour afficher ma boutique

static-longslow.php
[== PHP ==]
<?php include(dirname(__FILE__) . '/header.php'); ?>
    <main class="main">
            <div class="grid">
                <div css="col sml-12">
      		     <article class="article static" role="article" id="static-page-<?php echo $plxShow->staticId(); ?>">
                          <section>
	        		<?php $plxShow->staticContent(); ?>
		        </section>
                    </article>
                </div>

            <div class="grid">
                <div class="content col lrg-8">
            		<section >
		            <?php

                	    $plxMyShop = $plxShow->plxMotor->plxPlugins->aPlugins['plxMyShop'];
                	    $plxMyShop->donneesModeles["plxPlugin"] = $plxMyShop;

	                    if (isset($plxMyShop->aProds) && is_array($plxMyShop->aProds)) {
				            #echo $plxMyShop->aProds[ $plxMyShop->productNumber()]['name'];
				            foreach ($plxMyShop->aProds as $k1 => $v1) {
					            if ($v1['pcat'] == 1 && $v1['menu'] =='oui') {
					                $cat_array[$k1] = $v1['name']; # can only get the name of a category
					            }          
				            }

				            foreach($cat_array as $k1 => $v1){
					            echo '<h1 class="title_icon">'.$v1.'</h1>';
					            $plxMyShop->idProduit = $k1;
 					            $plxMyShop->plxShowProductContent();
					            #Now we display a nice name of the categorie....
					            foreach($plxMyShop->aProds as $k => $v) {
						            if ($v['group'] == $k1
							            && $v['pcat']  !=1 
							            &&	$v['active']==1 
							            &&	$v['readable']==1
						                ) {				
                                            $plxMyShop->donneesModeles["k"] = $k;
                                            $plxMyShop->modele("espacePublic/boucle/produitRubrique");		
							              }
						        }   

					        }

                	    }
		            ?>
			
                    </section>
                </div>
                <div>
                   <?php include(dirname(__FILE__).'/sidebar.php'); ?>
                </div>

            </div>
       </div>

   </main>
	
<?php include(dirname(__FILE__).'/footer.php'); ?>



Ce code marchait très bien jusqu’à ce que Yannic et Sudwebdesign se mettent a améliorer le code du plugin. Une des nouvelles fonctions est la possibilité de modifier le contenu du panier en ajoutant ou enlevant les articles. Quand on fait ca le texte du bouton de l'article change pour indique "Modifier" plutôt que "Supprimer"

C'est fait grâce a un hook qui est dans le fichier plxMyShop.php.

Je suspecte qu'on ne peut pas utiliser de hook dans une template! Ai-je raison?

L'autre manière de faire serait de transféré le code PHP dans la page statique elle même. Sauf que je n'arrive pas à intégrer de code PHP dans une page statique :(

Bref un peu d'aide ne me ferait pas de mal :)

Réponses

  • YannicYannic Member
    avril 2017 modifié
    Juste avant le dernier <?php include(dirname(__FILE__).'/footer.php'); ?>

    ajoute :
    	<script type="text/javascript">
     function chngNbProd(k,sbmt){
      var btn = document.getElementById("addProd"+k);
      var nb = document.getElementById("nbProd"+k);
      if(btn.value != 'Add to basket'){
       if(nb.value == nb.getAttribute("data-o") || nb.value == 0){
        if(sbmt){//delete
         nb.value="0";
        }
        btn.value = 'Modify basket';
        btn.setAttribute("class", "red");
       }else{
        btn.value = 'Remove from basket';
        btn.setAttribute("class", "orange");
       }
      }
     }
    </script>
    

    je le modifierais plus tard à soir pour prendre en compte le fichier de langue, mais c'est tout ce qu'il te manque je pense.

    Edit : La solution d'ajouter un shortcodeactif true de Sudwebdesign est bien meilleure.

    Buster/NGINX/PHP7/PluXml5.8

  • SudwebdesignSudwebdesign Member
    avril 2017 modifié
    @ppmt

    Édit: à partir de plxMyShop v0.13.1b

    Si l'on souhaite utiliser le shortcode dans une page statique.
    Juste après le transfert du plugin dans la variable $plxMyShop il suffit d'ajouter [em]$plxMyShop->shortcodeactif = true;[/em] comme ceci:
    [== PHP ==]
       $plxMyShop = $plxShow->plxMotor->plxPlugins->aPlugins['plxMyShop'];
       $plxMyShop->shortcodeactif = true;
    
    Ce qui donne au complet:
    [== PHP ==]
    <?php include(dirname(__FILE__) . '/header.php'); ?>
    <main class="main">
     <div class="grid">
      <div css="col sml-12">
       <article class="article static" role="article" id="static-page-<?php echo $plxShow->staticId(); ?>">
        <section>
         <?php $plxShow->staticContent(); ?>
        </section>
       </article>
      </div>
      <div class="grid">
       <div class="content col lrg-8">
        <section>
    <?php
         $plxMyShop = $plxShow->plxMotor->plxPlugins->aPlugins['plxMyShop'];
         $plxMyShop->shortcodeactif = true;
         $plxMyShop->donneesModeles["plxPlugin"] = $plxMyShop;
         if (isset($plxMyShop->aProds) && is_array($plxMyShop->aProds)) {
          #echo $plxMyShop->aProds[ $plxMyShop->productNumber()]['name'];
          foreach ($plxMyShop->aProds as $k1 => $v1) {
           if ($v1['pcat'] == 1 && $v1['menu'] == 'oui') {
            $cat_array[$k1] = $v1['name']; # can only get the name of a category
           }          
          }
          foreach($cat_array as $k1 => $v1){
           echo '<h1 class="title_icon">'.$v1.'</h1>';
           $plxMyShop->idProduit = $k1;
            $plxMyShop->plxShowProductContent();
           #Now we display a nice name of the categorie....
           foreach($plxMyShop->aProds as $k => $v) {
            if ($v['group'] == $k1
             && $v['pcat']  !=1 
             && $v['active']==1 
             && $v['readable']==1
                ) {    
             $plxMyShop->donneesModeles["k"] = $k;
             $plxMyShop->modele("espacePublic/boucle/produitRubrique");  
            }
           }   
          }
         }
    ?>
        </section>
       </div>
       <div>
        <?php include(dirname(__FILE__).'/sidebar.php'); ?>
       </div>
      </div>
     </div>
    </main>
    <?php include(dirname(__FILE__).'/footer.php'); ?>
    

    il est ré-indenté, attention au mélange des espaces avec les tabulations :)

    Merci du partage
    @Plux

    Notre temps est la seule monnaie vraie ;)

    Site, Dépôt, framagit, MyShop, Factux

    #mozinor président

  • YannicYannic Member
    avril 2017 modifié
    ppmt a écrit:
    L'autre manière de faire serait de transféré le code PHP dans la page statique elle même. Sauf que je n'arrive pas à intégrer de code PHP dans une page statique :(

    Pour cela si tu as un éditeur genre CKEditor ou autre, il est mieux de le désactiver ou au pire de passer en code source.
    (le désactiver est mieux, voir même de ne pas en avoir du tout pour éviter un jour d'éditer la page en question avec l'éditeur ce qui sera une catastrophe pour le code de ta page)

    et si l'on se sert de $plxShow, il faut la déclarer avant avec
    <?php global $plxShow; ?>
    
    ce qui donnerais dans ton cas ( avec le code repris par Sudwebdesign )
    <?php
         // petite sécurité au cas ou
         if (!defined('PLX_ROOT')) exit;
    
         // Déclaration de plxShow
         global $plxShow;
    
         // Récupération des données connues
         $plxMyShop = $plxShow->plxMotor->plxPlugins->aPlugins['plxMyShop'];
         $plxMyShop->shortcodeactif = true;
         $plxMyShop->donneesModeles["plxPlugin"] = $plxMyShop;
    
         // Traitement des données
         if (isset($plxMyShop->aProds) && is_array($plxMyShop->aProds)) {
          #echo $plxMyShop->aProds[ $plxMyShop->productNumber()]['name'];
          foreach ($plxMyShop->aProds as $k1 => $v1) {
           if ($v1['pcat'] == 1 && $v1['menu'] == 'oui') {
            $cat_array[$k1] = $v1['name']; # can only get the name of a category
           }          
          }
          foreach($cat_array as $k1 => $v1){
           echo '<h1 class="title_icon">'.$v1.'</h1>';
           $plxMyShop->idProduit = $k1;
            $plxMyShop->plxShowProductContent();
           #Now we display a nice name of the categorie....
           foreach($plxMyShop->aProds as $k => $v) {
            if ($v['group'] == $k1
             && $v['pcat']  !=1 
             && $v['active']==1 
             && $v['readable']==1
                ) {    
             $plxMyShop->donneesModeles["k"] = $k;
             $plxMyShop->modele("espacePublic/boucle/produitRubrique");  
            }
           }   
          }
         }
    ?>
    

    Toutefois il est certainement préférable de plutôt faire cela dans le thème ( comme tu le faisait jusqu'à présent avec ton static-longslow.php -> voir code de Sudwebdesign au-dessus )

    Buster/NGINX/PHP7/PluXml5.8

  • ppmtppmt Member
    avril 2017 modifié
    Excellent!

    le rajout du code suivant a resolu le probleme du boutton. Je peux maintenant voir le texte du bouton changer quand je change la valeur du panier
    [== PHP ==]
    $plxMyShop->shortcodeactif = true;
    


    Par contre le shortcode [boutonPanier xxx] ne marche toujours pas a l'interieur de la template. Il affiche juste le texte du shortcode

    Edit: En transferant le code dans la page statique comme indique par Yannic ca marche.

    Voila comment j'affiche le produit maintenant. J'ai remplace
    [== PHP ==]
             $plxMyShop->donneesModeles["k"] = $k;
             $plxMyShop->modele("espacePublic/boucle/produitRubrique")
    

    par
    [== PHP ==]
             echo "[boutonPanier ".$k."]";
    

    Par contre pourquoi est-il mieux d'utilise une template du theme plutot que directement dans la page statique? L'un comme l'autre ne me derange pas. Je vuex juste faire les choses comme il faut (pour une fois :D)
  • Un bon shortcode avec spxshortcodes....
  • YannicYannic Member
    avril 2017 modifié
    ppmt a écrit:
    Excellent!

    Par contre pourquoi est-il mieux d'utilise une template du theme plutot que directement dans la page statique? L'un comme l'autre ne me derange pas. Je vuex juste faire les choses comme il faut (pour une fois :D)

    - le shortcode boutonPanier, oui pour le moment ne fonctionne que dans une page statique, il est prevu de pouvoir le faire fonctionner partout dans une future

    - pour le code php, l'un ou l'autre aura ses pour et ses contre. Cela dépend surtout ce que tu en fait,

    Pour rien qu'une page et qui ne fait qu'afficher du contenu tu est correct dans cette demarche d'autant quelle suivras les changements de themes.

    - par contre si tu devais en avoir plusieurs il est mieux de penser a un plugin ou une modification/evolution du plugin pour faire ton besoin via un autre shortcode ou autre dans ton cas la ou a une modification/ajout de template dans le thème

    Ceci afin d'éviter de melanger le contenu ( texte de tes categories/pages/articles... ) et le code ( php/html qui vas les afficher ou autre )

    Sinon, c'est comme si tu rangeais les pâtes avec les casseroles dans la cuisine, tu peux, c'est plus pratique et rapide quand tu veux les faire cuire mais ce n'est pas leur place que ma maman avais dis xD

    Buster/NGINX/PHP7/PluXml5.8

  • ppmtppmt Member
    avril 2017 modifié
    @Yannic: Merci pour les clarifications. J'attendrais pour le boutonPanier c'est pas non plus un gros problème.
    [del]
    Je pense que le plugin est prêt pour aller sur mon site web![/del]
    Le plugins est maintenant live sur mon site!
Connectez-vous ou Inscrivez-vous pour répondre.