cs_fabiano13
Messages postés262Date d'inscriptionmardi 26 février 2002StatutMembreDernière intervention27 février 2012
-
3 avril 2006 à 14:38
cs_fabiano13
Messages postés262Date d'inscriptionmardi 26 février 2002StatutMembreDernière intervention27 février 2012
-
6 avril 2006 à 18:29
Je bloc, pouvez-vous m'aider !
Grâce à l'aide de DB77, j'ai le script "1er EXEMPLE" qui permet de reconstruire un tableau avec toutes les combinaisons possibles de plusieurs chaines.
Je voudrai l'adapter ainsi : (voir le script 2eme exemple)
J'aurai qu'une seule chaine contenant toutes les options.
La dificulté c'est que je ne connais pas par avance le nom, ni le nombre de produits choisies et ni le nombres d'options choisies
Elles seront imbriquées de la manière suivantes :
var sRequette = "'Domicile'|'XXL'^'XL'^'L'^'M'^'S'|'Oui'^'Non'#'Extérieur'|'XXL'^'M'^'S'|'Oui'^'Non'"
1) le " # " est le séparateur des produits
2) le " | " est le séparateur des options
3) le " ^ " est le séparateur des choix des options
Pour cette exemple on aurai se résultat :
1) Domicile => XXL - XL - L - M - S => Oui - Non
2) Extérieur => XXL - M - S => Oui - Non
Le résultat final serai :
1er Tableau :
Domicile - XXL - Oui
Domicile - XXL - NON
Domicile - XL - Oui
Domicile - XL - NON
Domicile - L - Oui
Domicile - L - NON
Domicile - M - Oui
Domicile - M - NON
Domicile - S - Oui
Domicile - S - NON
2emeTableau :
Extérieur - XXL - Oui
Extérieur - XXL - NON
Extérieur - M - Oui
Extérieur - M - NON
Extérieur - S - Oui
Extérieur - S - NON
L'idée c'est qu'en amont je construis dynamiquement les objets (new array) et les instructions (boucle du type for) qui seront ensuite utilisées à construire mes tableaux.
J'ai une erreur du type "variable indéfini" !
Pouvez vous m'aider ?
Si non, est qu'il y a une autre méthode que celle-ci ?
Je vous en remercie par avance.
Cordialement,
Fabiano13
//////////////////////////////////////////// 1er EXEMPLE ////////////////////////////////////////////
<script language="javascript">
var Tag = "";
c1=new Array("Domicile");
c2=new Array("XXL","XL","L","M","S");
c3=new Array("Oui","Non");
Tag = "\"
for(i=0;i<c1.length;i++){
for(j=0;j<c2.length;j++){
for(k=0;k<c3.length;k++){
Tag += \"----
" + c1[i] + ", " + c2[j] + ", " + c3[k] + ", \"
}}}
Tag += "
"
</script>
<script>
document.getElementById("ici").innerHTML = Tag
</script>
"Domicile;XXL~XL~L~M~S;Oui~Non|Domicile;XXL~M~S;Oui~Non"
</html>
//////////////////////////////////////////// Fin 1er EXEMPLE ////////////////////////////////////////////
//////////////////////////////////////////// 2eme EXEMPLE ////////////////////////////////////////////
<script language="javascript">
var Tag = "";
var sRequette = "'Domicile'|'XXL'^'XL'^'L'^'M'^'S'|'Oui'^'Non'#'Extérieur'|'XXL'^'M'^'S'|'Oui'^'Non'"
var sReqSuite = sRequette.split("#")
for(i=0;i<sReqSuite.length;i++){
eval("var NvArray" + i + " = sReqSuite[" + i + "].split("|")")
}
var NbRequette = sReqSuite.length
QZ = new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
sD = 0;
sForDepart = "";
for(w=0;w<NbRequette;w++){
var NbSubReq = eval("NvArray" + w + ".length")
for(d=0;d<NbSubReq;d++){
sg = eval("NvArray" + w + "["+ d +"].split("^")")
eval("c" + sD + "= new Array(" + sg + ")") // Objets du type new array
if (d==0){
eval("sForDepart" + w + "= " for(" + QZ[sD] + "=0;" + QZ[sD] + "<c" + sD + ".length;" + QZ[sD] + "++){ "") // 1er chaine instruction boucle du type for
eval("sForFin" + w + " = "}" ") //1er fin de chaine boucle
eval("sTDTag" + w + " = "<td>"+" + "c" + sD + "[" + QZ[sD] + "]" + "+"</td>"") // 1er chaine éléments c0[a] + c1[b] + c2[c] (les lettres a,b,c... sont les variables de la boucle)
}else{
eval("sForDepart" + w + "+= " for(" + QZ[sD] + "=0;" + QZ[sD] + "<c" + sD + ".length;" + QZ[sD] + "++){ "") // Suite chaines instructions boucle du type for
eval("sForFin" + w + " += "}" ") //Suite et fin chaine boucle
eval("sTDTag" + w + " += "<td>"+" + "c" + sD + "[" + QZ[sD] + "]" + "+"</td>"") // suite chaine éléments c0[a] + c1[b] + c2[c]
}
sD++
}
}
for(w=0;w<NbRequette;w++){
var NbSubReq = eval("NvArray" + w + ".length")
Tag += "\"
eval(eval(\"sForDepart\" + w) + \" Tag += \\"----
\" + eval(\"sTDTag\" + w) + \"\\" \" + eval(\"sForFin\" + w) ) // ici on récupère les chaines boucles + les chaines éléments avec les variables boucles
Tag += "
"
}
</script>
<script>
document.getElementById("ici").innerHTML = Tag
</script>
//////////////////////////////////////////// Fin 2eme EXEMPLE ////////////////////////////////////////////
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 janvier 201117 5 avril 2006 à 07:53
Bonjour...
Après avoir planché un peu sur ton problème je te livre un script, orienté objet mais pas trop, j'espère qu'il te satisfera...
C'est parti...
<SCRIPT language= "javascript">
var sRequette = new String( "'Domicile'|'XXL'^'XL'^'L'^'M'^'S'|'Oui'^'Non'#'Extérieur'|'XXL'^'M'^'S'|'Oui'^'Non'");
var Tab = new Array(); // Tableau des Résulats
var Sep = new Array('#', '|', '^'); // Liste Séparateurs
//-----------------------
function Reference( txt_){
var Ind;
var Pos;
var i = 1;
//-- On garde la ligne entière
this.Ligne = new String(txt_);
//-- Recherche Position début des Champs
this.PosSep = new Array( 0, -1, -1);
while(( Pos = this.Ligne.indexOf( Sep[1], Ind)) > -1 ){
Ind = Pos +1;
this.PosSep[i ++] = Ind;
}
//-- On affecte le produit
if( this.PosSep[1] > -1)
this.Produit = this.Ligne.substring( 0, this.PosSep[1]-1);
this.Option = new Array();
this.Choix = new Array();
//-- Les fonctions de récupération
this.RecupOption = RecupOption;
this.RecupChoix = RecupChoix;
}
//--------------------
function RecupOption(){
var szTmp;
var i = 0;
var Ind = 0;
var Pos = 0;
with( this){
szTmp = Ligne.substring( PosSep[1], PosSep[2]-1);
szTmp += Sep[2]; // pour prendre en compte le dernier
//--------------------
function RecupChoix(){
var szTmp;
var i = 0;
var Ind = 0;
var Pos = 0;
with( this){
szTmp = Ligne.substring( PosSep[2], Ligne.length);
szTmp += Sep[2]; // pour prendre en compte le dernier
//---------------------------
function DecodRequette( txt_){
var i;
var Ind = 0; // Index recherche Séparateur
var Pos = 0; // Index Position tableau de résultat
txt_ += Sep[0]; // pour être sur de prendre en compte le dernier
//-- Récupération des Produits
while(( PosSep = txt_.indexOf( Sep[0], Ind)) > -1 ){
Tab[Pos] = new Reference( txt_.substring( Ind, PosSep));
Tab[Pos].RecupOption();
Tab[Pos].RecupChoix();
Pos++;
Ind = PosSep +1;
}
//-- Affichage Html " Chaine Traitée " +txt_ +'
';
Html += ''
Html += '----
';
Html += 'Produit, ';
Html += 'Option, ';
Html += 'Choix, ';
for( i =0; i <Tab.length; i++){
for( j =0; j <Tab[i].Option.length; j++){
for( k =0; k <Tab[i].Choix.length; k++){
Html += '----
';
Html += '' + Tab[i].Produit + ', ';
Html += '' + Tab[i].Option[j] + ', ';
Html += '' + Tab[i].Choix [k] + ', ';
Html += '';
}
}
}
Html += '
';
document.write( Html);
}
//===================//
// Appel Fonction //
//===================//
//-- Suppression des '
var Chaine = sRequette.replace(/'/gi, "");
DecodRequette( Chaine);
cs_fabiano13
Messages postés262Date d'inscriptionmardi 26 février 2002StatutMembreDernière intervention27 février 2012 5 avril 2006 à 09:37
Bonjour PetoleTeam,
Avant tout je te remercie de m'avoir aidé sur ce problème.
J'ai encore une petite question. J'ai fait un script qui marche sans problème, mais je veux quand même ton avis. Car ta méthode d'application, je la préfère à la mienne.
Voila je t'explique;
Selon les cas de figure, le nombre d'option change en fonction des fiches produits !
Mais c'est l'utilisateur de l'application qui va mettre les options et les choix d'options !
Si tu m'as compris, alors tu peux comprendre la suite.
Donc, pour cette exemple les options sont : Type | Taille | Flocage
La chaine qui va être traité est :
var sRequette = new String( "'Domicile'|'XXL'^'XL'^'L'^'M'^'S'|'Oui'^'Non'#'Extérieur'|'XXL'^'M'^'S'|'Oui'^'Non'")
Type,
Taille,
Flocage,
----
Domicile,
XXL,
Oui,
----
Domicile,
XXL,
Non,
----
Domicile,
XXL,
Clo,
----
Domicile,
XL,
Oui,
----
Domicile,
XL,
Non,
----
Domicile,
XL,
Clo,
----
Domicile,
L,
Oui,
----
Domicile,
L,
Non
En la décomposant on aura donc :
1er produit :
Type : Domicile
Taille : XXL , XL , L , M , S
Flocage : Oui , Non
2eme produit : Type : Extérieur
Taille : XXL , M , S
Flocage : Oui , Non
Jusqu'ici tu devrais me comprendre !
Mais dans d'autre cas de figure tu pourrais non plus avoir 3 options (Type | Taille | Flocage) mais (Type | Flocage) ou (Type) ou même (Type | Taille | flocage | couleur | Matière...). Les Options peuvent varier en fonction du produit. Ici on parle de maillot de Foot, mais s'ils veulent vendre des meubles, il y aurai d'autre critère "Options" ! Tout ceci pour déterminer les stocks et les références. Plus il y aura de critère "Options" plus la chaine sera longue, je sais !!! Mais pour l'instant ça ne leur dérange pas de gérer la chose ainsi.
4eme exemple : la chaine a traiter serai donc :
var sRequette = new String( "'Domicile'|'XXL'^'XL'^'L''Oui'^'Non'|'Rouge'^''Vert'^'Bleu'|'Coton'^''Acrylique'#'Extérieur'|'XXL'^'M'^'S'|'Oui'^'Non'")
Type : Domicile
Taille : XXL , XL , L , M , S
Flocage : Oui , Non
Couleur : Rouge , Vert , Bleu
Matière : Coton , Acrylique
Type,
Taille,
Flocage,
Couleur,
Matière,
----
Domicile,
XXL,
Oui,
Rouge,
Coton,
----
Domicile,
XXL,
Oui,
Rouge,
Acrylique,
----
Domicile,
XXL,
Oui,
Vert,
Coton,
----
Domicile,
XXL,
Oui,
Vert,
Acrylique,
----
Domicile,
XXL,
Oui,
Bleu,
Coton,
----
Domicile,
XXL,
Oui,
Bleu,
Acrylique,
----
Domicile,
XXL,
Non,
Rouge,
Coton,
----
Domicile,
XXL,
Non,
Rouge,
Acrylique,
----
Domicile,
XXL,
Non,
Vert,
Coton,
----
Domicile,
XXL,
Non,
Vert,
Acrylique,
----
Domicile,
XXL,
Non,
Bleu,
Coton,
----
Domicile,
XXL,
Non,
Bleu,
Acrylique,
----
Domicile,
XL,
Oui,
Rouge,
Coton,
----
Domicile,
XL,
Oui,
Rouge,
Acrylique,
----
Domicile,
XL,
Oui,
Vert,
Coton,
----
Domicile,
XL,
Oui,
Vert,
Acrylique
Voci mon script qui le gère. Il n'est pas très beau, mais il marche.
Ce que je voudrai savoir si ton script peut être adapter pour faire la même chose que celui-ci ?
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 janvier 201117 6 avril 2006 à 17:05
Bonjour...
Ce n'est pas très pointu mais voila le résultats d'une rapide adaptation...
En lisant ce qui suit te verra rapidement les modifications à faire si tu as de champs supplémentaire...
La fonction d'affichage est à Ch..r mais bon je reste perçuadé que tu devrait t'en sortir...
//-----------------------
function Reference( txt_){
var Ind;
var Pos;
var i = 1;
//-- On garde la ligne entière
this.Ligne = new String(txt_);
this.Ligne += Sep[1]; // Pour prise en compte final
//-- Recherche Position début des Champs
this.PosSep = new Array( 0, -1, -1, -1, -1, -1, -1);
//-- On affecte le produit
if( this.PosSep[1] > -1)
this.Produit = this.Ligne.substring( 0, this.PosSep[1]-1);
this.Champ_1 = new Array();
this.Champ_2 = new Array();
this.Champ_3 = new Array();
this.Champ_4 = new Array();
this.Champ_5 = new Array();
//-- La fonction de récupération
this.RecupAll = RecupAll;
}
//------------------------------------
// Fonction appelée par RecupAll
//------------------------------------
function RecupChamp( txt_, deb_, fin_){ var T_Result = new Array();
var szTmp;
var i = 0;
var Ind = 0;
var Pos = 0;
fin_ --; // pas de prise en compte du Séparateur de fin
//-- Quitte si rien à traiter
if( fin_ < deb_) return( null);
szTmp = txt_.substring( deb_, fin_);
szTmp += Sep[2]; // pour prendre en compte le dernier
//--------------------------------
// Fonction de l'Objet Reference
//--------------------------------
function RecupAll(){
with( this){
Champ_1 = RecupChamp( Ligne, PosSep[1], PosSep[2]);
Champ_2 = RecupChamp( Ligne, PosSep[2], PosSep[3]);
Champ_3 = RecupChamp( Ligne, PosSep[3], PosSep[4]);
Champ_4 = RecupChamp( Ligne, PosSep[4], PosSep[5]);
Champ_5 = RecupChamp( Ligne, PosSep[5], PosSep[6]);
}
}
//---------------------------
function DecodRequette( txt_){
var i;
var Ind = 0; // Index recherche Séparateur
var Pos = 0; // Index Position tableau de résultat
var PosSep;
var Chaine = new Array();
txt_ += Sep[0]; // pour être sur de prendre en compte le dernier
//-- Récupération des Produits
while(( PosSep = txt_.indexOf( Sep[0], Ind)) > -1 ){
Tab[Pos] = new Reference( txt_.substring( Ind, PosSep));
Tab[Pos].RecupAll();
Pos++;
Ind = PosSep +1;
}
//-- La il y aurait matière a optimiser sérieusement
//-- Affichage
for( var i in Tab){ Html " Chaine Traitée " +Tab[i].Ligne +'
';
Html += '';
for( var j in Tab[i].Champ_1){
Ind = 1;
Chaine[Ind] = Chaine[Ind -1] + '' + Tab[i].Champ_1[j] + ', ';
for( var k in Tab[i].Champ_2){
Ind = 2;
Chaine[Ind] = Chaine[Ind -1] +'' + Tab[i].Champ_2[k] + ', ';
for( var m in Tab[i].Champ_3){
Ind = 3;
Chaine[Ind] = Chaine[Ind -1] +'' + Tab[i].Champ_3[m] + ', ';
for( var n in Tab[i].Champ_4){
Ind = 4;
Chaine[Ind] = Chaine[Ind -1] +'' + Tab[i].Champ_4[n] + ', ';
for( var p in Tab[i].Champ_5){
Ind = 5;
Chaine[Ind] = Chaine[Ind -1] +'' + Tab[i].Champ_5[p] + ', ';
//-- Avec du récursif ca doit être jouable, mais c'est pas mon Fort...
if( Ind == 5)
Html += Chaine[Ind] +'';
}
if( Ind == 4)
Html += Chaine[Ind] +'';
}
if( Ind == 3)
Html += Chaine[Ind] +'';
}
if( Ind == 2)
Html += Chaine[Ind] +'';
}
if( Ind == 1)
Html += Chaine[Ind] +'';
}
if( Ind == 0)
Html += Chaine[Ind] +'';
Html += '
';
document.write( Html);
}
}
PS :
Je ne connais rien aux BaseDeDonnées mais j'ai l'impression que c'est pile poil ce qui conviendrait avec une requêtte...
;0)
Vous n’avez pas trouvé la réponse que vous recherchez ?