Frage

Ich habe ein benutzerdefiniertes Modul, mit dem wir Bannerbilder in admin hinzufügen können. Ich habe dieses Modul im Administrator erfolgreich implementiert. Jetzt möchte ich Banner im vorderen Ende anzeigen.

Meine benutzerdefinierte Tabelle ist unten angegeben

table name : banner
     fields: banner_name  |  store_ids  |  images  |   img_path  |  status  

Speicher -IDs und Bilder werden als gespeichert als comma-seperated-values. Jetzt möchte ich ein Bannerelement auswählen, das der aktuellen Store -Ansicht entspricht. Hier ist mein Code, den ich versucht habe, das Bannermodul in der Frontend anzuzeigen.

<?php
    //get all active banner items as array
    $bannerItems = Mage::getModel('banner/banner') -> getCollection()
                -> addFieldToFilter('status',1) -> getItems(); //select only enabled items                  
    $curStoreId = Mage::app() -> getStore() -> getId(); //get current store id
    $banner = "";
    foreach($bannerItems as $item) 
    {    
         $data = $item -> getData();
         /*
             Store ids are saved as `comma separated values`. Hence making
             all store_ids as an array
         */
         $storearray = explode(",",$data['store_id']);
         foreach($storearray as $store)
         {                          
             if($store == $curStoreId) //check for matches, if yes load the item
             {               
                 $banner = $item;
                 break;               
             }

         }        
         if($banner != "") // ensure to store the first matched item to load
         {
             break;
         }

     }
     //output
     if( empty($banner) ) 
     {
         die("no banner exist for this store.Please add a banner !!!");
     }
     else
     {
         die( print_r( $banner->getId() ) );
     }
?>

Dies bietet mir das Bannermodell entspricht der aktuellen Store -Ansicht. Ich bin jedoch der Meinung, dass dieser Code langwierig ist. Ich muss also wissen, wie ich dies von seiner besten Seite erreichen kann. Bitte geben Sie Ihre Vorschläge an. Danke im Voraus

War es hilfreich?

Lösung

Ich habe dies nicht "getestet", aber das sollte hilfreich sein.

$currentStore = 5;

$bannerItems = Mage::getModel('banner/banner') -> getCollection()
            -> addFieldToFilter('status',1);
$bannerItems->getSelect()->where("FIND_IN_SET($currentStore, store_ids) > 0");
$bannerItems->getSelect()->orWhere("store_ids = 0");
$bannerItems->getSelect()->order("(FIND_IN_SET($currentStore, store_ids) > 0 ) * 10 DESC");

Finden Sie zuerst die aktuelle Store_id (zum Beispiel verwendet) mithilfe der aktuellen Store_id heraus FIND_IN_SET Suchen Sie auch nach store_ids = 0, aber sortieren Sie das frühere Ergebnis, wenn Sie in absteigender Reihenfolge existieren, damit Sie das erforderliche Ergebnis in der ersten Reihe erhalten können.

Danach benutze einfach $bannerItems->getFirstItem(), In der Frage wurde bereits alles getan.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top