DIssocier Description et attributs avec 1 seule option

13 messages dans ce sujet

Posté(e) (modifié) · Signaler ce message

Bonjour.

Sur PEEL Shopping 8

Les attributs avec une seule option s'affichent sous forme d'information à la suite de la description.

Malheureusement la mise en page est faite en php et pas dans le tpl.

Je suppose  que c'est dans li/fonctions/display_product.php

J'ai trouvé une occurrences lignes +/- 294

		} else {
						$description = str_replace("\n", '<br />', display_option_image(vb($result['nom_attribut']), true));
					}

Pour le moment je reste coincé pour les dissocier.

Je tente de trouver à quel moment couper le code pour arrêter $description à la description du produit

et continuer avec une nouvelle variable $desc_attribut (par exemple) qui affichera la liste des attributs à option unique.

 

Bonne journée

 

 

Modifié (le) par anceze

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

la description du produit est gérée par la classe Product : $product_object->description

Pour modifier l'affichage de l'attribut sous la description, il faut modifier la classe Product vers la ligne 328, et la variable $extra_description :

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Merci, j'avance au ralenti mais j'avance.

Info :

Dans lib/class/Product.php

La ligne :

 

// On ajoute à la description les attributs à options uniques, puisque ces attributs ne seront pas sélectionnables par ailleurs (car rien à sélectionner)

Devrait être affichée quelques lignes plus haut :

Juste avant

	if (empty($GLOBALS['site_parameters']['display_extra_product_description_mode']) || $GLOBALS['site_parameters']['display_extra_product_description_mode']=='after') {
				$this->description = String::html_entity_decode_if_needed($this->description) .'<br />'. $extra_description;
			} elseif ($GLOBALS['site_parameters']['display_extra_product_description_mode']=='before') {
				$this->description = $extra_description .'<br />'. String::html_entity_decode_if_needed($this->description);
			}

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) (modifié) · Signaler ce message

Pour faire simple :

 

Pour ne pas casser le code brutalement, ce qui causerai des erreur dans d'autres pages;

Je dois créer 2 nouvelles variable.

- $description_seule

- $attributs_options_unique

 

je n'arrive pas à transmettre une variable entre les différentes pages.

De lib/class/product.php

à -> lib/fonction/display_product.php (ligne +/- 334)

à -> modele/peel7/smarty/product_details.html.php (ligne +/- 298)

 

Je parviens à isoler ceux deux éléments et à leur donner un variable différente à chacun;

Mais je n'arrive pas à créer le lien qui va les rendre lisible dans le template.

 

Bonne journée

Modifié (le) par anceze

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

Pour la classe Product il faut définir des nouvelles variables pour la classe, en ajoutant

var $description_seule = null;
var $attributs_options_unique = null;

sous les variables déjà présentes vers la ligne 140 du fichier lib/Class/Product.php. Ensuite il faut faire

$this->description_seule = $description_seule;
$this->attributs_options_unique = $attributs_options_unique;

à l'endroit où sont défini les variables dans la classe. Après ça vous pouvez utiliser $product_object->description_seule et $product_object->attributs_options_unique dans le fichier  lib/fonction/display_product.php

Pour utiliser les variables dans le fichier tpl, il faut utiliser la fonction $tpl->assign(). Par exemple pour le fichier produit_details_html.tpl il faut modifier la fonction get_produit_details_html du fichier lib/fonctions/display_product.php et faire $tpl->assign('ma_variable_smarty',"valeur"); Ensuite dans le fichier tpl, il faut placer {$ma_variable_smarty} à l'endroit souhaité.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) (modifié) · Signaler ce message

Je n'y arrive toujours pas.

Voilà ce que j'ai fais :

 

lib/class/product

var $description_seule = null;
var $attributs_options_unique = null;

à la suite de (139)

var $site_id = null;

 

lib/class/product

    $description_seule =  String::html_entity_decode_if_needed($this->description);
    $attributs_options_unique = $extra_description;
    correct_output($this->$description_seule, true, 'html', $lang);

à la suite de (336)

						$this->attributes_with_single_options_array[$this_options_infos['technical_code']] = array('nom'=>$this_options_infos['nom'],'descriptif'=>$this_options_infos['descriptif']);
					}
				}
			}

 

li/fonctions/display_product

            $tpl->assign('description_seule', $product_object->description_seule);      
            $tpl->assign('attributs_options_unique', $product_object->attributs_options_unique);  

 

à la suite de (301)

            $tpl->assign('description', $description);

 

modele/peel7/smarty/produit_details.html.tpl

    {if !empty($description_seule)}<div>{$description_seule}</div>{/if} 

//aucun ne s'affiche

à la suite de

        <div class="description" property="description">
				{if !empty($descriptif)}<p>{$descriptif}</p>{/if}
				{if !empty($description)}<div>{$description}</div>{/if}

 

Modifié (le) par anceze

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

au niveau de

            $tpl->assign('description_seule', $description_seule);      
            $tpl->assign('attributs_options_unique', $attributs_options_unique);  

C'est $product_object->description_seule et $product_object->attributs_options_unique qu'il faut utiliser. Sinon pour vous aidez dans votre développement spécifique vous pouvez lire vos logs d'erreurs

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) (modifié) · Signaler ce message

Je dois avouer que consulter les logs n'est pas une mauvaise idée.

Si ca peut m'éviter de vous embêter avec mes soucis de codes perso.

On les trouve où ? Dans peel ou dans mon navigateur ?

 

Car là je n'arrive à rien

L'ajoute de "product_object->" me donne une page blanche à partir du moment j'appel la attribut_options_unique

Pour l'autre rien ne s'affiche mais la page ne bug pas.

Je suppose qu'il faut l'ajouter dans lib/fonctins/display_product.php

Et ne pas l'afficher dans lib/class/product.php

 

 

PETIT TEST

        {if !empty($product_object->description_seule)}<div> PLEIN </div>{/if}
      {if empty($product_object->description_seule)}<div> VIDE </div>{/if}

        {if !empty($description_seule)}<div> PLEIN 2</div>{/if}
      {if empty($description_seule)}<div> VIDE 2</div>{/if}

Ca me répond Cide et Vide 2

CE qui ets dans /class/ n'en sort pas, par contre si je crée une variable dans /fonctions/ je peux l'utiliser. malheureusement les contenus sont dans /class/

Je continu de chercher par là

J'ai corrigé le code précédent dans ce post avec ces nouveaux ajustements et d'autres..

J'y ai passé la nuit.

 

Bonnes journées

Modifié (le) par anceze

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

au sujet des logs, je parlais des logs d'erreur de votre serveur. Cela donnera des indications sur l'origine de la page blanche qui s'affiche.

PETIT TEST

        {if !empty($product_object->description_seule)}<div> PLEIN </div>{/if}
      {if empty($product_object->description_seule)}<div> VIDE </div>{/if}

        {if !empty($description_seule)}<div> PLEIN 2</div>{/if}
      {if empty($description_seule)}<div> VIDE 2</div>{/if}

 Si vous avez bien fait les assign dans le fichier  li/fonctions/display_product.php :

            $tpl->assign('description_seule', $product_object->description_seule);      
            $tpl->assign('attributs_options_unique', $product_object->attributs_options_unique); 

Ensuite dans le fichier tpl,vous pouvez utiliser les variables sous cette forme  :

{$description_seule}
{$attributs_options_unique}

 

 

 

 

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) (modifié) · Signaler ce message

Bonjour

 

La page blanche n'est pas le problème.

C'est en général un souci simple de mauvaise syntaxe

Le souci c'est que même le test le plus simple ne passe pas la fonction product.

 

TEST FONCTIONNEL mais inutilisable

/class/product.php:

  var $tototest = 'test de toto'; 
 

 

/fonctions/display_product.php

      $tpl->assign('tototest', $product_object->tototest);

 

/smarty/product_details.html.tpl

<hr>test : {$tototest} 

 

 

TEST FONCTIONNEL 2 exploitable mais pas optimal car eje vais devoir doubler les requetes sql et les codes

/class/product.php:

  var $tototest = 'test de toto'; 
   function mmontest()
   {
   $tototest .= 'test de toto';
   return $tototest;
   }

 

/class/product.php: après function Product(... {

				$tpl->assign('tototest', $product_object->mmontest());  

 

/smarty/product_details.html.tpl

   <hr>test 8: {$tototest}  

 

 

TEST DYSFONCTIONNEL

/class/product.php:

  var $tototest = null;  
 

 

/class/product.php: après et dans function Product(... {

  $tototest .= 'test 2 de toto';

 

/fonctions/display_product.php

      $tpl->assign('tototest', $product_object->tototest);

 

/smarty/product_details.html.tpl

<hr>test 4: {$tototest} 

 

 

SOLUTION non optimale (c'est pas du pure peel) mais fonctionnelle :

Dans /class/product.php
 

function ma_desc_solo()
   {
   
   		   if (empty($lang)) {
			   $lang = $_SESSION['session_langue'];
		     }
    
          $id = intval($this->id);

          $query = query("
          SELECT description_".$lang."
          FROM peel_produits
          WHERE id =".$id);
          		
          if ($res = fetch_assoc($query)) 
          { 
          $description_seule =  $res['description_'.$lang];
          }
          return $description_seule;    

 

dans /focntion/display_product.php

   		$tpl->assign('description_seule', $product_object->ma_desc_solo());   


Idem en plus complexe pour les options uniques

Modifié (le) par anceze

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

Dans class/product.php, vous devez d'abord définir la variable dans la classe :

var $tototest = null

Ensuite dans le code faire

$this->tototest = "Ma chaine de caractère"

Ensuite dans fonction/display_product.php vous pouvez faire

   		$tpl->assign('description_seule', $product_object->tototest );   

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Je retente ... !

(persévérant)

Merci.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) (modifié) · Signaler ce message

Ok ca y est.

Pas facile de trouver le bon emplacement dans display product.

Trop haut ou trop bas et c'est pas bon.

 

Merci

Modifié (le) par anceze

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

Twitter Advisto ecommerce

Facebook PEEL Shopping