logo
30.10.2019 17:59
1
Zdravím,
v košíku potřebuji zobrazit kód podle toho co košík obsahuje, znám ID produktů v košíku, podle toho potřebuji vypsat:

V košíku je ID 12 nebo 13 nebo 14

{if $product.id_product == 12 || $product.id_product == 13 || $product.id_product == 14}
**vypíšu kód produktů ID 15 a 16**

{elseif $product.id_product == 12 || $product.id_product == 13 || $product.id_product == 14 AND $product.id_product == 15}
**vypíšu kód produktu ID 16**

{elseif $product.id_product == 12 || $product.id_product == 13 || $product.id_product == 14 AND $product.id_product == 16}
**vypíšu kód produktu ID 15**

{else $product.id_product == 15 AND $product.id_product == 16}
**nechám prázdné**

V podstatě se mi jedná o to, že k určitým produktům zobrazuji dva produkty k dokoupení, a pokud jeden z nich přidám/je v košíku, tak zobrazím jen ten druhý, a pokud jsou v košíku oba tak nezobrazím nic.

Díky za rady!
30.10.2019 18:37
2
jestli chápu správně, máš nějaké produkty (12, 13, 14) a pokud se objeví v košíku, chceš vypsat jako doporučení produkty (15, 16), ale jen jestli je také nemá v košíku?

osobně bych si nachystal nejprve nějaké nastavení, proměnné a poté udělal univerzální smyčku, která to zpracuje.

Nevím, jak to chceš zobrazovat, jestli na řádku u daného produkty nebo až za výpisem produktů v košíku (tuhle variantu jsem zvolil teď já):

PHP kód:
<?php

// od nekud si naplnis pole s vypisem produktu, ktere ma uzivatel v kosiku
$produkty_v_kosiku = [1213141518];
$produkty_k_doporuceni = Array();

// nachystam si nastaveni, ktere produkty doporucovat ke kterym
$produkty_k_doporuceni[] = [
    
'v_kosiku' => [121314],
    
'doporuc' => [1516]
];

// neni problem pridat i dalsi, tj. mit vice paru
$produkty_k_doporuceni[] = [
    
'v_kosiku' => [1819],
    
'doporuc' => [11]
];

foreach(
$produkty_k_doporuceni as $doporuceni) {
    
// ma zakaznik v kosiku nejaky produkt, ke kterymu chceme neco doporucit?
    // funkce intersect mi vrati prazdne pole pokud v kosiku neni zadny produkt z doporuceni[v_kosiku]
    
if (array_intersect($produkty_v_kosiku$doporuceni['v_kosiku'])) {
        
// zjistit id produktu k doporuceni, tj. ty, ktere jeste nejsou v kosiku
        
$doporuc array_diff($doporuceni['doporuc'], array_intersect($produkty_v_kosiku$doporuceni['doporuc']));
        
// vypis produktu k doporuceni
        // var_dump($doporuc);
    
}
}
30.10.2019 19:31
3
Ano, pokud je nemá v košíku, vypsat, pokud má, nevypisovat.

Tak musím říct, že tady se nechytám vůbec :-) a tohle asi ani po tvé radě nerozjedu, co jsem udělal je tohle:

PHP kód:
<!-- ID produktu které jsou v kosiku -->
<
div class="produkty-kosik">
{foreach 
$products as $product}
  {
$product.id_product}
{/foreach}
</
div>
<!-- 
#SOUVISEJICI PRODUKT -->
{if $product.id_product == || $product.id_product == 17 || $product.id_product == 18 || $product.id_product == 19 || $product.id_product == 20 || $product.id_product == 21 || $product.id_product == 22 || $product.id_product == 23}
<
h3><center>Nezapomeňte dokoupit</center></h3>
<
table id="cart_summary">
<
thead>
<
tr>
    <
th class="cart_product first_item">Produkt</th>
    <
th class="cart_description item">Popis</th>
    <
th class="cart_unit item">Cena</th>
    
</
tr>
</
thead>
<
tbody>    
<
tr id="product" class="cart_item address">
    <
td class="cart_product">
        <
a href="" title=""><img src="" alt="" width="98" height="98" /></a>
    </
td>
    <
td class="cart_description">
                        <
class="product-name"><a href="" title="">Produkt ID=15</a></p>
             <
p style="font-size:12px;"></p>
                          <
div class="clearfix" style="margin-top:5px">
                                                <
div class="no-print">
                                                    <
class="exclusive button ajax_add_to_cart_button" href="{$link->getPageLink('cart'trueNULL"qty=1&amp;id_product={$accessory.id_product|intval}&amp;token={$static_token}&amp;add")|escape:'html':'UTF-8'}data-id-product="15" title="{l s='Add to cart'}">
                                                        <
span>Přidat do košíku</span>
                                                    </
a>
                                                </
div>
                                        </
div>
    </
td>
    <
td class="cart_unit">
        <
span class="price" id="product_price">
                                                <
li class="price">390 Kč</li>
                                                    </
span>
    </
td>
</
tr>
</
tbody>
<
tbody>    
<
tr id="product" class="cart_item address">
    <
td class="cart_product">
        <
a href="" title=""><img src="" alt="" width="98" height="98" /></a>
    </
td>
    <
td class="cart_description">
                        <
class="product-name"><a href="" title="">Produkt ID=25</a></p>
             <
p style="font-size:12px;"></p>
                          <
div class="clearfix" style="margin-top:5px">
                                                <
div class="no-print">
                                                    <
class="exclusive button ajax_add_to_cart_button" href="{$link->getPageLink('cart'trueNULL"qty=1&amp;id_product={$accessory.id_product|intval}&amp;token={$static_token}&amp;add")|escape:'html':'UTF-8'}data-id-product="25" title="{l s='Add to cart'}">
                                                        <
span>Přidat do košíku</span>
                                                    </
a>
                                                </
div>
                                        </
div>
    </
td>
    <
td class="cart_unit">
        <
span class="price" id="product_price">
                                                <
li class="price">390 Kč</li>
                                                    </
span>
    </
td>
</
tr>
</
tbody>
{elseif 
$product.id_product == || $product.id_product == 17 || $product.id_product == 18 || $product.id_product == 19 || $product.id_product == 20 || $product.id_product == 21 || $product.id_product == 22 || $product.id_product == 23 AND $product.id_product == 15}
<
h3><center>Nezapomeňte dokoupit</center></h3>
<
table id="cart_summary">
<
thead>
<
tr>
    <
th class="cart_product first_item">Produkt</th>
    <
th class="cart_description item">Popis</th>
    <
th class="cart_unit item">Cena</th>
    
</
tr>
</
thead>
<
tbody>    
<
tr id="product" class="cart_item address">
    <
td class="cart_product">
        <
a href="" title=""><img src="" alt="" width="98" height="98" /></a>
    </
td>
    <
td class="cart_description">
                        <
class="product-name"><a href="" title="">ID=25</a></p>
             <
p style="font-size:12px;"></p>
             <
div class="clearfix" style="margin-top:5px">
                                                <
div class="no-print">
                                                    <
class="exclusive button ajax_add_to_cart_button" href="{$link->getPageLink('cart'trueNULL"qty=1&amp;id_product={$accessory.id_product|intval}&amp;token={$static_token}&amp;add")|escape:'html':'UTF-8'}data-id-product="25" title="{l s='Add to cart'}">
                                                        <
span>Přidat do košíku</span>
                                                    </
a>
                                                </
div>
                                        </
div>
    </
td>
    <
td class="cart_unit">
        <
span class="price" id="product_price">
                                                <
li class="price">490 Kč</li>
                                                    </
span>
    </
td>
</
tr>
</
tbody>
</
table><br />
{elseif 
$product.id_product == || $product.id_product == 17 || $product.id_product == 18 || $product.id_product == 19 || $product.id_product == 20 || $product.id_product == 21 || $product.id_product == 22 || $product.id_product == 23 AND $product.id_product == 25}
<
tbody>    
<
tr id="product" class="cart_item address">
    <
td class="cart_product">
        <
a href="" title=""><img src="" alt="" width="98" height="98" /></a>
    </
td>
    <
td class="cart_description">
                        <
class="product-name"><a href="" title="">ID=15</a></p>
             <
p style="font-size:12px;"></p>
             <
div class="clearfix" style="margin-top:5px">
                                                <
div class="no-print">
                                                    <
class="exclusive button ajax_add_to_cart_button" href="{$link->getPageLink('cart'trueNULL"qty=1&amp;id_product={$accessory.id_product|intval}&amp;token={$static_token}&amp;add")|escape:'html':'UTF-8'}data-id-product="15" title="{l s='Add to cart'}">
                                                        <
span>Přidat do košíku</span>
                                                    </
a>
                                                </
div>
                                        </
div>
    </
td>
    <
td class="cart_unit">
        <
span class="price" id="product_price">
                                                <
li class="price">490 Kč</li>
                                                    </
span>
    </
td>
</
tr>
</
tbody>
</
table><br />
{else}
<
h3>Všechno už máš</h3>
{/if} 
Přes foreach se ve zdrojovém kódu zobrazují ID produktů, které jsou v košíku, pokud se IF nějakému rovná, zobrazí se dva produkty (ID=15 a ID=25), ELSEIF obsahuje ID produktů AND ID=15 zobrazí se produkt ID=25 (a naopak), jenže i když jsou v košíku oba (15 a 25) nezobrazí se ELSE ale jeden z 15 nebo 25.

V kódu bude možná chybka, psal jsem to teď znovu sem
30.10.2019 23:13
4
To máš úplně špatně. Foreach na začátku udělá jen to, že vypíše všechny ID a do $product přiřadí postupně všechny produkty z košíku a pak skončí, takže ve všech následujících podmínkách máš v $product poslední prvek z pole $products.
I kdybys to obalil foreachem celé, tak to bude k ničemu, buď to přepiš podle Tomáše, nebo jestli to chceš řešit takhle krkolomně, tak foreach smaž a do těch podmínek použij in_array.
Kód:
{if in_array(12, $products)||in_array(13, $products)||14...}
= jesli je v poli produktů 12, nebo 13 nebo 14...
  
  {if ! in_array(15, $products)}
= jestli tam není 15
{/if}

  {if ! in_array(16, $products)}
= jestli tam není 16
{/if}



{/if}
31.10.2019 05:00
5
Zkusím dnes obě možnosti :-) díky.

---------- Příspěvek doplněn 31.10.2019 v 06:00 ----------

Pokud to tedy chápu tak by to mělo vypadat nějak takhle

PHP kód:
{if in_array(12$products)||in_array(13$products)||14...}
echo 
"'kód pro zobrazení ID produktů 15 a 16";
  
  {if ! 
in_array(15$products)}
echo 
"'kód pro zobrazení pokud tam je ID 15";
{/if}

  {if ! 
in_array(16$products)}
echo 
"'kód pro zobrazení pokud tam je ID 16";
{/if}

{/if} 
A co, pokud tam jsou ID produktů 15 i 16 a chci aby se nezobrazil žádný kód/produkt?

Normálně bych se na to vypšouk, ale když už jsem to začal zajímá mě to :-) PS nejsem programátor jen nadšenec..
31.10.2019 07:30
6
zdar, takhle
Kód:
{if in_array(12, $products)||in_array(13, $products)||14...}
  
  {if ! in_array(15, $products)}
echo "'kód pro zobrazení pokud tam je ID 15";
{/if}

  {if ! in_array(16, $products)}
echo "'kód pro zobrazení pokud tam je ID 16";
{/if}

{/if}
když tam bude 15 i 16 tak nebude platit žádná z vnitřních podmínek a nic to nevypíše

---------- Příspěvek doplněn 31.10.2019 v 07:40 ----------

pardon - ještě místo $products musí být něco jako $productIDs, kde bude jen pole samotných ID. To ani nevím jestli ve Smarty jde, tak bude lepší připravit v php mimo šablonu
31.10.2019 07:44
7
Díky, vyzkouším ID produktu Presta vypisuje přes product.id_product

---------- Příspěvek doplněn 31.10.2019 v 19:13 ----------

Tak jsem zkoušel ale chyba žádná, výpis žádný :-) nejspíš tam je potřeba nějak vypsat ty ID produktů, které jsou v košíku, ale to nevím jak..