Bonjour tout le monde,
je suis en train de dev une loop perso, jusque là rien de compliqué.
Le code de la boucle:
namespace CrossSelling\Loop;
use Propel\Runtime\Connection\SqlConnectionInterface;
use Propel\Runtime\Propel;
use Thelia\Core\Template\Element\ArraySearchLoopInterface;
use Thelia\Core\Template\Element\BaseLoop;
use Thelia\Core\Template\Element\LoopResult;
use Thelia\Core\Template\Element\LoopResultRow;
use Thelia\Core\Template\Loop\Argument\Argument;
use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
class OrderedProductLoop extends BaseLoop implements ArraySearchLoopInterface
{
protected function getArgDefinitions()
{
return new ArgumentCollection(
Argument::createIntListTypeArgument('product_id')
);
}
public function buildArray()
{
$productId = $this->getProductId();
/** @var SqlConnectionInterface $con */
$con = Propel::getConnection();
$query = "SELECT product.id as product_id FROM product
WHERE product.ref IN(
SELECT DISTINCT order_product.product_ref FROM order_product
RIGHT JOIN product_sale_elements ON order_product.product_ref = product_sale_elements.ref
JOIN product ON product_sale_elements.id = product.id
WHERE product.visible = 1 AND order_product.order_id IN(
SELECT `order`.id FROM `order`
WHERE `order`.id IN(
SELECT order_product.order_id FROM order_product
WHERE order_product.product_ref IN (SELECT product.ref from product where product.id='$productId')
)
)
)";
$stmt = $con->prepare($query);
$stmt->execute();
$results = [];
while ($result = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$results[] = $result['product_id'];
}
return $results;
}
public function parseResults(LoopResult $loopResult)
{
foreach ($loopResult->getResultDataCollection() as $result) {
$loopResultRow = new LoopResultRow();
$loopResultRow->set("PRODUCT_ID", $result);
$loopResult->addRow($loopResultRow);
}
return $loopResult;
}
}
L'appel de la boucle dans le template:
{loop type="crossselling" product_id=$product_id name="crossselling"}
{include file="includes/single-product.html" product_id=$PRODUCT_ID}
{/loop}
Pas d'erreur en étant avec index_dev.php, j'ai vidé les caches à plusieurs reprises (notamment avant chaque test)
Mais rien n'est retournée par la boucle... je cherche... je passe un ID produit en "dur"... meme chose.
Et il me vient l'idée de regardé dans les log de thelia...
Voilà le résultat:
88: INFO [ConnectionWrapper.php:log()] {653} 2021-03-29 14:15:28:SELECT product.id as product_id FROM product
WHERE product.ref IN(
SELECT DISTINCT order_product.product_ref FROM order_product
RIGHT JOIN product_sale_elements ON order_product.product_ref = product_sale_elements.ref
JOIN product ON product_sale_elements.id = product.id
WHERE product.visible = 1 AND order_product.order_id IN(
SELECT `order`.id FROM `order`
WHERE `order`.id IN(
SELECT order_product.order_id FROM order_product
WHERE order_product.product_ref IN (SELECT product.ref from product where product.id='Array')
)
)
)
Et là je bloque sur le pourquoi il me sort 'array'
Si quelqu'un a une piste, je suis preneur