Jump to content

référence de la déclinaison


Recommended Posts

Je veux récupérer la référence ($REF) de la déclinaison pour appliquer dans product.tpl

{$product->getColor($REF)|escape:'html':'UTF-8'}

Je sais que c'est possible dans product.js de modifier la référence directement dans la page

if (selectedCombination['reference'] || productReference)
    {
        if (selectedCombination['reference'])
            $('#product_reference span').text(selectedCombination['reference']);
        else if (productReference)
            $('#product_reference span').text(productReference);
        $('#product_reference:hidden').show('slow');
    }
    else
        $('#product_reference:visible').hide('slow');

Mais comment récupérer la référence dans product.tpl ou product.php dans une variable ?

 

Merci pour votre aide

 

 

 

 

 

Link to comment
Share on other sites

{$combination|@var_dump}

 

Dans product.tpl

{$combination|@var_dump}

erreur :

Notice: Undefined index: combination in /share/MD0_DATA/Web/www/X009_analiadeco/dev/tools/smarty/sysplugins/smarty_internal_templatebase.php(157) : eval()'d code on line 389

Notice: Trying to get property of non-object in /share/MD0_DATA/Web/www/X009_analiadeco/dev/tools/smarty/sysplugins/smarty_internal_templatebase.php(157) : eval()'d code on line 389
Link to comment
Share on other sites

Oups désolé : combinations avec un s

Ok merci mais comment avoir la référence de la déclinaison appelée pour que je puisse l'utiliser dans la fonction :

{$product->getColor($REF)|escape:'html':'UTF-8'}
Link to comment
Share on other sites

Il faut qu'on sache à quoi correspond : $product->getColor();

 

Dans tous les cas au changement de déclinaison il faudra faire ça en XHR dans le product.js

 

Je vais chercher la référence produit pour afficher un descriptif particulier des couleurs du produit

    public function getColor($ref)
    {
        return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
        SELECT `desc`
        FROM `'._DB_PREFIX_.'COULEUR`
        WHERE `ref` = \''.pSQL($ref).'\'');
    }

Est-ce qu'il faut créer une variable de session qu'on modifie en Ajax ? 

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

Tu as deux solutions : 

 

Tu charges toutes les description couleur correspondant à ton produit et tu les assignes via smarty

 

ou sinon

 

Au changement de déclinaison sur fait une requête ajax pour récupérer la description couleur de la déclinaison choisit. 

 

Si je choisi la deuxième solution. j'ai trouvé comment récupérer le ID de la couleur

attributesCombinations[i]['id_attribute']

Comment je fais pour passer la référence dans product.php ou product.tpl pour récupérer la référence et la faire passer dans ma fonction ? avez-vous une idée ?

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

 

La référence vous l'avez comme dit dans votre premier message avec :
 selectedCombination['reference']

Oui j'avais compris mais quand je fais

window.location.replace(url + 'ref='+selectedCombination['reference'] + request);

l'URL devient

http://nas2/ADECO/index.php?id_product=8&controller=product&search_quer=VP%20424%2002&results=1ref=VP%20424%2004#/11-couleur-noir

Je n'ai plus ref et le search_quer est la référence par défaut. Mon problème c'est de récupérer la référence cliqué dans product.tpl si ça passe pas dans l'url. Je cherche...

 

J'ai testé de rajouter la référence dans le <a> de mes couleurs :

<a href="{$link->getProductLink($product)|escape:'html':'UTF-8'}&ref={$REF}"

Mais c'est pareil, l'url est transformé

 

Merci pour votre aide

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

Houlala .. c'est quoi ce windows.location 

C'est celui qui est dans getProductAttribute() à la fin... dans product.js

function getProductAttribute()
{
    // get every attributes values
    request = ''; ref = '';
    //create a temporary 'tab_attributes' array containing the choices of the customer
    var tab_attributes = [];
    var radio_inputs = parseInt($('#attributes .checked > input[type=radio]').length);
    if (radio_inputs)
        radio_inputs = '#attributes .checked > input[type=radio]';
    else
        radio_inputs = '#attributes input[type=radio]:checked';

    $('#attributes select, #attributes input[type=hidden], ' + radio_inputs).each(function(){
        tab_attributes.push($(this).val());
    });

    // build new request
    for (var i in attributesCombinations)
        for (var a in tab_attributes)
            if (attributesCombinations[i]['id_attribute'] === tab_attributes[a])
            {
                request += '/' + attributesCombinations[i]['id_attribute'] + '-' + attributesCombinations[i]['group'] + attribute_anchor_separator + attributesCombinations[i]['attribute'];
                findCombination(); // pour MAJ reference
                ref = selectedCombination['reference'];
            }
    request = request.replace(request.substring(0, 1), '#/');
    var url = window.location + '';
    //alert(original_url);
    // redirection
    if (url.indexOf('#') != -1)
        url = url.substring(0, url.indexOf('#'));

    if ($('#customizationForm').length)
    {
        // set ipa to the customization form
        customAction = $('#customizationForm').attr('action');
        if (customAction.indexOf('#') != -1)
            customAction = customAction.substring(0, customAction.indexOf('#'));
        $('#customizationForm').attr('action', customAction + request);
    }

        var param = "ref";    
        var regex = new RegExp("([?;&])" + param + "[^&;]*[;&]?");
        var query = url.replace(regex, "$1").replace(/&$/, '');
        newUrl = (query.length > 2 ? query + "&" : "?") + (ref ? param + "=" + ref : '');

    window.location.replace(newUrl + request);
}

J'ai ajouté :

var param = "ref";    
var regex = new RegExp("([?;&])" + param + "[^&;]*[;&]?");
var query = url.replace(regex, "$1").replace(/&$/, '');
newUrl = (query.length > 2 ? query + "&" : "?") + (ref ? param + "=" + ref : '');

pour remplacer et passer ma référence en paramètre

après je fais :

{assign var="REF" value=$smarty.get.ref}
{if $REFCOUL = $product->getColor($REF)|escape:'html':'UTF-8'}
    <p> Détails couleur : {$REFCOUL} </p>
{/if}

ça marche bien.

Est-ce que le code est propre ?

Je ne sais pas si c'est la meilleur méthode...

Dans tous les cas, c'est dommage que Prestashop n'est pas prévu de renvoyer la référence produit dans une variable... ça oblige à bidouiller alors que pour ma logique, la référence d'un produit est une information de base. Normalement, une url bien réalisé devrait permettre de retrouver automatique la référence d'un produit ou au moins l'ID de sa référence....  

Edited by ach34 (see edit history)
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...