Autor Zpráva
marvays
Profil
Pěknou sobotu všem.
Opět se snažím vrtat do php, aníž bych tomu nějak extra rozuměl. Vytvořil jsem si kod, který mi má zobrazovat v nákupním košíku, kolik musím ještě utratit, abych měl dopravu zdarma. V mém případě je doprava zdarma od 4000,-

Problémy mám dva.
1. když vkládám zboží do košíku, vše funguje do hodnoty 999,- . . . .poté mi to počítá nesmysly.
2. nefunguje mi hodnota else . . . což bude zapříčiněno asi tou chybou v bodě jedna.

<div class="motivator" style="padding: 10px;position: absolute;width: 350px;right: 150px;bottom: -3px;padding: 10px;color: #e8102c;text-align: right;text-transform: none;"> 
        <?php if ($data->billTotal <4000 ) { ?>
            <span>Pro dopravu zdarma ještě nakupte za: <?php echo (4000 - ($data->billTotal)) ?> Kč </span>
        <?php } else { ?>
            <span>Doprava zdarma</span>
        <?php } ?>    
</div>

zkušební kopie webu: lukysipy.richta.eu/kuse

PS: Jediné vysvětlení mě napadá, že bude problém s "oddělovačem"tisíců. I když nechápu, jak by mohlo.
Keeehi
Profil
var_dump($data->billTotal); říká co? Jak pro nákupy pod 1000 tak i přes.

Nebo rovnou lépe var_dump($data); podíváme se, zda jsou tam ta data v lepším formátu.
marvays
Profil
No, taky mě mohlo napadnout, že to mám nejdřív vyzkoušet, než se budu hloupě ptát. Opravdu to je nastavením Vm a formátem psaní měny. Když zruším oddělování tisíců tečkou, vše funguje jak má.
Otázka tedy zní . . . . jak to zapsat do tohoto kodu, aby to fungovalo správně? protože bez té tečky ty pětimístné hodnoty nevypadají dobře :(


Keeehi:
to je celková částka vložená do košíku


Prozatím jsem ty mezery prostě zrušil, aby mi to fungovalo a mohl jsem to nastylovat.

napadlo mě, že bych to udělal na tři druhy textů. jen nevím, jak na to. Bude košér to udělat na 3x "if" bez else? ještě bych dal jiný text pro billTotal = 0

<?php if ($data->billTotal =0) { ?>
            <span style="animation: blinker 1s linear infinite;">Při objednávce nad 4000 je doprava zdarma!</span>
<?php } ?>
<?php if ($data->billTotal >0 && <4000) { ?>
            <span style="animation: blinker 1s linear infinite;">Chcete dopravu zdarma? Přidejte ještě zboží za: <?php echo (4000 - ($data->billTotal)) ?> Kč </span>
<?php } ?>
<?php if ($data->billTotal >4000 ) { ?>
            <span style="font-weight: 700; color: #109d16;animation: blinker 2s linear infinite;">Doprava Vaši objednávky bude zdarma!</span>
<?php } ?>

mám to tak správně?
Keeehi
Profil
marvays:
to je celková částka vložená do košíku
To je jasné, ale var_dump k tomu vypíše i o jaký datový typ se jedná. Nejspíš půjde o řetězec kvůli tomu formátování ale je potřeba to ověřit. var_dump celého objektu vypíše hodnoty všech jeho vlastností, bylo by celkem logické, že tam bude někde schovaná cena i v číselném formátu. Tedy možností je ve skutečnosti spousta a do té doby, než budeme vědět instancí které třídy je objekt v $data, tak se nepohneme.
Takže výpis var_dump($data);?

mám to tak správně?
Není to úplně správně a dá se to zapsat lépe (za předpokladu, že $data->billTotal nebude nikdy záporný)
<?php if ($data->billTotal <= 0) { ?>
            <span style="animation: blinker 1s linear infinite;">Při objednávce nad 4000 je doprava zdarma!</span>
<?php } elseif ($data->billTotal < 4000) { ?>
            <span style="animation: blinker 1s linear infinite;">Chcete dopravu zdarma? Přidejte ještě zboží za: <?php echo (4000 - ($data->billTotal)) ?> Kč </span>
<?php } else { ?>
            <span style="font-weight: 700; color: #109d16;animation: blinker 2s linear infinite;">Doprava Vaši objednávky bude zdarma!</span>
<?php } ?>

Těm spanům by více slušely třídy a definování css na jiném místě ;)
marvays
Profil
Díky. Vyzkouším :)
Tomášeek
Profil
Keeehi:
Není to úplně správně a dá se to zapsat lépe (za předpokladu, že $data->billTotal nebude nikdy záporný)
Celková cena objednávky by sice v aplikaci neměla být záporná, nicméně pro jistotu a pokrytí i této možnosti bych podmínku na 1. řádku upravil na menší nebo rovno nule. Nic se tím nezkazí.
Keeehi
Profil
Tomášeek:
Jasně, máš pravdu. Upraveno.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: