Jump to content
alimurat

homefeatured modülünde her kategoriden 10 ürün göstermek (SORUN ÇÖZÜLDÜ)

Recommended Posts

s.a. arkadaşlar
ben homefeatured modülünde sitemdeki her kategoriden 10 ürünü anasayfada göstermek istiyorum
ör: 1.kategori başlığı yazıp (resim de olabilir) altında kategoriden 10 ürün listeleyecek.
2.kategori başlığı yazıp (resim de olabilir) altında kategoriden 10 ürün listeleyecek.
........ GİBİ
yanlış anlaşılmaya sebep olmamak için durumu bir de resim ile anlatmak istedim. resim ektedir.
konuyla ilgili yardımcı olacak arkadaşlara şimdiden teşekkürler

35113_nlZnVIvp4N63OuqZRIhL_t

Share this post


Link to post
Share on other sites
s.a. arkadaşlar
ben homefeatured modülünde sitemdeki her kategoriden 10 ürünü anasayfada göstermek istiyorum
ör: 1.kategori başlığı yazıp (resim de olabilir) altında kategoriden 10 ürün listeleyecek.
2.kategori başlığı yazıp (resim de olabilir) altında kategoriden 10 ürün listeleyecek.
........ GİBİ
yanlış anlaşılmaya sebep olmamak için durumu bir de resim ile anlatmak istedim. resim ektedir.
konuyla ilgili yardımcı olacak arkadaşlara şimdiden teşekkürler

Merhaba;
Homefeatured modülülün ayarlar sayfasından 10 ürün göstermesini seçebilirsiniz. FAKAT:
Bu modül standartta 4 ürünü bir satırda gösterir. 10 ürün 4 ün katı olmadığı için 4+4+2 şeklinde görünecek dolayısıyla simetriyi bozacaktır.
12 veya 8 seçmenizi tavsiye ederim. Ama 10 da ısrar ediyorsanız modülün TPL dosyasının ilk satırlarında satır başına ürün sayısı bulunuyor. Ayrıca tema dosyanızda featured products ile ilgili CSS stillleri bulunuyor. Bunları matematik hesaplarla 5 ürün gösterecek şekilde düzenleyebilirsiniz.

İpucu: orta bölüm standart temada 556px dir. Homefeatured modülü 5px margin değerine sahiptir. 556-2x5 / 5 = 109.2px + her bir ürün bloğuna 4 px padding verirseniz her ürün için 100px genişlik kullanmanız gerekecek.

İkinci istediğinizi anlatmam çok uzun sürer ama modülün içinden yapabilirsiniz.

Kolay gelsin.

Share this post


Link to post
Share on other sites

öncelikle cevap için sağolun ama benim aradığım cevap bu değil. aynı satır da 3 yada 4 ürün olması problem değil. her kategoriye ait 8 de olur 20 de olur ürün sayısı. oraya takılmadan sormak istediğim şey farklı.
önemli olan her kategoriye ait ürünleri anasayfada göstermek. resime biraz daha dikkatli bakarsanız anlatmak istediğimi daha iyi anlarsınız.
anasayfada bebek ürünleri yazıp altına 8 ürün listeleyecem ve bitecek. sonra alta oyuncaklar yazıp bi de oyuncak kategorisinden 8 ürün listeleyeceğim

Share this post


Link to post
Share on other sites

Merhaba;
Bu istediğinizi yapabilmek için php ve smarty bilmek gerekiyor. Bunun yapılmış ama sekmeli hali var.

Amerikayı yeniden keşvedecekler okumaya devam etsin anlatıyorum.


Her modülün dosyasında Hook (yerleşim denebilir) fonksiyonları vardır.
Bizim modülün hook fonkisyonu

Dosya homefeatured.php
Satır 64 - 81

    function hookHome($params)
   {
       global $smarty;
       $category = new Category(1);
       $nb = intval(Configuration::get('HOME_FEATURED_NBR'));
       $products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       $smarty->assign(array(
           'allow_buy_when_out_of_stock' => Configuration::get('PS_ORDER_OUT_OF_STOCK', false),
           'max_quantity_to_allow_display' => Configuration::get('PS_LAST_QTIES'),
           'category' => $category,
           'products' => $products,
           'currency' => new Currency(intval($params['cart']->id_currency)),
           'lang' => Language::getIsoById(intval($params['cookie']->id_lang)),
           'productNumber' => sizeof($products),
           'homeSize' => Image::getSize('home')
       ));
       return $this->display(__FILE__, 'homefeatured.tpl');
   }


Bunu şu şekilde değiştiriyorum

function hookHome($params)
   {
       global $smarty;
       $category1 = new Category(3); // Buraya kategorinizin id sini yazin
       $category2 = new Category(4); // Buraya diger kategorinizin id sini yazin
       $nb = intval(Configuration::get('HOME_FEATURED_NBR'));
       $products1 = $category1->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       $products2 = $category2->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       $smarty->assign(array(
           'allow_buy_when_out_of_stock' => Configuration::get('PS_ORDER_OUT_OF_STOCK', false),
           'max_quantity_to_allow_display' => Configuration::get('PS_LAST_QTIES'),
           'category1' => $category1->name[intval($params['cookie']->id_lang)],
           'category2' => $category2->name[intval($params['cookie']->id_lang)],
           'products1' => $products1,
           'products2' => $products2,
           'currency' => new Currency(intval($params['cart']->id_currency)),
           'lang' => Language::getIsoById(intval($params['cookie']->id_lang)),
           'productNumber1' => sizeof($products1),
           'productNumber2' => sizeof($products2),
           'homeSize' => Image::getSize('home')
       ));
       return $this->display(__FILE__, 'homefeatured.tpl');
   }



TPL dosyasını da anlatırdım ama sayfayı açan bayılmasın diye sadece ekliyorum.

Bende çalışmadı diyenleri ve teşekkür etmeden forumu sömürenleri kendime daha yakın hissettiğimden kesinlikle gönül koymuyorum :D
Ama ben denedim mis gibi çalıştı lütfen gerçekçi olalım :D

Talep olursa modüle çevirebilirim, admin panelden kategori seçimi yapılabilir. 3-4 kategori için de düzenlenebilir.

homefeatured.zip

  • Like 2

Share this post


Link to post
Share on other sites

öncelikle bu kodlar süper çalıştı fakat şöyle bi hata oluştu.
yine öncelikle birkaç dipnot vereyim ve daha sonra oluşan hatayı söyleyeyim.
- ben bu kodları 3 kategori için uyarladım. homefeatured ürün gösterim sayısını 24 ürüne göre ayarladım.(4 ve katları olarak. bu ürün sayısı 48 de olabilir daha üstü de...)
1. kategoride 24 ürünü listeledim (sorun yok)
2. kategoride 24 ürünü listeledim (sorun yok)
3. kategoride de 24 ürünü listeleyeceğim ama o kategoriye ait 24 ürün yok. 9 tane ürün var. böyle olunca 3 kategoriden footer'a katar yaklaşık 15-20 cm kadar uzuun ve manasız bi boşluk oluşuyor.

burada homefeatured'e ayarlanan sayı ne olursa olsun ürün bittiğinde işlemi bitirecek bir düzenleme nasıl yapabiliriz?

Share this post


Link to post
Share on other sites

Merhaba;
İlgili katgoride ürün varsa göstersin yoksa göstermesin isterseniz örneğin 2. kategori

{if $producs2}

// İkinci kategori için tpl kodları burada olacak
{$category2.name}
{foreach from=$products2
....

....

{/if}


Eğer 4 ün katı değilse göstermesin isterseniz

{if $products2|@count mod 4}
....
{/if}


Fakat 5 ürün varsa hiçbirşey göstermez.
Bu matematik işlemi basit değil. Smartyde de yapılır ama performans paranoyağı birisi olarak bu işlemleri php de yapmanızı öneririm. Smarty de aynı şeyi söylüyor zaten. Beni matematiğe bulaştırmayın diyor.

Öncelikle mysql deki ürün sayısını
"COUNT FROM" ile alabileceğiniz gibi daha pratik olarak prestashopun category sınıfının countNbProductAndSub diye bir fonksiyonu var.

Örnek php dosyasında

$col = 4 // Sütun sayısı


$category2 = new Category(2);
$nop = $category2->countNbProductAndSub($category2->id, intval($params['cookie']->id_lang) ); // kategorideki ürün sayısı (Number Of Product)

$norow = ceil($nop/$col); // Oluşacak satır sayısını bulma (Number Of Rows) * Örn: Eğer 5 ürün varsa sonuç ceil ile iki çıkacaktır.

if (!$nop % $col)
 $norow--; // Son satırda 4 üründen az varsa satır azaltma

$limit = $norow*$col; // toplam gösterilecek ürün düzeltmesi

// ve son olarak 4 ün katı kadar ürün içeren sorgu
$products2 = $category2->getProducts(intval($params['cookie']->id_lang), 1, $limit);


Kolay gelsin
Not: Deneyemedim syntax hataları olabilir.

Share this post


Link to post
Share on other sites

öncelikle tekrar teşekkürler cevap için.
ama ben bu açıklamaları kendi kodlarıma uyarlayamadım.

function hookHome($params)
   {        
   global $smarty;        
   $category1 = new Category(21);
   $category2 = new Category(11); 
   $category3 = new Category(5); 
   $nb = intval(Configuration::get('HOME_FEATURED_NBR'));     
   $products1 = $category1->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10), 'date_add', 'DESC'); 
   $products2 = $category2->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10), 'date_add', 'DESC');
   $products3 = $category3->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10), 'date_add', 'DESC');
       $smarty->assign(array('allow_buy_when_out_of_stock' => Configuration::get('PS_ORDER_OUT_OF_STOCK', false),      
      'max_quantity_to_allow_display' => Configuration::get('PS_LAST_QTIES'),     
      'category1' => $category1->name[intval($params['cookie']->id_lang)],     
      'category2' => $category2->name[intval($params['cookie']->id_lang)],     
      'category3' => $category3->name[intval($params['cookie']->id_lang)],
      'products1' => $products1, 
      'products2' => $products2,     
      'products3' => $products3, 
      'currency' => new Currency(intval($params['cart']->id_currency)),     
      'lang' => Language::getIsoById(intval($params['cookie']->id_lang)),   
     'productNumber1' => sizeof($products1),      
     'productNumber2' => sizeof($products2),     
     'productNumber3' => sizeof($products3), 
     'homeSize' => Image::getSize('home')));     
  return $this->display(__FILE__, 'homefeatured.tpl');  
 } 

}

Share this post


Link to post
Share on other sites
öncelikle tekrar teşekkürler cevap için.
ama ben bu açıklamaları kendi kodlarıma uyarlayamadım.

function hookHome($params)
   {        
   global $smarty;        
   $category1 = new Category(21);
   $category2 = new Category(11); 
// Kategori 2 için örnek uygulama 
$col = 4 // Sütun sayısı
$nop = $category2->countNbProductAndSub($category2->id, intval($params['cookie']->id_lang) ); // kategorideki ürün sayısı (Number Of Product)
$norow = ceil($nop/$col); // Oluşacak satır sayısını bulma (Number Of Rows) * Örn: Eğer 5 ürün varsa sonuç ceil ile iki çıkacaktır.
if (!$nop % $col)
 $norow--; // Son satırda 4 üründen az varsa satır azaltma
$limit = $norow*$col; // toplam gösterilecek ürün düzeltmesi
   $category3 = new Category(5); 
   $nb = intval(Configuration::get('HOME_FEATURED_NBR'));     
   $products1 = $category1->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10), 'date_add', 'DESC'); 
// ve son olarak 4 ün katı kadar ürün içeren sorgu
  $products2 = $category2->getProducts(intval($params['cookie']->id_lang), 1, $limit, 'date_add', 'DESC');
   $products3 = $category3->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10), 'date_add', 'DESC');
       $smarty->assign(array('allow_buy_when_out_of_stock' => Configuration::get('PS_ORDER_OUT_OF_STOCK', false),      
      'max_quantity_to_allow_display' => Configuration::get('PS_LAST_QTIES'),     
      'category1' => $category1->name[intval($params['cookie']->id_lang)],     
      'category2' => $category2->name[intval($params['cookie']->id_lang)],     
      'category3' => $category3->name[intval($params['cookie']->id_lang)],
      'products1' => $products1, 
      'products2' => $products2,     
      'products3' => $products3, 
      'currency' => new Currency(intval($params['cart']->id_currency)),     
      'lang' => Language::getIsoById(intval($params['cookie']->id_lang)),   
     'productNumber1' => sizeof($products1),      
     'productNumber2' => sizeof($products2),     
     'productNumber3' => sizeof($products3), 
     'homeSize' => Image::getSize('home')));     
  return $this->display(__FILE__, 'homefeatured.tpl');  
 } 

}



Örnek olarak category2 için yaptım hocam bu gün çok yoğunum fırsat bulunca temize çekerim.

Share this post


Link to post
Share on other sites

Evet temize çekeyim en iyisi. Satır düzenlemesinin ayrı bir fonksiyon olarak çalışması daha mantıklı olacak. Zaten kod yazım standartları konusunda aşırı hassas birisiyim yukarıdaki kalabalığı görünce moralim bozuluyor.

Başımda bir php kütüphane işi var bu gün 2500+ satır kod yazdım ve bitmedi halen bitirince bunu halledecem.

Share this post


Link to post
Share on other sites

tekrar s.a.
Mahmut bi derleme ile homefeatured sorununda çözüme çok yaklaşmıştık ama dün bu konuda son noktayı koyamadık.
inşallah safa ile gerçekleşen (çoğunluğu yanlış anlaşılma ve aşırı tepkiler sonucu çıkan) gereksiz bir atışma bu konuda olumsuz bir etki bırakmamıştır.
selamlar

Share this post


Link to post
Share on other sites

alimurat bey,

konu başlığinı homefeatured modülünde her kategoriden 10 ürün göstermek (ÇÖZÜLDÜ) şeklinde değiştirmeniz mümkün mü acaba..?

iyi akşamlar

Share this post


Link to post
Share on other sites

Konu uçmuş modul olarak yayınlamanız mumkunmu kayboldum kodların arasında :)

Share this post


Link to post
Share on other sites
Konu uçmuş modul olarak yayınlamanız mumkunmu kayboldum kodların arasında :)

Hocam bana iki üç gün sonra hatırlatırsan modül yapıp buradan yayınlarım.

Share this post


Link to post
Share on other sites

Merhaba öncelikle anlatımın çok güzel ve anlaşılırdı ilk verdiğin kodları aldım sadece tpl de değişiklik yaparak siteye uyarladım çok güzel oldu ancak bi sorunum var.

 

Örneğin bir kategoriden 10 ürün çekiyor ama eklenen ilk 10 ürünü cekiyor. Benim istediğim o kategoriye bir ürün ekleyince ana sayfada yerini alsın. Kısaca kategoriye ait son ürünleri göstersin. Bunu nasıl yapabilirin.

Share this post


Link to post
Share on other sites

Merhaba öncelikle anlatımın çok güzel ve anlaşılırdı ilk verdiğin kodları aldım sadece tpl de değişiklik yaparak siteye uyarladım çok güzel oldu ancak bi sorunum var.

 

Örneğin bir kategoriden 10 ürün çekiyor ama eklenen ilk 10 ürünü cekiyor. Benim istediğim o kategoriye bir ürün ekleyince ana sayfada yerini alsın. Kısaca kategoriye ait son ürünleri göstersin. Bunu nasıl yapabilirin.

 

güncel

Share this post


Link to post
Share on other sites

aynı sorun bendede var lütfen yardım edin sadece ilk eklediğim konular ana sayfada çıkıyor diğer eklediğim konular çıkmıyor teşekkürler

Share this post


Link to post
Share on other sites

Mahmut bey konu çözüldü olarak kapatılmış ama bu konu ile igili bir modül yapıp yayınlayacağınızı söylemişsiniz (gerçi çok uzun zaman olmuş ama ben daha yeniyim hoşgörünüze sığınıyorum) yayınladınızmı acaba bulamadaımda. Acemiliğimden yanlış da arıyor olabilirim yardımcı olabilirmisiniz. teşekkürler

Share this post


Link to post
Share on other sites

×

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More