PluXml.org

Blog ou CMS à l'Xml

Vous n'êtes pas identifié(e).

#1 11/04/2017 23:10:37

ppmt
Membre
Lieu : UK
Inscription : 18/06/2015
Messages : 340
Site Web

Code php dans une template pour une page statique

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 sad

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

Dernière modification par ppmt (11/04/2017 23:13:08)

Hors ligne

#2 11/04/2017 23:24:07

Yannic
Membre
Lieu : Lac-Saint-Jean QC CA
Inscription : 17/01/2017
Messages : 182

Re : Code php dans une template pour une page statique

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.

Dernière modification par Yannic (12/04/2017 00:12:38)


Bonjour chez vous !

Hors ligne

#3 12/04/2017 00:06:06

Sudwebdesign
Membre
Inscription : 15/02/2011
Messages : 142

Re : Code php dans une template pour une page statique

@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 $plxMyShop->shortcodeactif = true; 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 smile

Merci du partage
@Plux

Dernière modification par Sudwebdesign (12/04/2017 00:11:48)

Hors ligne

#4 12/04/2017 03:45:12

Yannic
Membre
Lieu : Lac-Saint-Jean QC CA
Inscription : 17/01/2017
Messages : 182

Re : Code php dans une template pour une page statique

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 sad

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 )

Dernière modification par Yannic (12/04/2017 04:01:29)


Bonjour chez vous !

Hors ligne

#5 12/04/2017 11:14:34

ppmt
Membre
Lieu : UK
Inscription : 18/06/2015
Messages : 340
Site Web

Re : Code php dans une template pour une page statique

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 big_smile)

Dernière modification par ppmt (12/04/2017 11:22:58)

Hors ligne

#6 12/04/2017 11:21:26

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 134
Site Web

Re : Code php dans une template pour une page statique

Un bon shortcode avec spxshortcodes....


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Simplebox - Visual Wizard
- Projet SPX : Vitrine - Blog
facebook

Hors ligne

#7 12/04/2017 17:02:17

Yannic
Membre
Lieu : Lac-Saint-Jean QC CA
Inscription : 17/01/2017
Messages : 182

Re : Code php dans une template pour une page statique

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 big_smile)

- 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

Dernière modification par Yannic (12/04/2017 17:30:59)


Bonjour chez vous !

Hors ligne

#8 12/04/2017 21:24:53

ppmt
Membre
Lieu : UK
Inscription : 18/06/2015
Messages : 340
Site Web

Re : Code php dans une template pour une page statique

@Yannic: Merci pour les clarifications. J'attendrais pour le boutonPanier c'est pas non plus un gros problème.

Je pense que le plugin est prêt pour aller sur mon site web!

Le plugins est maintenant live sur mon site!

Dernière modification par ppmt (12/04/2017 21:56:25)

Hors ligne

Pied de page des forums

A propos Nous soutenir Contact Twitter Google+
Copyright © 2006-2017 PluXml.org, tous droits réservés