Cuneyt Oral Posted February 9, 2021 Share Posted February 9, 2021 Merhaba, Kategorilerin listelemesinde, stokta olmayan ürünlerin SQL query nin sonunda olması için ne yapabiliriz. Stoğu 0 dan büyük olan ürünlere 1, stokta olmayan ürünlere 0 desek ve bunu ORDER BY satırına eklesek ihtiyacımı karşılar diye düşünüyorum. Eklenecek SQL komutu şunun gibi birşey olmalı ORDER BY CASE WHEN ps_stock_available.quantity > 0 THEN 1 ELSE 0 END DESC Ama nereye ekleyeceğimi daha bulamadım. İstediğimi çok az daha açmak gerekirse bir kategori nin ürün listesinde 10 sayfa varsa. Stokta olan ürünler ilk sayfalarda, stokta olmayan ürünlerde en son sayfalarda olsun istiyorum. Yardımcı olabilecek arkadaşlar yardım ederse çok sevinirim. Denemek için MYSQL de yazdığım aşağıdaki QUERY çalıştırdığımda istediğim sonucu veriyor. Ama Prestashop a eklemek bu kadar kolay olur mu bilemiyorum. SELECT pl.name, ps_stock_available.quantity, (CASE WHEN ps_stock_available.quantity > 0 THEN 1 ELSE 0 END) AS inStock FROM ps_product_shop ps LEFT JOIN ps_product_lang pl ON pl.id_product = ps.id_product LEFT JOIN ps_stock_available ON ps_stock_available.id_product = ps.id_product WHERE ps.id_shop=1 AND pl.id_shop=1 AND pl.id_shop=1 AND ps.id_category_default=14 ORDER BY CASE WHEN ps_stock_available.quantity > 0 THEN 1 ELSE 0 END DESC; Link to comment Share on other sites More sharing options...
Cuneyt Oral Posted February 13, 2021 Author Share Posted February 13, 2021 Belki benim gibi başka biri de bu özelliği yapmak isterse sorunu nasıl çözdüğümü yazayım. Prestashop 1.7.7.0 da classes\Category.php (line 1048) de ... LEFT JOIN `' . _DB_PREFIX_ . 'stock_available` sa ON (p.`id_product` = sa.`id_product`) ... if ($random === true) { $sql .= ' ORDER BY (CASE WHEN sa.quantity > 0 THEN 1 ELSE 0 END) DESC, RAND() LIMIT ' . (int) $randomNumberProducts; } else { $sql .= ' ORDER BY (CASE WHEN sa.quantity > 0 THEN 1 ELSE 0 END) DESC, ' . (!empty($orderByPrefix) ? $orderByPrefix . '.' : '') . '`' . bqSQL($orderyBy) . '` ' . pSQL($orderWay) . ' LIMIT ' . (((int) $p - 1) * (int) $n) . ',' . (int) $n; } modules\ps_facetedsearch\src\Adapter\MYSQL.php line 129da if ($orderField) { $query .= ' ORDER BY (CASE WHEN quantity > 0 THEN 1 ELSE 0 END) DESC, ' . $orderField . ' ' . strtoupper($this->getOrderDirection()); } Category.php deki değişiklik ana sayfa ve ürün sayfalarının altında ki FEATURED PRODUCTS bölgelerinde işe yarıyor. MySQL.php içindeki değişiklik ise kategori sayfalarında kullanılan FACETEDSEARCH listesinde işe yarıyor. Bu iki değişiklikle STOK ta olan ürünler listelemelerde hep önde oluyor. Mesela listeyi isme göre sıralamak istediğiniz de önce stokta olan isimlerine alfabetik sıralıyor sonra stokta olmayan ürünleri alfabetik sıralıyor. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now