Ecshop后台分页加搜索总结

袁志蒙 3257次浏览

摘要:最近由于工作的原因,不得不对ECShop进行研究和二次开发,记录一下笔记文档。方式调用的,所以对于刚接触该系统的人在研究这个功能时,往往比较费力。。。看了好几天总结一下步骤:1.先写一个functio...

最近由于工作的原因,不得不对ECShop进行研究和二次开发,记录一下笔记文档。

由于Ecshop后台分页和搜索是用ajax方式调用的,所以对于刚接触该系统的人在研究这个功能时,往往比较费力。。。看了好几天总结一下步骤:


1.先写一个function get_page_list() 函数,里面要包括可以进行排序,分页,查询等功能

2.在php文件里面写一个elseif ($_REQUEST['act'] == 'list') ,这里是显示默认分页数据

3.在php写一个elseif($_REQUEST['act'] == 'query')的逻辑,(listtable.js默认的是先读取$_REQUEST['act'] == 'query')排序、分页、查询都在query里面完成

4.html页面


实例:

1.先写一个function get_page_list,可以进行排序、分类、查询。


/**
 * 获取分页列表
 *
 * @access  public
 * @return  array
 */
function get_page_list(){
	
	//获取上一次保存的查询条件
    $result = get_filter();
	
    if ($result === false){
		
		//搜索条件
		$where = ' where 1=1 ';
		
        $filter = array();
		
		//ajax搜索功能
		if (isset($_REQUEST['is_ajax']) && $_REQUEST['is_ajax'] == 1){
			$is_import = isset($_REQUEST['is_import']) ? intval($_REQUEST['is_import']) : 99;
			$keyword = isset($_REQUEST['keyword']) ? trim($_REQUEST['keyword']) : '';
            $filter['is_import'] = $is_import;
            $filter['keyword'] = json_str_iconv($keyword);
			
			if($is_import != 99) $where .= "and is_import = $is_import ";
			if(!empty($filter['keyword'])) $where .= "and goods_name like '%$keyword%' ";
        }
		
		/* 记录总数以及页数 */
		$sql = "SELECT COUNT(*) FROM ".$GLOBALS['cy']->table('jz_goods').$where;
		$filter['record_count'] = $GLOBALS['db']->getOne($sql);
		
		//分页大小 
        $filter = page_and_size($filter);  //处理后$filter数组里有:record_count,page_size,page,page_count,start
		
        /* 查询记录 */
        $sql = "SELECT * FROM ".$GLOBALS['cy']->table('jz_goods').$where." ORDER BY id DESC  LIMIT " . $filter['start'] . ',' . $filter['page_size'];;
		
		//保存查询条件(cookie保存)
        set_filter($filter, $sql);
    }else{
        $sql    = $result['sql'];
        $filter = $result['filter'];
    }
	
    $depot_list = $GLOBALS['db']->getAll($sql);
	
	//组合成系统默认查询条件
    return array('depot_list' => $depot_list, 'filter' => $filter, 'page_count' => $filter['page_count'], 'record_count' => $filter['record_count']);
}

2.php列表文件:


elseif ($_REQUEST['act'] == 'list'){
	$smarty->assign('ur_here',      '测试');
	$smarty->assign('full_page',    1);
	$page_list = get_page_list();
    $smarty->assign('data',   		$page_list['depot_list']);
    $smarty->assign('filter',       $page_list['filter']);
    $smarty->assign('record_count', $page_list['record_count']);
    $smarty->assign('page_count',   $page_list['page_count']);
    assign_query_info();

    $smarty->display('import_list.htm');
}
/*------------------------------------------------------ */
//-- 排序、分页、查询
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'query')
{
	
	$page_list = get_page_list();
    $smarty->assign('data',   		$page_list['depot_list']);
    $smarty->assign('filter',       $page_list['filter']);
    $smarty->assign('record_count', $page_list['record_count']);
    $smarty->assign('page_count',   $page_list['page_count']);
	
    make_json_result($smarty->fetch('import_list.htm'), '',array('filter' => $page_list['filter'], 'page_count' => $page_list['page_count']));
}

3.HTML模板文件:


{if $full_page}
{include file="pageheader.htm"}
{insert_scripts files="../js/utils.js,listtable.js"}
{include file="goods_search_other.htm"}
<form method="post" action="" name="listForm">
<div class="list-div" id="listDiv">
{/if}

  <table cellpadding="3" cellspacing="1"  class="table table-bordered">
    <tr>
      <th><input onclick='listTable.selectAll(this, "checkboxes")' type="checkbox"></th>
      <th>商品图片</th>
      <th>商品名称</th>
      <th>商品ID</th>
      <th>品牌名称</th>
      <th>分类名称</th>
      <th>销售价</th>
      <th>库存数</th>
      <th>已导入</th>
      <th>操作</th>
    </tr>
    {foreach from=$data item=goods}
    <tr>
      <td><input value="{$goods.id}" name="checkboxes[]" type="checkbox"></td>
      <td><img src="{$goods.goods_img}" height="70"></td>
      <td>{$goods.goods_name}</td>
      <td>{$goods.goods_id}</td>
      <td>{$goods.brand_name}</td>
      <td>{$goods.cate_name}</td>
      <td>{$goods.sell_price}</td>
      <td>{$goods.store_nums}</td>
      <td>{if $goods.is_import eq 1}是{else}<span style="color:red">否</span>{/if}</td>
      <td align="center">
        <a href="javascript:;" onclick="remove_jz({$goods.id})" title="删除">删除</a> 
      </td>
    </tr>
    {foreachelse}
    <tr><td class="no-records" colspan="10">{$lang.no_records}</td></tr>
    {/foreach}
	
    <tr>
      <td align="right" nowrap="true" colspan="6">
      {include file="page.htm"}
      </td>
    </tr>
  </table>

{if $full_page}
</div>
</form>

<script type="text/javascript" language="javascript">

  listTable.recordCount = {$record_count};
  listTable.pageCount = {$page_count};

  {foreach from=$filter item=item key=key}
  listTable.filter.{$key} = '{$item}';
  {/foreach}


  function remove_jz(id){
      if(confirm('确定删除吗?')){
          window.location.href = "jiangzi.php?act=remove&id="+id;
      }
  }
</script>
{include file="pagefooter.htm"}
{/if}


goods_search_other.htm文件:

<div class="form-div">
  <form action="javascript:searchGoods()" name="searchForm" >
    <img src="images/icon_search.gif" width="26" height="22" border="0" alt="SEARCH" />
	{if $smarty.get.act neq "trash"}
      <select name="is_import"><option value='99'>是否导入</option><option value="1">是</option><option value="0">否</option></select>
    {/if}
	  商品名称 <input type="text" name="keyword" size="15" />
      <input type="submit" value="{$lang.button_search}" class="button" />
  </form> 
</div>

{literal}
<script language="JavaScript">
    function searchGoods()
    {
{/literal}
        {if $smarty.get.act neq "trash"}
        //listTable.filter['cat_id'] = document.forms['searchForm'].elements['cat_id'].value;
        listTable.filter['is_import'] = document.forms['searchForm'].elements['is_import'].value;
        {/if}
{literal}
        listTable.filter['keyword'] = Utils.trim(document.forms['searchForm'].elements['keyword'].value);
        listTable.filter['page'] = 1;

        listTable.loadList();
    }
</script>
{/literal}

说明:{literal}{/literal}是smarty标签,当smarty的边界符定义为{} (大括号)的时候~{literal}{/literal}是用来忽略该标签内的大括号的。

随机内容

表情

共2条评论
  • 网友评论:

    2017-07-25 09:31:27 回复

    点击加载
  • 网友评论:

    测试

    2017-06-20 16:30:25 回复

    点击加载