Page 1 sur 1
traitement variable avec soit des chiffres soit des lettres
Posté : 01 oct. 2014, 08:15
par phonidal
Bonjour,
Voilà quelques jours que je galère sur ce problème...
voici le code que j'ai fait :
Code : Tout sélectionner
if($block->quantity == 'N')
{$block->quantity = 0;}
else {
if(is_numeric ($block->quantity))
{if ($block->quantity < 3)
{$block->quantity = 0;
} elseif ($block->quantity < 100)
{$block->quantity = $block->quantity;
} else {$block->quantity = 100;}
} else {$block->quantity = 100;}
}
$block->quantity peut avoir comme valeur soit des nombres entre 0 et 1000 soit N soit O (la lettre)
pour les nombres, cela semble fonctionner, par contre pour le N ou le O ça merdouille...
pour le N il faut que $block->quantity prenne la valeur 0
pour le O il faut que $block->quantity prenne la valeur 100
Si quelqu'un peut me dépatouiller de cette histoire....
MErci !!
Re: traitement variable avec soit des chiffres soit des lett
Posté : 01 oct. 2014, 09:03
par sirakawa
essaie ça:
if($block->quantity == 'N') //bq vaut N
{
$block->quantity = 0;
}
else
{
if ($block->quantity == 'O')// bq ne vaut pas N et vaut O
{
$block->quantity = 100;
}
else //bq ne vaut ni O ni N
{
if(is_numeric ($block->quantity))//baq est un nombre
{
if ($block->quantity < 3)
{
$block->quantity = 0;
}
elseif ($block->quantity < 100)
{
$block->quantity = $block->quantity;
}
else
{
$block->quantity = 100;
}
}
}
}
Re: traitement variable avec soit des chiffres soit des lett
Posté : 01 oct. 2014, 09:50
par Invité
Je viens de tester.. hélas pour le O j'ai eu un 0
JE récupère en fait cette valeur dans un flux xml que voici (si ça peut aider) :
Code : Tout sélectionner
<stocks><stock><product use-external-reference="1">633848</product><mode>set</mode><quantity>5</quantity></stock><stock><product use-external-reference="1">868787</product><mode>set</mode><quantity>O</quantity></stock><stock><product use-external-reference="1">675251</product><mode>set</mode><quantity>56</quantity></stock><stock><product use-external-reference="1">633625</product><mode>set</mode><quantity>N</quantity></stock><stock><product use-external-reference="1">868620</product><mode>set</mode><quantity>3</quantity></stock></stocks>
et mon fichier complet php :
Code : Tout sélectionner
<?php
require_once(_PS_MODULE_DIR_.'advancedimporter/classes/objectimporterabstract.php');
require_once(_PS_MODULE_DIR_.'advancedimporter/classes/ean13.php');
require_once(_PS_MODULE_DIR_.'advancedimporter/classes/reference.php');
require_once(_PS_MODULE_DIR_.'advancedimporter/classes/externalreference.php');
class StockImporter extends ObjectImporterAbstract
{
/**
* Import products
*/
public static function execute($block)
{
if (isset($block->product_external_reference))
{
try {
$external_reference = ExternalReference::getByExternalReference((string)$block->product_external_reference, 'Product');
$block->product = $external_reference->id_object;
} catch (ExternalReferenceException $e) {
throw new Exception("External Reference {$block->product_external_reference} for a product is unknow");
}
}
else if ($block->ean13)
{
$ean = new AdvancedImporterEan13($block->ean13);
$block->product = $ean->id_product;
if ($ean->id_product_attribute)
$block->combination = $ean->id_product_attribute;
}
else if ($block->reference)
{
$reference = new AdvancedImporterReference($block->reference);
$block->product = $reference->id_product;
if ($reference->id_product_attribute)
$block->combination = $reference->id_product_attribute;
}
if (isset($block->combination_external_reference))
{
try {
$external_reference = ExternalReference::getByExternalReference((string)$block->combination_external_reference, 'Combination');
$block->combination = $external_reference->id_object;
} catch (ExternalReferenceException $e) {
throw new Exception("External Reference {$block->combination_external_reference} for a combination is unknow");
}
}
// $block->quantity = N;
if($block->quantity == 'N') //bq vaut N
{
$block->quantity = 0;
}
else
{
if ($block->quantity == 'O')// bq ne vaut pas N et vaut O
{
$block->quantity = 100;
}
else //bq ne vaut ni O ni N
{
if(is_numeric ($block->quantity))//baq est un nombre
{
if ($block->quantity < 3)
{
$block->quantity = 0;
}
elseif ($block->quantity < 100)
{
$block->quantity = $block->quantity;
}
else
{
$block->quantity = 100;
}
}
}
}
//echo $block->quantity;
if ($block->mode == 'set')
StockAvailable::setQuantity((int)(string)$block->product, (int)(string)$block->combination, (int)(string)$block->quantity, self::getShopList($block));
else
StockAvailable::updateQuantity((int)(string)$block->product, (int)(string)$block->combination, (int)(string)$block->quantity, self::getShopList($block));
Log::sys(self::$id_advancedimporter_block, "Quantity of product {$block->product}({$block->combination}) updated");
}
}
Re: traitement variable avec soit des chiffres soit des lett
Posté : 01 oct. 2014, 10:57
par Ryle
Suggestion :
if (is_numeric($block->quantity)) { // si numérique on test <3 et >100, dans les autres cas le nombre ne change pas
if ($block->quantity < 3)
$block->quantity = 0;
if ($block->quantity > 100)
$block->quantity = 100;
}
else { // si non numérique on test si "O" ou "N"
if ($block->quantity == 'N') //bq vaut N
$block->quantity = 0;
elseif ($block->quantity == 'O') //bq vaut O
$block->quantity = 100;
else // toute autre valeur, gestion de l'erreur avec une valeur par défaut ?
$block->quantity = 0;
}
Re: traitement variable avec soit des chiffres soit des lett
Posté : 01 oct. 2014, 12:18
par sirakawa
Il faut tester o/n et O/N
Je iens de vérifier et ça fonctionne.
en cas d'erreur, il faudrait ajouter AVANT tous les ifs:
var_dump($clock->quantity); die();
Re: traitement variable avec soit des chiffres soit des lett
Posté : 01 oct. 2014, 14:11
par Invité
@ Ryle
J'ai fait un test, et le O me retourne toujours un 0
@ sirakawa
que veux tu dire par "Il faut tester o/n et O/N" ? rajouter de ifs avec 0 et n ?
Re: traitement variable avec soit des chiffres soit des lett
Posté : 01 oct. 2014, 14:30
par sirakawa
Je persiste à dire que cette solution fonctionne:
<?PHP
$block = "n";
if(strtoupper($block) == 'N') //bq converti en majuscules vaut N
{
$block = 0;
}
else
{
if (strtoupper($block) == 'O')// bq converti en majuscules ne vaut pas N et vaut O
{
$block = 101;
}
else //bq converti en majuscules ne vaut ni O ni N
{
if(is_numeric ($block))//bq est un nombre
{
if ($block < 3)
{
$block = 0;
}
elseif ($block < 100)
{
$block = $block;
}
else
{
$block = 100;
}
}
}
}
print "$block ";
?>
Re: traitement variable avec soit des chiffres soit des lett
Posté : 01 oct. 2014, 14:57
par Invité
ça y est j'ai trouvé !!!!
Merci les gars de votre aide..
en fait j'ai dans le fichier qui traite l'import du flux:
$result['quantity'] = (float)(string)$block->quantity; donc mes O et N disparraissaient !!
et moi je travaillé sur le fichier qui exporte dans la table.... pfff... je suis novice en même temps, j'apprends sur le tas !!
Merci, merci !