|
| Vægt problemer Fra : Martin |
Dato : 10-08-06 19:36 |
|
Lyder lidt som en joke :)
Nå, men det er altså en helt anden slags vægt problemer - Jeg har nogle
problemer med at få fat i den rigtige pris på vægten i min webshop.
Jeg kan ikke lige greje en løsning.
Mit problem er at alt under 1 kg ikke for en pris.
Sådan ser linjen ud med vægt/priser
1:48.00,5:50.00,10:63.00,15:90.00,20:100.00
(jeg bruger ovenstående, fordi OSCommerce også bruger det)
vægt:pris,vægt:pris,vægt:pris
Som i kan se, så starter den ved 1 kg, og det er desværre ikke lige til
at ændre til 0 kg.
Så det jeg faktisk mangler er at når en vare fx vejer 0.20 kg så skal
den tage 1 kg prisen.
| |
dtext.tele.dk (10-08-2006)
| Kommentar Fra : dtext.tele.dk |
Dato : 10-08-06 21:05 |
|
> Sådan ser linjen ud med vægt/priser
> 1:48.00,5:50.00,10:63.00,15:90.00,20:100.00
> (jeg bruger ovenstående, fordi OSCommerce også bruger det)
Hvad med:
0:xx.xx;1:48.00,5:50.00,10:63.00,15:90.00,20:100.00
Det virker som en logisk løsning - men da jeg ikke kender OSCommerce ved jeg
ikke, hvordan det opfører sig i deres system.
Endvidere er det også lidt svært at forholde sig til uden en kode. :)
- Daniel
| |
Martin (11-08-2006)
| Kommentar Fra : Martin |
Dato : 11-08-06 01:56 |
|
dtext.tele.dk wrote:
>> Sådan ser linjen ud med vægt/priser
>> 1:48.00,5:50.00,10:63.00,15:90.00,20:100.00
>> (jeg bruger ovenstående, fordi OSCommerce også bruger det)
>
> Hvad med:
>
> 0:xx.xx;1:48.00,5:50.00,10:63.00,15:90.00,20:100.00
Som jeg skrev, så er det stortset umuligt at bruge 0 som start.
>
> Det virker som en logisk løsning - men da jeg ikke kender OSCommerce ved jeg
> ikke, hvordan det opfører sig i deres system.
Nu bruger jeg heller ikke OSCommerce, det eneste jeg bruger derfra er
fragt/vægt angivelsen - da der er nogle flinke mennesker som skriver dem
så snart de bliver opdateret :)
>
> Endvidere er det også lidt svært at forholde sig til uden en kode. :)
Der er skam ikke så meget kode at gøre godt med, på nuværende tidspunkt
andet end:
function getWeight($weight,$price=0,$packs=1) {
if($weight>20) {
$oldweigt=$weight;
$weight=20;
}
$exp = explode(",",$array);
foreach($exp AS $price) {
list($w,$p) = explode(":",$price);
if($w>$weight) $price+=$p;
}
if($oldweight) return getWeight($oldweight-$weight,$price,$packs++);
return array("price"=>$price,"packs"=>$packs);
}
| |
Jesper Brunholm (11-08-2006)
| Kommentar Fra : Jesper Brunholm |
Dato : 11-08-06 08:46 |
|
Martin skrev:
>>> Sådan ser linjen ud med vægt/priser
>>> 1:48.00,5:50.00,10:63.00,15:90.00,20:100.00
>> Hvad med:
>> 0:xx.xx;1:48.00,5:50.00,10:63.00,15:90.00,20:100.00
>
> Som jeg skrev, så er det stortset umuligt at bruge 0 som start.
så prøv at indlede med komma (amerikansk, = punktum):
..01:.0,.5:25.00 osv (altså 10 gram som er gratis og et halvt kilo til 25 kr)
Men jeg har ikke helt forstået om der er tale om løbende udregning af
vægt til afsending eller endelig udregning til portoprisen på alle
delenes afsendelse.
Jeg ville afgjort regne vægten ud for sig, og så sætte pris på når jeg
havde en samlet vægt.
> function getWeight($weight,$price=0,$packs=1) {
# jeg går ud fra at den her tager højde for at alt over 20 kg har en
enhedspris?
> if($weight>20) {
> $oldweigt=$weight;
> $weight=20;
> }
> $exp = explode(",",$array);
> foreach($exp AS $price) {
#hvor får du $exp fra, og nu overskriver du den $price som du har fået
med som argument...
# funktioner kan så vidt jeg ved ikke være rekursive (kalde sig selv)
medmindre de er en del af et (OOP) Class-object
> if($oldweight) return getWeight($oldweight-$weight,$price,$packs++);
mvh
Jesper Brunholm
| |
Martin (11-08-2006)
| Kommentar Fra : Martin |
Dato : 11-08-06 09:25 |
|
Martin wrote:
> function getWeight($weight,$price=0,$packs=1) {
> if($weight>20) {
> $oldweigt=$weight;
> $weight=20;
> }
> $exp = explode(",",$array);
> foreach($exp AS $price) {
> list($w,$p) = explode(":",$price);
> if($w>$weight) $price+=$p;
> }
> if($oldweight) return getWeight($oldweight-$weight,$price,$packs++);
> return array("price"=>$price,"packs"=>$packs);
> }
Nå - det krævede lige at man vågnede... hvornår lærer jeg mon ikk at
programmere når man er smadret! Suk!
Min løsning kom til at se sådan her ud:
function _getPrice($array,$weight,$packs=1,$price=0) {
echo $weight;
if(strpos($array["price"],",")===FALSE) $exp[] = "0:".$array["price"];
else $exp = explode(",",$array["price"]);
for ($i=0;$i<count($exp);$i++) {
$last=0;
list($w,$p) = explode(":",$exp[$i]);
if($weight >= $last && $weight <= $w) { $price+=$p; break; }
$last=$w;
}
$pakke = $packs+1;
if($weight>$this->_maxweight) return
$this->_getPrice($array,($weight-$this->_maxweight),$pakke,$price);
return array("packs"=>$packs,"price"=>$price);
}
| |
Martin (11-08-2006)
| Kommentar Fra : Martin |
Dato : 11-08-06 09:29 |
|
Martin wrote:
> $pakke = $packs+1;
> if($weight>$this->_maxweight) return
> $this->_getPrice($array,($weight-$this->_maxweight),$pakke,$price);
> return array("packs"=>$packs,"price"=>$price);
> }
Lige et tillægsspørgsmål
Nu har jeg prøvet at skrive $packs++ istedet for $pakke i funktions
kaldet, men så virker det ikke, men det virker fint som det står
ovenstående.
Er der en der kan forklare mig hvorfor?
| |
Jesper Brunholm (11-08-2006)
| Kommentar Fra : Jesper Brunholm |
Dato : 11-08-06 10:44 |
|
Martin skrev:
> Nu har jeg prøvet at skrive $packs++ istedet for $pakke i funktions
> kaldet
altså som parameter?
function testfkt($pakke=1){ # $pakke har en defaultværdi, så man kan
lade være med at medsende en værdi
VS
! ikke gyldig kode !
function testfkt($pakke++){ # værdien $pakke modtages og forhøjes med 1
inden den tages i brug i funktionen
Sidstnævnte er ikke muligt på den måde, generelt er det ret begrænset
hvad man kan sætte defaultværdier til, de kan heller ikke sættes til
variabler
Så vidt jeg forstod har du en løsning...
mvh
Jesper Brunholm
| |
Martin (11-08-2006)
| Kommentar Fra : Martin |
Dato : 11-08-06 12:01 |
|
Jesper Brunholm wrote:
> Martin skrev:
>
>> Nu har jeg prøvet at skrive $packs++ istedet for $pakke i funktions
>> kaldet
>
>
> altså som parameter?
>
> function testfkt($pakke=1){ # $pakke har en defaultværdi, så man kan
> lade være med at medsende en værdi
>
> VS
>
> ! ikke gyldig kode !
> function testfkt($pakke++){ # værdien $pakke modtages og forhøjes med 1
> inden den tages i brug i funktionen
Ej, det var lidt forkert - det var ved funktions kaldet jeg ikke forstod
det.
Altså funktionen ser således ud
function foo($bar=1) {
return foo($bar++);
if($bar==4) return true;
}
ovenstående repeater konstant indtil serveren skriger stop.
function foo($bar=1) {
return foo($bar+1);
if($bar==4) return true;
}
i denne der returner funktionen true.
Lig mærke til den lille ændring ved
return foo( $bar++ / $bar+1 )
| |
Martin (11-08-2006)
| Kommentar Fra : Martin |
Dato : 11-08-06 12:33 |
|
Martin wrote:
> Altså funktionen ser således ud
>
> function foo($bar=1) {
> return foo($bar++);
> if($bar==4) return true;
> }
>
> ovenstående repeater konstant indtil serveren skriger stop.
>
> function foo($bar=1) {
> return foo($bar+1);
> if($bar==4) return true;
> }
Hov, sådan her
function foo($bar=1) {
if($bar==4) return true;
else return foo($bar++);
}
function baz($bar=1) {
if($bar==4) return true;
else return baz($bar+1);
}
if(foo()) echo "Hurra Foo\n";
if(baz()) echo "Hurra Baz\n";
Hvis jeg udkommentere if(foo()) så virker det fint, ellers så timer
serveren bare ud.
Så spørgsmålet ligger sådan set bare i hvad forskellen er på $bar++ og
$bar+1
| |
Martin (11-08-2006)
| Kommentar Fra : Martin |
Dato : 11-08-06 13:16 |
| | |
Bent Stigsen (11-08-2006)
| Kommentar Fra : Bent Stigsen |
Dato : 11-08-06 22:42 |
|
Martin wrote:
> Martin wrote:
>> Så spørgsmålet ligger sådan set bare i hvad forskellen er på $bar++ og
>> $bar+1
>
> Fandt selv også svaret på dette, ved at åbne manualen - og læse lidt på
> < http://dk2.php.net/manual/en/language.operators.increment.php>
Bare en bemærkning til linket, hvori der står:
"PHP supports C-style pre- and post-increment and decrement operators."
Det passer ikke helt. Syntaksen er den samme, men PHP ændrer
variablens værdi *umiddelbart* før eller efter at værdien af variablen
tages, for henholdsvis pre- eller post- inkrementering og
dekrementering. Det gør C ikke.
Fx.: "PHP: $a++ + $a" giver ikke det samme som "C: a++ + a"
--
/Bent
| |
Peter Larsen (11-08-2006)
| Kommentar Fra : Peter Larsen |
Dato : 11-08-06 07:15 |
|
Martin wrote:
hvad med dette (utestet, uden ansvar osv)
> 0.1:48.00,5:50.00,10:63.00,15:90.00,20:100.00
--
Regards, Peter Larsen - Domæne.dk
| |
Martin (11-08-2006)
| Kommentar Fra : Martin |
Dato : 11-08-06 08:20 |
|
Peter Larsen wrote:
> Martin wrote:
>
> hvad med dette (utestet, uden ansvar osv)
>
>
>>0.1:48.00,5:50.00,10:63.00,15:90.00,20:100.00
Tjoo, men hva så hvis en vare vejer under 10 gram?
(det er en webshop som skal bruges til alle ting, ligefra motorbåde til
ledninger)
| |
Peter Larsen (12-08-2006)
| Kommentar Fra : Peter Larsen |
Dato : 12-08-06 06:23 |
|
Martin wrote:
> Tjoo, men hva så hvis en vare vejer under 10 gram?
> (det er en webshop som skal bruges til alle ting, ligefra motorbåde til
> ledninger)
så lav det som 1 gram = prisen for pakken..
så kan du sende dine 10 gram's ting og udregne pakkepris
--
Regards, Peter Larsen - Domæne.dk
| |
|
|