Jump to content

Invalid $number parameter: "" cannot be interpreted as a number


Recommended Posts

Bonjour,

Je rencontre l'erreur suivante lorsque j'essaye d'accéder à la liste des produits sur le backoffice : Invalid $number parameter: "" cannot be interpreted as a number, PrestaShop\PrestaShop\Core\Localization\Exception\

Le site est en multiboutique. Lorsque je sélectionne une boutique : pas d'erreur. Lorsque je suis sur "all shops" ça plante.

Version Prestashop 1.7.7.3, PHP 7.3

Initialement le site a été migré à partir d'un PS1.6. Seuls les modules Prestashop par défaut sont installés.

L'erreur est identique en désactivant les surcharges et modules non développés par Prestashop.

 

En mode debug j'obtiens la stacktrace suivante :

[2/2] LocalizationException

PrestaShop\PrestaShop\Core\Localization\Exception\LocalizationException: Invalid $number parameter: "" cannot be interpreted as a number at src/Core/Localization/Number/Formatter.php:108

at PrestaShop\PrestaShop\Core\Localization\Number\Formatter->format(null, object(Price)) (src/Core/Localization/Locale.php:154)

at PrestaShop\PrestaShop\Core\Localization\Locale->formatPrice(null, 'EUR') (src/Adapter/Product/AdminProductDataProvider.php:392)

at PrestaShop\PrestaShop\Adapter\Product\AdminProductDataProvider->getCatalogProductList(0, 20, 'id_product', 'desc', array()) (src/PrestaShopBundle/Controller/Admin/ProductController.php:160)

at PrestaShopBundle\Controller\Admin\ProductController->catalogAction(object(Request), 20, 0, 'id_product', 'desc') (vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:151)

at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1) (vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:68)

at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, false) (vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:200)

at Symfony\Component\HttpKernel\Kernel->handle(object(Request), 1, false) (admin1090/index.php:82)

[1/2] InvalidArgumentException

InvalidArgumentException: "" cannot be interpreted as a number at vendor/prestashop/decimal/src/Builder.php:40

at PrestaShop\Decimal\Builder::parseNumber('') (vendor/prestashop/decimal/src/Number.php:73)

at PrestaShop\Decimal\Number->__construct('') (src/Core/Localization/Number/Formatter.php:149)

at PrestaShop\PrestaShop\Core\Localization\Number\Formatter->prepareNumber(null) (src/Core/Localization/Number/Formatter.php:106)

at PrestaShop\PrestaShop\Core\Localization\Number\Formatter->format(null, object(Price)) (src/Core/Localization/Locale.php:154)

at PrestaShop\PrestaShop\Core\Localization\Locale->formatPrice(null, 'EUR') (src/Adapter/Product/AdminProductDataProvider.php:392)

at PrestaShop\PrestaShop\Adapter\Product\AdminProductDataProvider->getCatalogProductList(0, 20, 'id_product', 'desc', array()) (src/PrestaShopBundle/Controller/Admin/ProductController.php:160)

at PrestaShopBundle\Controller\Admin\ProductController->catalogAction(object(Request), 20, 0, 'id_product', 'desc') (vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:151)

at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1) (vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:68)

at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, false) (vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:200)

at Symfony\Component\HttpKernel\Kernel->handle(object(Request), 1, false) (admin1090/index.php:82)

 

 

L'erreur semblant venir d'un prix à "" j'ai vérifié mes tables : tous mes champs prix ont des valeurs numériques (articles et déclinaisons).

A tout hasard j'ai aussi réimporté le pack de langue français (seule langue installée) puisque le message d'erreur fait état de la localisation.

Avez-vous déjà rencontré ça ? Une idée pour trouver la cause de l'erreur ?

 

 

Capture d’écran 2021-04-16 à 16.46.03.png

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

32 minutes ago, joseantgv said:

Même erreur, mais pas la même cause. J'ai supprimé toutes les règles de panier et l'erreur persiste. J'ai également vérifié : tous les produits sont assignés à la boutique par défaut (qui ne plante pas, seul le contexte "all shops" pose problème).

J'ai aussi vu ce ticket qui est exactement le même problème : https://github.com/PrestaShop/PrestaShop/issues/22108

Le problème est marqué comme résolu depuis la 1.7.7.2, mais dans mon cas ça plante même en 1.7.7.3.

 

 

 

Link to comment
Share on other sites

Le problème se situe au niveau du prix d'un produit.

Ouvrez le fichier /src/Adapter/Product/AdminProductDataProvider.php et avant la ligne 391 ajoutez :

if (!$product['price']) {
    dump($product);
    die;
}

if (!$product['price_final']) {
    dump($product);
    die;
}

 

Link to comment
Share on other sites

Merci @joseantgv, ça permet de mieux cerner le problème. J'ai effectivement un null sur le price_final.

array:16 [▼ "id_product" => "243" "reference" => "661.50" "price" => "19.083333" "id_shop_default" => "1" "is_virtual" => "0" "name" => "Protège pied karaté WKF adidas" "link_rewrite" => "protège-pied-karaté-wkf-adidas" "active" => "0" "shopname" => "Sholin Fight Spirit" "id_image" => "2532" "name_category" => "Protections Karaté" "price_final" => null "nb_downloadable" => null "sav_quantity" => "0" "badge_danger" => "1" "total" => "834" ]

 

J'ai vérifié les tables ps_product et ps_product_shop, les champs price et wholesale_price sont renseignés (à 0 sur certaines boutiques, mais pas de null). Je n'ai pas vu de champ price_final, je suppose que c'est le price + taxes - remises ?

Capture d’écran 2021-04-20 à 11.03.42.png

  • Like 1
Link to comment
Share on other sites

Merci pour votre aide @joseantgv,  grâce à vous j'ai compris quels articles posent problème. Les articles qui plantent ont une caractéristique commune : les déclinaisons n'apparaissent pas dans le contexte "all shops", elles ne sont visibles que sur les boutiques.

Je viens de faire quelques tests cela se produit si la déclinaison est créée sur une boutique au lieu d'être créée en "all shops". Il faut donc faire attention à créer les déclinaisons sur le bon contexte.

  • Like 2
Link to comment
Share on other sites

  • 10 months later...
On 4/20/2021 at 12:01 PM, Pascal Martin said:

Merci pour votre aide @joseantgv,  grâce à vous j'ai compris quels articles posent problème. Les articles qui plantent ont une caractéristique commune : les déclinaisons n'apparaissent pas dans le contexte "all shops", elles ne sont visibles que sur les boutiques.

Je viens de faire quelques tests cela se produit si la déclinaison est créée sur une boutique au lieu d'être créée en "all shops". Il faut donc faire attention à créer les déclinaisons sur le bon contexte.

Bonjour

J'ai visiblement le même problème

Comment avez-vous détecté le ou les produits qui posent problèmes ?

J'ai plus de 500 produits 😕

Cordialement

Link to comment
Share on other sites

  • 1 year later...

fichier : /src/Adapter/Product/AdminProductDataProvider.php

ligne 391

remplacer

$product['price_final'] = $localeCldr->formatPrice($product['price_final'], $currency->iso_code);

par

if(!empty($product['price_final'])){

$product['price_final'] = $localeCldr->formatPrice($product['price_final'], $currency->iso_code);

}

 

  • Thanks 1
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...