Jump to content

Remplacement fiche technique produit par une autre


kanu

Recommended Posts

Bonjour à tous,

 

Bien voilà je ne sais pas si cela est possible mais je ne sais pas comment faire, comme beaucoup je n'ai pas de connaissances en programmation, code, etc...par contre je sais bien me débrouiller pour modifier/adapter les choses à ma sauce avec un petit peu d'aide ;-)

 

Le problème qui me préoccupe depuis un moment que je n'ai jamais corrigé est le suivant 2 exemples de fiche produits:

 

http://www.kanucomputer.net/clavier-pc/6694-rapoo-e9090p.html

 

http://www.kanucomputer.net/pc-portable/7765-asus-n551jk-cn263h-be.html

 

Sur ces fiches produit on voit donc un onglet "fiche technique" la fiche technique de base de prestashop qui permet d'être déroulé ou pas via le thème que je possède.

Cette fiche technique est complètement brouillon, aucun thème, classement possible etc...

 

Mon module fournisseur de produit permet la classification des caractéristiques par catégories, via ce dernier tout est catégorisé et je peux modifier tout ce que je veux via le CSS.

Cette partie se trouve en dessous de la fiche technique prestashop de base sous forme de tableau juste en dessous de "avis client"

 

Ma question vous vous en doutez ;-) comment mettre ce tableau à la place de celui de base et garder également le fait que ce soit déroulant ou pas.

 

J'espère avoir été aussi clair que possible pour détailler le soucis ?

 

D'avance merci pour votre retour/conseils.

 

Bonne journée à tous.

 

Cordialement.

Link to comment
Share on other sites

En gros tu veux supprimer l'affichage des features dans ton product.tpl ? A voir comment est fait ton theme par defaut insere un commentaire:

{* Ne plus afficher ce block

 {if isset($features) && $features}
			<!-- Data sheet -->
			<section class="page-product-box">
				<h3 class="page-product-heading">{l s='Data sheet'}</h3>
				<table class="table-data-sheet">
					{foreach from=$features item=feature}
					<tr class="{cycle values="odd,even"}">
						{if isset($feature.value)}
						<td>{$feature.name|escape:'html':'UTF-8'}</td>
						<td>{$feature.value|escape:'html':'UTF-8'}</td>
						{/if}
					</tr>
					{/foreach}
				</table>
			</section>
			<!--end Data sheet -->
		{/if} 

*}
Edited by Alexandre-KM (see edit history)
Link to comment
Share on other sites

Bonjour,

 

Si j'ai bien compris vous souhaitez remplacer le contenu de l'onglet "fiche technique" natif de Prestashop par le contenu de votre module?

L'idée est donc, dans le fichier "product.tpl" de votre thème, de remplacer le code qui génère la liste des caractéristiques

<ul id="idTab10" class="bullet"...

par l'appel au hook sur lequel est greffé votre module. Dans l'onglet "Modules" > "Positions" vous pourrez trouver comment s'appelle ce hook, le retrouver dans le fichier TPL et ainsi le déplacer au bon endroit.

Link to comment
Share on other sites

 

En gros tu veux supprimer l'affichage des features dans ton product.tpl ? A voir comment est fait ton theme par defaut insere un commentaire:

{* Ne plus afficher ce block

 {if isset($features) && $features}
			<!-- Data sheet -->
			<section class="page-product-box">
				<h3 class="page-product-heading">{l s='Data sheet'}</h3>
				<table class="table-data-sheet">
					{foreach from=$features item=feature}
					<tr class="{cycle values="odd,even"}">
						{if isset($feature.value)}
						<td>{$feature.name|escape:'html':'UTF-8'}</td>
						<td>{$feature.value|escape:'html':'UTF-8'}</td>
						{/if}
					</tr>
					{/foreach}
				</table>
			</section>
			<!--end Data sheet -->
		{/if} 

*}

Bonjour,

 

Merci pour ta réponse, ce n'est pas exactement ce qu'il faut faire, oui il faut supprimer les caractéristiques de base mais il faut ajouter celle du module à la place et pouvoir garder le menu déroulant.

Merci pour ton intervention.

Link to comment
Share on other sites

Bonjour,

 

Si j'ai bien compris vous souhaitez remplacer le contenu de l'onglet "fiche technique" natif de Prestashop par le contenu de votre module?

L'idée est donc, dans le fichier "product.tpl" de votre thème, de remplacer le code qui génère la liste des caractéristiques

<ul id="idTab10" class="bullet"...

par l'appel au hook sur lequel est greffé votre module. Dans l'onglet "Modules" > "Positions" vous pourrez trouver comment s'appelle ce hook, le retrouver dans le fichier TPL et ainsi le déplacer au bon endroit.

Bonjour,

Merci pour votre solution c'est exactement ce que je souhaite faire !

J'ai bien repéré la ligne que vous m'avez indiquée et je sais également à quel Hook se rapporte mon module, cette ligne se trouve tout en bas du fichier product.tpl.

Je fais donc déplacer la totalité de ce block à la place de celui des caractéristiques de base et donc par la meme occasion écrase ce dernier.

 

Cela fait donc ce que je souhaite j'obtient bien les caractéristiques du module à la place de celle de prestashop, par contre impossible de refaire fonctionner ce menu déroulant :(

Une idée ?

 

Cordialement.

Link to comment
Share on other sites

Vous avez peut être supprimé un peu trop de code ou alors il faut en rajouter.

En gros il faut s'inspirer de la façon dont est affichée la description longue "en savoir plus", à savoir un titre h3 et une div qui s'affiche ou non suivant le contexte.

 

Vous pouvez faire un copier/coller mais attention à modifier les "id" pour que les nouveaux soient bien uniques!

Link to comment
Share on other sites

  • 3 months later...

Bonjour Je suis en train d'adapter mon product.tpl et mon product-list.tpl pour générer automatiquement du contenu en fonction des caractéristiques.


j'ai, sous le champs description, ajouté une nouvelle ≤div> qui contient des icons qui pour l'affichage ferons appel aux valeurs des caractéristique.


 


En premier lieu j'ai ajouté cette div dans global.js pour l'affichage en product-list comme ceci 



function display(view)
{
if (view == 'list')
{
..............................

html += '<div itemprop="Information" class="desperso">'+ $(element).find('.desperso').html() + '</div>';


..............................  

Créer un code identique sur mes deux tpl ( {foreach from=$features item=feature} pour product) et {foreach from=$product.features item=feature} pour la product-list) exemple pour l'image:




<tr>
{foreach from=$features item=feature}
{if $feature.name == 'Nom de la caractéristique fr' && $feature.value !== ' ' && $feature.value !== '-' && $category->id == 311|| $feature.name == 'Nom de la caractéristique en' && $feature.value !== ' ' && $feature.value !== '-' && $category->id == 311}
<td><img src="{$base_dir}img/cms/{$feature.value}.png" alt="{$feature.value}" title="{$feature.value}"/></td>
{/if}
{/foreach}
</tr>
 

Jusqu'ici aucun soucis tout s'affiche cependant quand j'ai un champs contenant plusieurs valeurs dans ma product-list la boucle se fait et m'affiche les valeur une à une, alors qu'en page product il l'affiche comme une chaine de caractère quelqu'un saurait-il pourquoi? Voici un exemple ex:




Product-list:
<tr>
<td><img src="http://monsite/img/cms/img1.png" alt="img1" title="img1"/></td>
<td><img src="http://monsite/img/cms/img2.png" alt="img2" title="img2"/></td>
<td><img src="http://monsite/img/cms/img3.png" alt="img3" title="img3"/></td>
<td><img src="http://monsite/img/cms/img4.png" alt="img4" title="img4"/></td>
</tr>
Product:
<td><img src="http://monsite/img/cms/img1, img2, img3, img4.png" alt="img1, img2, img3, img4" title="img1, img2, img3, img4"/></td>

Et dernier petit soucis en product-list si j'utilise "$category->id == " j'ai une belle erreur :/


 


Excusez pour le roman j'espère que quelqu'un pourra m'aider, en vous remerciant d'avance 


Version prestashop: 1.6.1.3 Thème personnalisé 


Edited by ledmounting (see edit history)
Link to comment
Share on other sites

Je n'ai pas vraiment creusé mais clairement ta variable $features est bien un tableau quand tu arrives dans product-list alors que c'est une chaîne de caractères quand tu arrives dans la page produit.

 

D'un côté tu dois arriver avec:

array(

    [0] => 'img1',

    [1] => 'img2',

    [2] => 'img3',

    [3] => 'img4',

)

Et de l'autre:

string(

      img1, img2, img3, img4

)

 

Tu devrais regarder du côté des contrôleurs.

Link to comment
Share on other sites

Merci, pour cette réponse rapide :) Oui c'est ce que je me disais mais je ne sais quel contrôleur .... il y a-t-il un  contrôleur particulier qui génère l'affichage de product-list.tpl ?

 

 

Je vois dans ma classe FeatureValue.php

public static $definition = array(
        'table' => 'feature_value',
        'primary' => 'id_feature_value',
        'multilang' => true,
        'fields' => array(
            'id_feature' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
            'custom' =>    array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),

            /* Lang fields */
            'value' =>        array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 255),
        ),
    );
Edited by ledmounting (see edit history)
Link to comment
Share on other sites

Il faut plutôt partir dans le contrôleur product (puisque c'est lui qui te renvoie un string non ?) et trouver comment est défini: $features

 

Je suppose qu'il est défini comme un string (img1, img2, ...)

 

A ce moment, après la construction de $features, faire un truc du style:

$MesFeaturesAmoi = implode(',', $features);
$this->context->smarty->assign('mesfeaturesamoi', $MesFeaturesAmoi);

Et là, dans ta vue $mesfeaturesamoi sera un tableau

Edited by franckm1000 (see edit history)
Link to comment
Share on other sites

Dans mon productControlleur la seul fois ou est déclaré mon feature c'est là et il me semble que on l'assigne en tableau non ? :/

$this->context->smarty->assign(array(                'stock_management' => Configuration::get('PS_STOCK_MANAGEMENT'),
                'customizationFields' => $customization_fields,
                'id_customization' => empty($customization_datas) ? null : $customization_datas[0]['id_customization'],
                'accessories' => $accessories,
                'return_link' => $return_link,
                'product' => $this->product,
                'product_manufacturer' => new Manufacturer((int)$this->product->id_manufacturer, $this->context->language->id),
                'token' => Tools::getToken(false),
                'features' => $this->product->getFrontFeatures($this->context->language->id),
                'attachments' => (($this->product->cache_has_attachments) ? $this->product->getAttachments($this->context->language->id) : array()),
                'allow_oosp' => $this->product->isAvailableWhenOutOfStock((int)$this->product->out_of_stock),
                'last_qties' =>  (int)Configuration::get('PS_LAST_QTIES'),
                'HOOK_EXTRA_LEFT' => Hook::exec('displayLeftColumnProduct'),
                'HOOK_EXTRA_RIGHT' => Hook::exec('displayRightColumnProduct'),
                'HOOK_PRODUCT_OOS' => Hook::exec('actionProductOutOfStock', array('product' => $this->product)),
                'HOOK_PRODUCT_ACTIONS' => Hook::exec('displayProductButtons', array('product' => $this->product)),
                'HOOK_PRODUCT_TAB' =>  Hook::exec('displayProductTab', array('product' => $this->product)),
                'HOOK_PRODUCT_TAB_CONTENT' =>  Hook::exec('displayProductTabContent', array('product' => $this->product)),
                'HOOK_PRODUCT_CONTENT' =>  Hook::exec('displayProductContent', array('product' => $this->product)),
                'display_qties' => (int)Configuration::get('PS_DISPLAY_QTIES'),
                'display_ht' => !Tax::excludeTaxeOption(),
                'jqZoomEnabled' => Configuration::get('PS_DISPLAY_JQZOOM'),
                'ENT_NOQUOTES' => ENT_NOQUOTES,
                'outOfStockAllowed' => (int)Configuration::get('PS_ORDER_OUT_OF_STOCK'),
                'errors' => $this->errors,
                'body_classes' => array(
                    $this->php_self.'-'.$this->product->id,
                    $this->php_self.'-'.$this->product->link_rewrite,
                    'category-'.(isset($this->category) ? $this->category->id : ''),
                    'category-'.(isset($this->category) ? $this->category->getFieldByLang('link_rewrite') : '')
                ),
                'display_discount_price' => Configuration::get('PS_DISPLAY_DISCOUNT_PRICE'),
            ));
        }
        $this->setTemplate(_PS_THEME_DIR_.'product.tpl');
    }
Edited by ledmounting (see edit history)
Link to comment
Share on other sites

Oui et bien c'est ça, au moment de l'assignation, la valeur est construite par :

$this->product->getFrontFeatures($this->context->language->id)

Donc si tu fais:

$MesFeaturesAmoi = implode(',', $this->product->getFrontFeatures($this->context->language->id));
$this->context->smarty->assign('mesfeaturesamoi', $MesFeaturesAmoi);

Dans SMARTY ta variable $MesFeaturesAmoi devrait être un tableau correspondant à tes besoins.

Link to comment
Share on other sites

Je vous remercie infiniment pour votre aide et votre patience ! :)
j'aurais cependant besoin de plus de détail si cela ne vous ennui pas quant à la manière de procéder (je ne suis novice encore dans le développement prestashop)  
Voilà ce que j'ai fais sans succès ... :/
Dans la fonction "public function initContent()" au dessus de "$this->context->smarty->assign(array("
$MesFeaturesAmoi = implode(',', $this->product->getFrontFeatures($this->context->language->id));

et dans : $this->context->smarty->assign(array( je déclare comme ceci 

'features' => $this->product->getFrontFeatures($this->context->language->id),
'mesfeaturesamoi' => $MesFeaturesAmoi,

J'obtiens "Notice: Array to string conversion in/Fichier concerné"

Link to comment
Share on other sites

Je n'arrive pas à joindre de fichier le résultat pour $Feautures

Smarty_Variable Object (3)
->value = Array (8)
15 => Array (3) values => Array (6)
0 => "ledil"
1 => "Carclo"
2 => "GAGGIONE Holder" 3 => "GAGGIONE Lens"
4 => "LEDENGIN"
5 => "LEDLINK"
name => "Compatibilite Optiques"
value => "ledil, Carclo, GAGGIONE Holder, GA..." 4 => Array (3)
values => Array (1) 0 => "Lumileds"
name => "Marque LED"
value => "Lumileds" 11 => Array (3)
values => Array (1) 0 => "Luxeon Z"
name => "Reference LED"
value => "Luxeon Z" 13 => Array (3)
values => Array (1) 0 => "-"
name => "Zener"
value => "-" 9 => Array (3)
values => Array (1) 0 => "4"
name => "Nombre de LED"
value => "4" 10 => Array (3)
values => Array (1) 0 => "Rect"
name => "Forme"
value => "Rect" 12 => Array (3)
values => Array (1) 0 => "-"
name => "CTN"
value => "-" 16 => Array (3)
values => Array (1) 0 => "2W/mK"
name => "Conductivite"
value => "2W/mK"
->nocache = false
->scope = "file:/Applications/MAMP/htdocs/new-ve..."
Link to comment
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
×
×
  • Create New...