分享技术 · 探索极限 · Code is Art
后端开发 发布 2016-06-17 682 阅读 约 13 分钟阅读

PHP 会员列表分页与搜索代码示例

一段早期 PHP 会员模型代码示例,包含会员列表查询、分页导航、搜索条件处理和会员详情查询。

PHP 会员列表代码示例。

<?php

class MemberModel
{
    public $_table = 'u_member';

    public function getInfo()
    {
        $fields = [
            't1.ID',
            't1.CreateDate',
            'Member',
            'Sex',
            'Birthday',
            'Age',
            'Mobile',
            'Card',
            'CardType',
            'AvailablePoint',
            't1.Remark',
        ];

        $table = 'u_member AS t1 INNER JOIN u_card AS t2 ON t1.CardID = t2.ID';

        return [
            'num' => DB::num_row($table, $fields),
            'list' => DB::findAll($table, $fields),
        ];
    }

    public function num()
    {
        return [
            'num' => DB::num_row($this->_table, ['ID']),
        ];
    }

    public function page()
    {
        $defaultPageSize = 10;
        $pageSize = isset($_POST['num']) ? (int) $_POST['num'] : $defaultPageSize;

        if (isset($_POST['num'])) {
            $_SESSION['num'] = $pageSize;
        }

        $nums = [
            'nums' => isset($_SESSION['num']) ? (int) $_SESSION['num'] : $defaultPageSize,
        ];

        $page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
        $rows = DB::num_row($this->_table, ['ID']);
        $pages = (int) ceil($rows / $nums['nums']);

        if ($page > $pages) {
            VIEW::display('template/tpl/test/404.html');
            exit;
        }

        $start = ($page - 1) * $nums['nums'];
        $url = '/member_list/';

        $fields = [
            't1.ID',
            'Member',
            'Sex',
            'Birthday',
            'Age',
            'Mobile',
            'Card',
            'CardType',
            'AvailablePoint',
            't1.Remark',
            'StateID',
        ];

        $table = 'u_member AS t1 INNER JOIN u_card AS t2 ON t1.CardID = t2.ID '
            . 'ORDER BY CardID LIMIT ' . $start . ',' . $nums['nums'];

        return [
            'list' => DB::findAll($table, $fields),
            'nav' => ['nav' => $this->getPageHtml($page, $pages, $url)],
            'nums' => $nums,
        ];
    }

    public function getPageHtml($page, $pages, $url)
    {
        $pageNum = 5;
        $page = max(1, min($page, $pages));
        $pages = max($pages, $page);

        $start = max(1, $page - (int) floor($pageNum / 2));
        $end = min($pages, $page + (int) floor($pageNum / 2));
        $currentPageNum = $end - $start + 1;

        if ($currentPageNum < $pageNum && $start > 1) {
            $start = max(1, $start - ($pageNum - $currentPageNum));
            $currentPageNum = $end - $start + 1;
        }

        if ($currentPageNum < $pageNum && $end < $pages) {
            $end = min($pages, $end + ($pageNum - $currentPageNum));
        }

        $html = '<ul class="pagination">';
        $html .= $start === 1
            ? '<li><a class="no" title="第一页">首页</a></li>'
            : '<li><a title="第一页" href="' . $url . '1.html">首页</a></li>';

        if ($page > 1) {
            $html .= '<li><a title="上一页" href="' . $url . ($page - 1) . '.html">&laquo;</a></li>';
        }

        for ($i = $start; $i <= $end; $i++) {
            if ($i === $page) {
                $html .= '<li><a class="active">' . $i . '</a></li>';
                continue;
            }

            $html .= '<li><a href="' . $url . $i . '.html">' . $i . '</a></li>';
        }

        if ($page < $end) {
            $html .= '<li><a title="下一页" href="' . $url . ($page + 1) . '.html">&raquo;</a></li>';
        }

        $html .= $end === $pages
            ? '<li><a class="no" title="最后一页">尾页</a></li>'
            : '<li><a title="最后一页" href="' . $url . $pages . '.html">尾页</a></li>';

        return $html . '</ul>';
    }

    public function memberSearch()
    {
        $_SESSION['date_start'] = empty($_POST['datemax']) ? '1900-01-01' : $_POST['datemax'];
        $_SESSION['date_end'] = empty($_POST['datemin']) ? '9999-12-31' : $_POST['datemin'];
        $_SESSION['content'] = empty($_POST['content']) ? '%' : $_POST['content'];

        $fields = [
            't1.ID',
            't1.Member',
            't1.Sex',
            't1.Birthday',
            'Mobile',
            'stateID',
            't1.Remark',
            'AvailablePoint',
            'Age',
            't2.CardType',
            't2.Card',
            'StateID',
        ];

        $table = 'u_member AS t1 INNER JOIN u_card AS t2 ON t1.CardID = t2.ID';
        $where = sprintf(
            "t1.Birthday BETWEEN '%s' AND '%s' AND (t1.Member LIKE '%%%s%%' OR t1.Mobile LIKE '%%%s%%' OR t2.Card LIKE '%%%s%%')",
            $_SESSION['date_start'],
            $_SESSION['date_end'],
            $_SESSION['content'],
            $_SESSION['content'],
            $_SESSION['content']
        );

        return [
            'list' => DB::findAll($table, $fields, $where),
            'num' => DB::num_row($table, $fields, $where),
        ];
    }

    public function memberView()
    {
        $id = $_REQUEST['id'];
        $fields = [
            't1.ID',
            't1.CreateDate',
            'Member',
            'Sex',
            'Birthday',
            'Age',
            'Mobile',
            'Card',
            'CardType',
            'AvailablePoint',
            'Account',
            'times',
            'StartDate',
            'EndDate',
            't1.Remark',
            'State',
            'StateID',
            'Point',
            'IntroducerPoint',
        ];

        $table = 'u_member AS t1 INNER JOIN u_card AS t2 ON t1.CardID = t2.ID';
        $where = sprintf("t1.ID = '%s'", $id);

        return DB::findOne($table, $fields, $where);
    }
}

发表回复