DIssocier Description et attributs avec 1 seule option

13 posts in this topic

Posted (edited) · Report post

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

 

 

Edited by anceze

Share this post


: post
Share on other sites

Posted · Report post

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 :

Share this post


: post
Share on other sites

Posted · Report post

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);
			}

 

Share this post


: post
Share on other sites

Posted (edited) · Report post

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

Edited by anceze

Share this post


: post
Share on other sites

Posted · Report post

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é.

Share this post


: post
Share on other sites

Posted (edited) · Report post

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}

 

Edited by anceze

Share this post


: post
Share on other sites

Posted · Report post

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

Share this post


: post
Share on other sites

Posted (edited) · Report post

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

Edited by anceze

Share this post


: post
Share on other sites

Posted · Report post

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}

 

 

 

 

 

 

 

Share this post


: post
Share on other sites

Posted (edited) · Report post

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

Edited by anceze

Share this post


: post
Share on other sites

Posted · Report post

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

Share this post


: post
Share on other sites

Posted · Report post

Je retente ... !

(persévérant)

Merci.

Share this post


: post
Share on other sites

Posted (edited) · Report post

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

Edited by anceze

Share this post


: post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

Twitter Advisto ecommerce

Facebook PEEL Shopping