Jump to content

Récupération de la référence produit


Recommended Posts

Bonjour à tous,
 
Je sollicite votre aide car je bloque... HELP !
 
J'utilise un service web pour le stock de mes produits (simplement pour afficher la quantité) qui fonctionne avec la référence produit. J'ai donc créé une fonction dans FrontController.php en override comme ceci :

<?php

class FrontController extends FrontControllerCore {
    public function initHeader(){
        $clienttest = new SoapClient('webservice.awws?wsdl');
        $reftest = $this->product->reference;
        $paramstest = array('codeart'=>$reftest);
        $responsetest = $clienttest->__soapCall('quantite', array($paramstest));


foreach($responsetest as $valeurtest) {
}
        self::$smarty->assign('testtest', $valeurtest);

        return parent::initHeader();
    }
}

J'arrive bien a afficher $valeurtest dans product.tpl mais pas dans product-list.tpl, il faudrait en fait que je puisse récupérer la référence du produit de product-list.tpl pour l'inclure dans ma fonction et je ne sais pas comment faire.

 

Quelqu'un aurait une idée ?

Merci :)

Link to comment
Share on other sites

Je ne pense pas que ce soit la bonne solution d'utiliser le frontcontroller.

 

Tu n'as pas toujours un $product dedans.

 

Regardes la class Product.php  et la methode  getProductsProperties

 

Tu pourras set ton stock partout. 

Merci de ta réponse :)

Je me doutais un peu qu'il fallait passer par Product.php. Une idée pour le mettre en place ? Je suis largué.. surtout pour la fonction a utiliser...

Link to comment
Share on other sites

Tu fais pareils tu overrides la classe Product.php

 

Et ici par exemple :

 

https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/classes/Product.php#L4390

 

Tu mets en dessous : 

$clienttest = new SoapClient('webservice.awws?wsdl');
$reftest = $row['reference'];
$paramstest = array('codeart'=>$reftest);
$responsetest = $clienttest->__soapCall('quantite', array($paramstest));

$row['quantity_from_webserice'] = $responsetest;

Pas besoin d'assigner à smarty vu que $row est ensuite assigné.

 

Désolé je suis novice,

donc en gros je colle (ligne 4390 de Product.php) ça :

$clienttest = new SoapClient('webservice.awws?wsdl');
$reftest = $row['reference'];
$paramstest = array('codeart'=>$reftest);
$responsetest = $clienttest->__soapCall('quantite', array($paramstest));

$row['quantity_from_webserice'] = $responsetest;

et ensuite dans l'override comment ça se passe ? Quelle valeur dois je mettre dans mes tpl ?

 

Merci encore :)

Link to comment
Share on other sites

Aie c'est pas évident, j'ai essayé de passer comme tu m'as dit Product.php en override avec ce code : 

<?php

class Product extends ProductCore {
    
     public static function getProductProperties($id_lang, $row, Context $context = null)
    {
        if (!$row['id_product']) {
            return false;
        }
        if ($context == null) {
            $context = Context::getContext();
        }
        $id_product_attribute = $row['id_product_attribute'] = (!empty($row['id_product_attribute']) ? (int)$row['id_product_attribute'] : null);
        // Product::getDefaultAttribute is only called if id_product_attribute is missing from the SQL query at the origin of it:
        // consider adding it in order to avoid unnecessary queries
        $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']);
        if (Combination::isFeatureActive() && $id_product_attribute === null
            && ((isset($row['cache_default_attribute']) && ($ipa_default = $row['cache_default_attribute']) !== null)
                || ($ipa_default = Product::getDefaultAttribute($row['id_product'], !$row['allow_oosp'])))) {
            $id_product_attribute = $row['id_product_attribute'] = $ipa_default;
        }
        if (!Combination::isFeatureActive() || !isset($row['id_product_attribute'])) {
            $id_product_attribute = $row['id_product_attribute'] = 0;
        }
        // Tax
        $usetax = Tax::excludeTaxeOption();
        $cache_key = $row['id_product'].'-'.$id_product_attribute.'-'.$id_lang.'-'.(int)$usetax;
        if (isset($row['id_product_pack'])) {
            $cache_key .= '-pack'.$row['id_product_pack'];
        }
        if (isset(self::$producPropertiesCache[$cache_key])) {
            return array_merge($row, self::$producPropertiesCache[$cache_key]);
        }
        // Datas
        $row['category'] = Category::getLinkRewrite((int)$row['id_category_default'], (int)$id_lang);
        $row['link'] = $context->link->getProductLink((int)$row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']);
        $row['attribute_price'] = 0;
        if ($id_product_attribute) {
            $row['attribute_price'] = (float)Product::getProductAttributePrice($id_product_attribute);
        }
        $row['price_tax_exc'] = Product::getPriceStatic(
            (int)$row['id_product'],
            false,
            $id_product_attribute,
            (self::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6)
        );
        if (self::$_taxCalculationMethod == PS_TAX_EXC) {
            $row['price_tax_exc'] = Tools::ps_round($row['price_tax_exc'], 2);
            $row['price'] = Product::getPriceStatic(
                (int)$row['id_product'],
                true,
                $id_product_attribute,
                6
            );
            $row['price_without_reduction'] = Product::getPriceStatic(
                (int)$row['id_product'],
                false,
                $id_product_attribute,
                2,
                null,
                false,
                false
            );
        } else {
            $row['price'] = Tools::ps_round(
                Product::getPriceStatic(
                    (int)$row['id_product'],
                    true,
                    $id_product_attribute,
                    6
                ),
                (int)Configuration::get('PS_PRICE_DISPLAY_PRECISION')
            );
            $row['price_without_reduction'] = Product::getPriceStatic(
                (int)$row['id_product'],
                true,
                $id_product_attribute,
                6,
                null,
                false,
                false
            );
        }
        $row['reduction'] = Product::getPriceStatic(
            (int)$row['id_product'],
            (bool)$usetax,
            $id_product_attribute,
            6,
            null,
            true,
            true,
            1,
            true,
            null,
            null,
            null,
            $specific_prices
        );
        $row['specific_prices'] = $specific_prices;
        $row['quantity'] = Product::getQuantity(
            (int)$row['id_product'],
            0,
            isset($row['cache_is_pack']) ? $row['cache_is_pack'] : null
        );
        $row['quantity_all_versions'] = $row['quantity'];
        if ($row['id_product_attribute']) {
            $row['quantity'] = Product::getQuantity(
                (int)$row['id_product'],
                $id_product_attribute,
                isset($row['cache_is_pack']) ? $row['cache_is_pack'] : null
            );
        }
        $row['id_image'] = Product::defineProductImage($row, $id_lang);
        $row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']);
        $row['attachments'] = array();
        if (!isset($row['cache_has_attachments']) || $row['cache_has_attachments']) {
            $row['attachments'] = Product::getAttachmentsStatic((int)$id_lang, $row['id_product']);
        }
        $row['virtual'] = ((!isset($row['is_virtual']) || $row['is_virtual']) ? 1 : 0);
        // Pack management
        $row['pack'] = (!isset($row['cache_is_pack']) ? Pack::isPack($row['id_product']) : (int)$row['cache_is_pack']);
        $row['packItems'] = $row['pack'] ? Pack::getItemTable($row['id_product'], $id_lang) : array();
        $row['nopackprice'] = $row['pack'] ? Pack::noPackPrice($row['id_product']) : 0;
        if ($row['pack'] && !Pack::isInStock($row['id_product'])) {
            $row['quantity'] = 0;
        }
        $row['customization_required'] = false;
        if (isset($row['customizable']) && $row['customizable'] && Customization::isFeatureActive()) {
            if (count(Product::getRequiredCustomizableFieldsStatic((int)$row['id_product']))) {
                $row['customization_required'] = true;
            }
        }
$clienttest = new SoapClient('webservice.awws?wsdl');
$reftest = $row['reference'];
$paramstest = array('codeart'=>$reftest);
$responsetest = $clienttest->__soapCall('quantite', array($paramstest));

        $row['quantity_from_webserice'] = $responsetest;
        
        $row = Product::getTaxesInformations($row, $context);
        self::$producPropertiesCache[$cache_key] = $row;
        return self::$producPropertiesCache[$cache_key];
    }

}

J'ai ensuite essayé d'utiliser les variables $responsetest et $quantity_from_webserice dans product.tpl mais j'ai toujours un message d'erreur "Undefined index"

Link to comment
Share on other sites

Dans ton tpl product tu vois $product['xxxxxx']

 

Essayes $product['quantity_from_webserice];

 

Non tjs pas, d'ailleurs dans mon tpl je n'ai pas $product['xxxxxx']

j'ai essayé : {$product->quantity_from_webserice} , $product['quantity_from_webserice'] dans le tpl mais rien ne passe

J'ai un message "Undefined index" ou "Undefined property: Product::$quantity_from_webserice"

 

Merci de ton aide

Link to comment
Share on other sites

 

Hum c'est vendredi je l'accorde mais logiquement ça devrait fonctionner si ton code au dessus est bon.

 

en dessous de : 

$row['quantity_from_webserice'] = $responsetest;

Tu ajoutes 

$row['quantity_from_webserice'] = 'montest';

Dans ton tpl tu mets : 

{$product.quantity_from_webserice|@var_dump}

 

J'ai suivi scrupuleusement tes indications mais tjs un soucis : Fatal error: Cannot use object of type Product

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