Ecshop 基于jquery.more.js瀑布流的实现

瀑布流——是一种布局方式,它的意思是随着页面滚动条向下滚动,页面不断的加载更多的内容。

在网络查找“jquery.more.js实现瀑布流”可以找到一大把的内容,我是通过ecshop的实现方式,重新实现了一遍,我把“category"中的实现方式进行了简化。

首先我们要建一个静态的页面模板(.dwt),保存到手机端的模板目录里"mobile/themesmobile/mo_paleng_moban",下面我只列出了我要实现加载数据的模块

<div class="weui-tab">
    <div class="weui-navbar">
        <a class="weui-navbar__item weui-bar__item--on" href="#tab1">
            全部
        </a>
        <a class="weui-navbar__item" href="#tab1">
            植物篇
        </a>
        <a class="weui-navbar__item" href="#tab1">
            动物篇
        </a>
    </div>
    <div class="weui-tab__bd">
        <div id="tab1" class="weui-tab__bd-item weui-tab__bd-item--active">
            <ul style="overflow-y: scroll;height:550px">
                <li>
                    <div class="list-left"><img src="../images/wuzhong.png" alt=""></div>
                    <div class="list-right">
                        <h1>同里:一个自然与人和谐共处的家园</h1>
                        <p>在占地1142.7公顷的同里国家湿地公园,分布着多样的湿地......</p>
                        <div><span>2019-05-26</span><span>阅读 1130</span></div>
                    </div>
                </li>
                <li>
                    <div class="list-left"><img src="../images/wuzhong.png" alt=""></div>
                    <div class="list-right">
                        <h1>同里:一个自然与人和谐共处的家园</h1>
                        <p>在占地1142.7公顷的同里国家湿地公园,分布着多样的湿地......</p>
                        <div><span>2019-05-26</span><span>阅读 1130</span></div>
                    </div>
                </li>
            </ul>
        </div>
    </div>
</div>

这个是我没有改造过的内容,我这是通过一个weui-tab来实现分类加载数据列表,要使用weui得引入weui的相关库(.js,.css),这里不做阐述。为了方便加载数据,我三个tab使用了同一个tab list。

下面我要对它进行改造,以实现动态加载数据。

1 改写"weui-navbar"动态加载分类标签

<div class="weui-navbar">
        {foreach from=$cat_list item=cat name=name}
        <a class="weui-navbar__item {if $cat_id==$smarty.foreach.name.index} weui-bar__item--on {/if}" href="#listwrap">
            {$cat}
        </a>
        {/foreach}
    </div>

这里我对它的标签实现了动态加载数据,通过foreach循环加载了ecshop传过来的分类列表。

2 改写“weui-tab__bd”

<div class="weui-tab__bd">
        <div id="tab1" class="weui-tab__bd-item weui-tab__bd-item--active">
            <!-- #BeginLibraryItem "/library/s_species_list.lbi" --><!-- #EndLibraryItem -->
        </div>
    </div>

在这里我将列表封装成了一个模板库"s_species_list.lbi" ,.lbi文件是ecshop为了更好的模块化的一种文件,实际上也是html文本。它存储在“mobile/themesmobile/mo_paleng_moban/lib“目录中,内容如下:

<ul>
    {if $s_species_list}
    <div id="s_species_more" style="opacity: 1;" >
		<!-- 用来加载数据的标签-->
        <div class="s_species single_item info"></div>
		<!-- 用来触发加载更多的标签(点击)-->
        <a href="javascript:;" class="get_more" style="text-align:center">
            加载更多
        </a>
    </div>
    {else}
    <p class="s_species_title">抱歉暂时没有相关结果,换个筛选条件试试吧</p>
    {/if}
</ul>

3.编写js代码

首先我们得调用jquery.more.js库,由于jquery.more.js是基于jquery的,在这之前我们还要加载jquey.js库

<script type="text/javascript" src="themesmobile/mo_paleng_moban/js/jquery.js"></script>
<script type="application/javascript" src="themesmobile/mo_paleng_moban/js/jquery.more.js"></script>

在页面的<script></script>中加入如下代码

var url = 's_species.php?act=ajax&cat_id={$cat_id}&id={$s_species.spe_id}&page=1&sort={$smarty.request.sort}&order={$smarty.request.order}';
    $(function () {
        $('#s_species_more').more({'address': url});
    });

在原生的jquery.more.js中可能没有加入"滚动加载"方法,所有在"jquey.more.js"中我们要加入如下代码

$(document).ready(function () {
        $(window).on('scroll', function () {
            if ($(document).scrollTop() + $(window).height() > $(document).height() - 10) {
                $('.get_more').click();
            }
        });
    });

4 编写php

接下来我们要在php中获取数据给模板加载,

在php中我们得写一个"ajax"方法

if ($action == 'ajax')
{
    include('includes/cls_json.php'); //引入json库

    //获取分页等post请求参数
    $last = $_POST['last'];
    $amount = $_POST['amount'];
    $limit = "limit $last,$amount";
    $json = new JSON;

    $cat_id = isset($_REQUEST['cat_id'])  ? intval($_REQUEST['cat_id']) : 0;
    $keywords = empty($_REQUEST['keywords']) ? '' : trim($_REQUEST['keywords']);
    //分页
    $page = isset($_REQUEST['page']) && intval($_REQUEST['page']) > 0 ? intval($_REQUEST['page']) : 1;
    $size = isset($_CFG['page_size']) && intval($_CFG['page_size']) > 0 ? intval($_CFG['page_size']) : 10;

    //排序
    $order =  'ASC';
    $sort =  'createtime';

    //获取数据
    $s_species_list = get_species_list($cat_id,$size, $page, $sort, $order,$limit,$keywords);

    //生成数据
    foreach ($s_species_list as $val) {
        $smarty->assign('s_species', $val);
        $res[]['info'] = $GLOBALS['smarty']->fetch('library/s_species_list_ajax.lbi');
    }
    //返回数据
    die($json->encode($res));
}

瀑布流,其实就是不断加载下一页的过程,所有我们要代码传过来的分页值,获取该页数据。获取数据后,我们得实例化页面数据,在这里ecshop又使用了它的模板库,我们将单条数据封装成“s_species_list_ajax.lbi",我们同样将它存储到“mobile/themesmobile/mo_paleng_moban/lib”目录中。

{if $s_species.spe_id}
<li onclick="javascript:onSpeciesInfo({$s_species.spe_id})">
    <div class="list-left"><img src="./../{$s_species.spe_species_image}" alt=""></div>
    <div class="list-right">
        <h1>{$s_species.spe_name}</h1>
        <p>{$s_species.spe_content|truncate:20}</p>
        <div><span>{$s_species.date}</span><span>阅读&nbsp;{$s_species.spe_read}</span></div>
    </div>
</li>
{/if}

在php中通过foreach遍历数据列表,然后通过将单条数据定义成“s_species"对象,传给smarty,smarty然后通过fetch将数据填入模板中,返回一个html文本,最后我们将数据存入一个数组中,以json编码的方式返回给jquery.more.js处理加载。

这样我们实现了瀑流加载,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值