Comparare produse din foreach Smarty

Buna ziua! Ma poate ajuta cineva cu o functie in Smarty?
Am un foreach cu “Produse din comanda:” si unul cu “Produse din cos:”

<p>Produse din comanda:</p>
{foreach $order->products as $product}
	<p>{$product->quantity}x{$product->sku}</p>
{/foreach}


<p>Produse din cos:</p>
{foreach $order_products as $product}
	<p>{$product['quantity']}x{$product['sku']}</p>
{/foreach}

Cum as putea adauga un text cu diferenta de produse?
Daca in “Produse din cos:” am mai putine produse ca in "Produse din comanda:
Sa imi spuna ce produse trebuie sa adaug si cantitatea : “Mai ai de adaugat 2xSKU”
Sau daca am unul in plus in “Produse din cos:” sa fiu avertizat ca e in plus

Le pui in 2 array-uri si vezi diferenta intre ele.

1 Like

Eu aș muta logica asta[1] în afara Smarty. Faci operațiunea asta în php, în template doar afișezi.

Aș face așa:

// aduni întâi sku din cart
$inCart = array_map($order_products, fn($prod) => $prod['sku']);

foreach (...){
  if( in_array( $product->sku, $inCart) ) {
    // produsul e în coș
  }
}

Probabil că se poate să faci direct din smarty, dar asta nu înseamnă și că ar trebui să fie smarty.


  1. și orice altceva nu este loop sau if/else. Condițiile ar trebui să fie și ele cât mai dumb. if( $foo ) e ok, if( $foo == $bar && $bar == 'baz') nu mai e ok. ↩︎

6 Likes

array_map() expects parameter 1 to be a valid callback, first array member is not a valid class name or object

$get_rows = $db->query(sprintf('SELECT * FROM order_products WHERE order_id = %s', secure($order_id) )) or _error("SQL_ERROR_THROWEN");
if($get_rows->num_rows > 0) {
	while($row = $get_rows->fetch_assoc()) {
		$order_products[] = $row;
	}
}	
$inCart = array_map($order_products, fn($prod) => $prod['sku']);

cred ca parametrul lui array_map trebuie sa fie o functie

https://www.php.net/manual/en/function.array-map.php

Era capcană, in speranța că vei căuta în manual eroarea și vei înțelege de ce.

Ți-a dat @Cosmin_Popescu link. :slight_smile: