Jump to content

Problème d'affichage de prix des produits en front-office


Recommended Posts

Bonjour

 

Tout nouveau sur le forum, j'ai installé il y a une quinzaine de jours la version 1.6.0.9 et j'ai commencé la configuration de la boutique et ajouté des produits. Le bug que je signale aujourd'hui n'existait pas.

 

Une mise à jour vers la version 1.6.0.11 m'a été proposée par le module 1-Click Upgrade il y a quelques jours, mais je n'ai pas testé les pages publiques immédiatement.

 

Or maintenant, sur la page de détails d'un produit, le prix affiché est toujours 0, quelle que soit la quantité ou la déclinaison choisie. J'ai tout d'abord incriminé un thème acheté sur addons.prestashop.com (Fashion Shop Responsive), mais le souci est le même avec le thème default-bootstrap, tous caches vidés (smarty et navigateur)

 

Dans le code source de la page, je trouve bien le prix :

<span id="our_price_display" itemprop="price">59,99 €</span>

(et aussi ses déclinaisons dans les variables js)

 

mais dans le DOM (code source généré) cette valeur est à 0 (sans même le €)

<span id="our_price_display" itemprop="price">0</span>

Changer de quantités comme de déclinaisons n'actualise pas ce montant affiché.

 

Toutefois, si on choisit une quantité ou une déclinaison et qu'on ajoute le produit au panier, le prix est correctement calculé et affiché dans le panier.

 

C'est visible ici : http://www.plantes-tropicales.com/prestashop/bougainvilliers/12-bougainvillier-spectroglabra.html

 

Merci pour toute suggestion. J'ai bien pensé faire un Rollback proposé par le plugin 1-Click Upgrade, mais je n'en mesure pas le risque et préfèrerais être à jour ;)

 

 

Link to comment
Share on other sites

Merci de ta curiosité ;)

 

Oui, il y a bien des produits disponibles, et on peut les ajouter au panier qui calcule correctement les prix.

 

Le souci est l'affichage du prix sur la page produit qui est toujours 0, quel que soit le nombre de produits ou leur déclinaisons, comme on peut le voir sur le lien que j'ai donné

Link to comment
Share on other sites

J'ai activé le mode debug de prestashop. Une des premières erreurs que je trouve en partie publique est

Notice: Constant _PS_PRICE_DISPLAY_PRECISION_ already defined in /../www/prestashop/config/config.inc.php on line 115

Cette ligne contient

define('_PS_PRICE_DISPLAY_PRECISION_', Configuration::get('PS_PRICE_DISPLAY_PRECISION'));

J'ai cru comprendre que la gestion des arrondis a changé avec la version 1.6.0.11, cela est-il lié et savez-vous comment le corriger ?

 

Côté admin, le mode debug affiche pas mal d'erreurs mais toujours la Notice comme ci-dessus

Link to comment
Share on other sites

Après une mise à jour manuelle (upload et écrasement des fichiers) vers la 1.6.0.11 une partie du bug est résolue. Il semble qu'il y ait eu un souci pendant le 1-Click Upgrade (?) et que certains fichiers n'aient pas été mis à jour.

 

Quoi qu'il en soit, le prix est maintenant correctement affiché, et modifié lors d'un changement de déclinaison. Toutefois il n'est pas modifié lors d'un ajout de quantité (le panier calcule correctement le prix, ce n'est qu'une question d'affichage sur la page produit), est-ce normal ?

Link to comment
Share on other sites

  • 4 weeks later...

Bonjour,

le même bug se présente pour moi.

je suis en presta 1.6.0.9 et j'ai voulu faire un update vers 1.6.0.11 qui n'a pas marché (?).

Bref, j'ai également cette erreur :

Notice: Constant _PS_PRICE_DISPLAY_PRECISION_ already defined in /home/euromatik/www/config/config.inc.php on line 115

qui s'affiche et je ne comprend pas bien pourquoi...

j'ai éssayé d'aller jeter un oeil dans le fichier spécifié mais sans succès. Quelqu'un a t'il découvert un début de quelque chose là dessus?

Link to comment
Share on other sites

Après une mise à jour manuelle (upload et écrasement des fichiers) vers la 1.6.0.11 une partie du bug est résolue. Il semble qu'il y ait eu un souci pendant le 1-Click Upgrade (?) et que certains fichiers n'aient pas été mis à jour.

 

Quoi qu'il en soit, le prix est maintenant correctement affiché, et modifié lors d'un changement de déclinaison. Toutefois il n'est pas modifié lors d'un ajout de quantité (le panier calcule correctement le prix, ce n'est qu'une question d'affichage sur la page produit), est-ce normal ?

Le prix n'est pas modifié lors du changement de quantités sur les thèmes basiques.

Il faut rajouter une fonction js pour cela ^^

Link to comment
Share on other sites

Bonjour,

le même bug se présente pour moi.

je suis en presta 1.6.0.9 et j'ai voulu faire un update vers 1.6.0.11 qui n'a pas marché (?).

Bref, j'ai également cette erreur :

Notice: Constant _PS_PRICE_DISPLAY_PRECISION_ already defined in /home/euromatik/www/config/config.inc.php on line 115

qui s'affiche et je ne comprend pas bien pourquoi...

j'ai éssayé d'aller jeter un oeil dans le fichier spécifié mais sans succès. Quelqu'un a t'il découvert un début de quelque chose là dessus?

Pouvez-vous regarder si votre fichier /config/defines.inc.php contient cette ligne svp ?

define('_PS_PRICE_DISPLAY_PRECISION_', 2);
Link to comment
Share on other sites

ben voilà... mise à jour foireuse.

 

Veuillez remplacer le contenu de ce fichier par ceci

<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2015 PrestaShop SA
*  @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/

/* Debug only */
if (!defined('_PS_MODE_DEV_'))
define('_PS_MODE_DEV_', false);
/* Compatibility warning */
define('_PS_DISPLAY_COMPATIBILITY_WARNING_', false);
if (_PS_MODE_DEV_ === true)
{
	@ini_set('display_errors', 'on');
	@error_reporting(E_ALL | E_STRICT);
	define('_PS_DEBUG_SQL_', true);
}
else
{
	@ini_set('display_errors', 'off');
	define('_PS_DEBUG_SQL_', false);
}

define('_PS_DEBUG_PROFILING_', false);
define('_PS_MODE_DEMO_', false);

$currentDir = dirname(__FILE__);

if (!defined('PHP_VERSION_ID'))
{
    $version = explode('.', PHP_VERSION);
    define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}

if (!defined('_PS_VERSION_') && (getenv('_PS_VERSION_') || getenv('REDIRECT__PS_VERSION_')))
	define('_PS_VERSION_', getenv('_PS_VERSION_') ? getenv('_PS_VERSION_') : getenv('REDIRECT__PS_VERSION_'));

if (!defined('_PS_HOST_MODE_') && (getenv('_PS_HOST_MODE_') || getenv('REDIRECT__PS_HOST_MODE_')))
	define('_PS_HOST_MODE_', getenv('_PS_HOST_MODE_') ? getenv('_PS_HOST_MODE_') : getenv('REDIRECT__PS_HOST_MODE_'));

if (!defined('_PS_ROOT_DIR_') && (getenv('_PS_ROOT_DIR_') || getenv('REDIRECT__PS_ROOT_DIR_')))
	define('_PS_ROOT_DIR_', getenv('_PS_ROOT_DIR_') ? getenv('_PS_ROOT_DIR_') : getenv('REDIRECT__PS_ROOT_DIR_'));

/* Directories */
if (!defined('_PS_ROOT_DIR_'))
	define('_PS_ROOT_DIR_', realpath($currentDir.'/..'));

if (!defined('_PS_CORE_DIR_'))
	define('_PS_CORE_DIR_', realpath($currentDir.'/..'));

define('_PS_ALL_THEMES_DIR_',        _PS_ROOT_DIR_.'/themes/');
/* BO THEMES */
if (defined('_PS_ADMIN_DIR_'))
	define('_PS_BO_ALL_THEMES_DIR_', _PS_ADMIN_DIR_.'/themes/');
define('_PS_CACHE_DIR_',			 _PS_ROOT_DIR_.'/cache/');
define('_PS_CONFIG_DIR_',			 _PS_CORE_DIR_.'/config/');
define('_PS_CLASS_DIR_',             _PS_CORE_DIR_.'/classes/');
define('_PS_DOWNLOAD_DIR_',          _PS_ROOT_DIR_.'/download/');
define('_PS_MAIL_DIR_',              _PS_CORE_DIR_.'/mails/');
if (!defined('_PS_MODULE_DIR_'))
	define('_PS_MODULE_DIR_',        _PS_ROOT_DIR_.'/modules/');
if (!defined('_PS_OVERRIDE_DIR_'))
    define('_PS_OVERRIDE_DIR_',          _PS_ROOT_DIR_.'/override/');
define('_PS_PDF_DIR_',               _PS_CORE_DIR_.'/pdf/');
define('_PS_TRANSLATIONS_DIR_',      _PS_ROOT_DIR_.'/translations/');
define('_PS_UPLOAD_DIR_',			 _PS_ROOT_DIR_.'/upload/');

define('_PS_CONTROLLER_DIR_',        _PS_CORE_DIR_.'/controllers/');
define('_PS_ADMIN_CONTROLLER_DIR_',  _PS_CORE_DIR_.'/controllers/admin/');
define('_PS_FRONT_CONTROLLER_DIR_',  _PS_CORE_DIR_.'/controllers/front/');

define('_PS_TOOL_DIR_',              _PS_CORE_DIR_.'/tools/');
define('_PS_GEOIP_DIR_',             _PS_TOOL_DIR_.'geoip/');
define('_PS_PEAR_XML_PARSER_PATH_',  _PS_TOOL_DIR_.'pear_xml_parser/');
define('_PS_SWIFT_DIR_',             _PS_TOOL_DIR_.'swift/');
define('_PS_TAASC_PATH_',            _PS_TOOL_DIR_.'taasc/');
define('_PS_TCPDF_PATH_',            _PS_TOOL_DIR_.'tcpdf/');

define('_PS_IMG_DIR_',               _PS_ROOT_DIR_.'/img/');

if (!defined('_PS_HOST_MODE_'))
	define('_PS_CORE_IMG_DIR_',      _PS_CORE_DIR_.'/img/');
else
	define('_PS_CORE_IMG_DIR_',      _PS_ROOT_DIR_.'/img/');

define('_PS_CAT_IMG_DIR_',           _PS_IMG_DIR_.'c/');
define('_PS_COL_IMG_DIR_',			 _PS_IMG_DIR_.'co/');
define('_PS_EMPLOYEE_IMG_DIR_',      _PS_IMG_DIR_.'e/');
define('_PS_GENDERS_DIR_',           _PS_IMG_DIR_.'genders/');
define('_PS_LANG_IMG_DIR_',          _PS_IMG_DIR_.'l/');
define('_PS_MANU_IMG_DIR_',          _PS_IMG_DIR_.'m/');
define('_PS_ORDER_STATE_IMG_DIR_',   _PS_IMG_DIR_.'os/');
define('_PS_PROD_IMG_DIR_',          _PS_IMG_DIR_.'p/');
define('_PS_SCENE_IMG_DIR_',         _PS_IMG_DIR_.'scenes/');
define('_PS_SCENE_THUMB_IMG_DIR_',   _PS_IMG_DIR_.'scenes/thumbs/');
define('_PS_SHIP_IMG_DIR_',          _PS_IMG_DIR_.'s/');
define('_PS_STORE_IMG_DIR_',		 _PS_IMG_DIR_.'st/');
define('_PS_SUPP_IMG_DIR_',          _PS_IMG_DIR_.'su/');
define('_PS_TMP_IMG_DIR_',           _PS_IMG_DIR_.'tmp/');

/* settings php */
define('_PS_TRANS_PATTERN_',            '(.*[^\\\\])');
define('_PS_MIN_TIME_GENERATE_PASSWD_', '360');
if (!defined('_PS_MAGIC_QUOTES_GPC_'))
	define('_PS_MAGIC_QUOTES_GPC_',         get_magic_quotes_gpc());

define('_CAN_LOAD_FILES_', 1);

/* Order statuses
Order statuses have been moved into config.inc.php file for backward compatibility reasons */

/* Tax behavior */
define('PS_PRODUCT_TAX', 0);
define('PS_STATE_TAX', 1);
define('PS_BOTH_TAX', 2);

define('PS_TAX_EXC', 1);
define('PS_TAX_INC', 0);

define('PS_ORDER_PROCESS_STANDARD', 0);
define('PS_ORDER_PROCESS_OPC', 1);

define('PS_ROUND_UP', 0);
define('PS_ROUND_DOWN', 1);
define('PS_ROUND_HALF_UP', 2);
define('PS_ROUND_HALF_DOWN', 3);
define('PS_ROUND_HALF_EVEN', 4);
define('PS_ROUND_HALF_ODD', 5);

/* Backward compatibility */
define('PS_ROUND_HALF', PS_ROUND_HALF_UP);

/* Registration behavior */
define('PS_REGISTRATION_PROCESS_STANDARD', 0);
define('PS_REGISTRATION_PROCESS_AIO', 1);

/* Carrier::getCarriers() filter */
// these defines are DEPRECATED since 1.4.5 version
define('PS_CARRIERS_ONLY', 1);
define('CARRIERS_MODULE', 2);
define('CARRIERS_MODULE_NEED_RANGE', 3);
define('PS_CARRIERS_AND_CARRIER_MODULES_NEED_RANGE', 4);
define('ALL_CARRIERS', 5);

/* SQL Replication management */
define('_PS_USE_SQL_SLAVE_', 0);

/* PS Technical configuration */
define('_PS_ADMIN_PROFILE_', 1);

/* Stock Movement */
define('_STOCK_MOVEMENT_ORDER_REASON_', 3);
define('_STOCK_MOVEMENT_MISSING_REASON_', 4);

/**
 * @deprecated 1.5.0.1
 * @see Configuration::get('PS_CUSTOMER_GROUP')
 */
define('_PS_DEFAULT_CUSTOMER_GROUP_', 3);

define('_PS_CACHEFS_DIRECTORY_', _PS_ROOT_DIR_.'/cache/cachefs/');

/* Geolocation */
define('_PS_GEOLOCATION_NO_CATALOG_', 0);
define('_PS_GEOLOCATION_NO_ORDER_', 1);

define('MIN_PASSWD_LENGTH', 8);

define('_PS_SMARTY_NO_COMPILE_', 0);
define('_PS_SMARTY_CHECK_COMPILE_', 1);
define('_PS_SMARTY_FORCE_COMPILE_', 2);

define('_PS_SMARTY_CONSOLE_CLOSE_', 0);
define('_PS_SMARTY_CONSOLE_OPEN_BY_URL_', 1);
define('_PS_SMARTY_CONSOLE_OPEN_', 2);

define('_PS_JQUERY_VERSION_', '1.11.0');

Link to comment
Share on other sites

Et bien dans votre version précédente la constante _PS_PRICE_DISPLAY_PRECISION_ était définie dans ce fichier(defines.inc.php), ce qui n'est plus le cas dans la 1.6.

 

Lors de votre mise à jour, ce fichier aurait dû être écrasé par le nouveau, ce qui n'a pas été le cas.

 

Du coup la définition de cette constante dans l'autre fichier (config.inc.php) entrainait un avertissement disant que cette constante est déjà définie.

Link to comment
Share on other sites

Ok...

donc si je me base la dessus,

est il possible que ce fichier ne soit pas le seul ayant ce genre de "défaut"?

comment puis-je pister ces fichier "défectueux"?

merci encore pour votre disponibilité et votre réactivité.

La communauté prestashop est vraiment soudée et ça fait plaisir à voir

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

longue...pas vraiment... mais je ne sais pas si ça peut avoir son importance  

 

Fichiers modifiés (7)

  • classes/Configuration.php
  • classes/Link.php
  • classes/ObjectModel.php
  • classes/Tools.php
  • config/config.inc.php
  • config/defines.inc.php
  • js/tinymce.inc.js

edit: ça me fait un peu peur de voir les fichiers ObjectModel.php, Tools.php, Configuration.php et config.inc.php dans cette liste mais a vrai dire je ne sais pas dans quelle mesure ils sont "erronés" par rapport a ma version de prestashop.

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

En théorie vous devriez pouvoir remplacer tous ces fichiers.

Si vous avez des overrides sur ces classes, installés par des modules, ils risquent de ne plus fonctionner (voir si des maj existent)

 

Ce qui est curieux c'est que je vous ai donné le contenu de  /config/defines.inc.php depuis le dernier zip officiel (1.6.0.11), il ne devrait donc pas apparaitre ici...

Link to comment
Share on other sites

Je suis sous presta 1.6.0.9

c'est probablement pour cette raison qu'il trouve que le fichier est différent de ce qu'il devrait être...

Donc! si je comprend bien, j'ai "juste" à récupérer des fichiers "propres" dans une nouvelle install de presta et remplacer mes fichiers "erronés" par ceux-ci.

 

(pas vraiment envie de refaire une install après tout le taff que j'ai déjà fait sur ce site ^^)

Link to comment
Share on other sites

Une mise à jour vers la version 1.6.0.11 m'a été proposée par le module 1-Click Upgrade il y a quelques jours, mais je n'ai pas testé les pages publiques immédiatement.

 

Euh vous dites avoir fait la mise à jour et vous êtes toujours en 1.6.0.9 ???

 

Pour les fichiers, pas besoin de refaire une install, juste récupérer les fichier dans le zip correspondant (https://www.prestashop.com/fr/versions-developpeurs en bas de page)

Link to comment
Share on other sites

Le prix n'est pas modifié lors du changement de quantités sur les thèmes basiques.

Il faut rajouter une fonction js pour cela ^^

Merci pour cette précision.

 

Saurais-tu me donner une piste pour ajouter cette fonction? En effet je me débrouille bien en js et pourrais y parvenir, mais si quelqu'un l'a déjà fait et a partagé sa solution, je préfèrerais ne pas tout ré-inventer ;)

Link to comment
Share on other sites

non ce post n'est pas de moi... ^^ 

cependant j'ai tenté de faire la mise a jour vers 1.6.0.11 mais cela n'a pas marché...

celle-ci s'est interrompue en plein milieu et m'a fait planter tout le site (j'ai beaucoup pleuré ^^)

j'ai donc repris une sauvegarde du site que j'avais mais qui date d'un mois auparavant (ça m'apprendra a faire des sauvegardes plus régulièrement...)

donc maintenant je corrige toutes les erreurs susceptibles de se présenter et je passerais peut être en 1.6.0.11 plus tard (un peu frustré que cela n'ait pas fonctionné tout de même)

Link to comment
Share on other sites

il faut le mettre à plusieurs endroits.

Au moment du changement de combinaison

Au moment du changement de quantité.

Ouvrez le fichier product.js de votre thème (le contenu peut varier suivant les versions)

 

Trouvez le bloc function findCombination(firstTime) et Commentez la 3ème ligne

//$('#quantity_wanted').val(1);

Dans le bloc function updatedisplay() modifiez la ligne

our_price = formatCurrency(productPriceDisplay, currencyFormat, currencySign, currencyBlank);

par

our_price = formatCurrency(productPriceDisplay*$('#quantity_wanted').val(), currencyFormat, currencySign, currencyBlank);

Dans le bloc

//To do after loading HTML

$(document).ready(function() repérez les 2 fonctions liées au + et - de l'input Quantity ($('.plus_op').click(function() et $('.minus_op').click(function() )
et rajoutez à chacune avant le return false;
updateDisplay();

Enfin, si le client tape lui-même la quantité au lieu d'utiliser les boutons + et - ajoutez dans product.tpl, dans le bloc <!-- quantity wanted -->

 la même fonction pour l'input:

<input type="text" name="qty" id="quantity_wanted" class="text" value="{if isset($quantityBackup)}{$quantityBackup|intval}{else}{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}{/if}" size="2" maxlength="3" {if $product->minimal_quantity > 1}onkeyup="checkMinimalQuantity({$product->minimal_quantity});"{/if}onkeyup="updateDisplay();" />
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...