我有一个自定义模块,我们可以在管理员中添加横幅图像。我已经成功地在管理员中实现了此模块。现在,我想在前端展示横幅。

我的自定义表在下面给出

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

存储ID和图像被存储为 comma-seperated-values. 。现在,我想选择与当前商店视图相对应的横幅项目。这是我试图在前端显示横幅模块的代码。

<?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() ) );
     }
?>

这为我提供了横幅模型对应于当前商店视图。但是我觉得这个代码很长。因此,我需要知道如何最佳实现这一目标。请提供您的建议。提前致谢

有帮助吗?

解决方案

我没有“测试过”这个,但这应该很有帮助。

$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");

首先使用 FIND_IN_SET 还要查找store_ids = 0,但是如果以降顺序存在,则对以前的结果进行排序,以便您可以在第一行获得所需的结果。

之后只使用 $bannerItems->getFirstItem(), ,在查询中已经完成了一切。

许可以下: CC-BY-SA归因
scroll top