Magento 自定义一个搜索功能

  最近工作中有一个需求是需要做一个搜索的功能,但是因为需要定制一些外观,所以就不用传统的方法来继承基类GRID。实现这个需求的核心其实就是下面这个方法。

$this->getLayout()->getBlock('yourName')->setYourValue('yourvalue');  

大家都知道Magento的MVC架构和其它的MVC框架有点不一样,Magento的V层是从Block调用数据的,在Layout文件夹的配置文件中可以看到下面的配置.

<vendors_dealer_dealer_getdealer>
        <reference name="content">
            <block type="vendorsproduct/vendor_dealersearch" name="dealer_search" template="ves/filter/dealersearch.phtml" />
        </reference>
</vendors_dealer_dealer_getdealer>

这里的type指定的是Block的文件位置,在Phtml页面中的$this就是代表这个Block类的本身,可以在Block这个类里面定义方法然后在phtml页面中调用这个方法得到数据。

  现在开始我们来自定义一个搜索方法

  一.首先你的数据列表页面需要一个搜索框,下面是phtml页面的代码

<div class="order-filter">          
    <dl>
        <dt class="last odd">订单编号:</dt>
        <dd class="last odd">
            <ol class="order-filter-item-list">
                <li>
                    <input type="text" class="order-num"/>
                    <a href="javascript:void(0)" class="order-id-search">查询</a>
                </li>   
            </ol>
        </dd>
    </dl>
</div>
......数据显示

<script type="text/javascript">
//<![CDATA[
jQuery(".order-id-search").click(function(){

   var orderid = jQuery(this).prev().val();
   var url = "<?php echo Mage::getBaseUrl().'vendors/sales_order/getorder';?>";
   console.log(url);

   if(!orderid){
    alert("查询订单号不能为空!");
    return false;
    }
    
   window.location.href= url+"?order_id="+orderid;

})    
//]]>
</script>

 

二.可以看到输入要搜索的值,再点击搜索其实访问的是控制器的getorder这个方法,于是我们来建立这个方法

public function getOrderAction()
{
$order_id = $this->getRequest()->getParam('order_id',null); $vendor = Mage::getModel('vendors/session')->getVendor(); $vendor_id = $vendor->getId();
$read = Mage::getSingleton("core/resource")->getConnection('core_read'); $sql = "SELECT × FROM `order` where vendor_id='{$vendor_id}' and order_id='{$order_id}'";//假想sql语句 $result = $read->fetchAll($sql); $this->loadLayout(); $this->getLayout()->getBlock('order_search')->setOrder($result); $this->_setActiveMenu('sales')->_title($this->__('Sales'))->_title($this->__('Orders')); $this->_addBreadcrumb($this->__('Sales'), $this->__('Sales')); $this->_addBreadcrumb($this->__('Orders'), $this->__('Orders')); $this->renderLayout(); }

这里的关键点就是$this->getLayout()->getBlock('order_search')->setOrder($result)这一句代码,这句代码的意思就是给block设定一个模板变量,然后在模板可以使用$this->getOrder()调用数据。

 

三.建立布局文件的XML

<vendors_sales_order_getorder>
        <reference name="content">
            <block type="vendorssales/vendor_sales_ordersearch" name="order_search" template="ves/filter/ordersearch.phtml" />
        </reference>
</vendors_sales_order_getorder>

这里xml的意思就是在使用getorder这个控制器的方法的时候,会实例化ordersearch这个block,和设定指定的模板文件,这里的name="order_search"极其重要,$this->getLayout()->getBlock('order_search')->setOrder($result)这里的order_search就是这个name="order_search"。

 

四.建立这个block文件

  因为这里不需要模板从Block调用数据,所以建立一个空的Block就可以了

 

五.建立一个模板文件

  模板文件就和数据列表页面的phtml页面代码相似即可,只是这个页面多了$this->getOrder()这个方法,然后把得到的数据遍历出来显示在页面即可。

转载于:https://www.cnblogs.com/ximotao/p/5433083.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值