Рубрики
Uncategorized

Шаг за шагом реализуйте подкачку без обновления ajax на thinkphp

Автор оригинала: David Wong.

предисловие

Собственный класс фреймворка подкачки thinkphp – это каждая страница для обновления всей страницы, страница, на которой пользовательский интерфейс, очевидно, не очень идеален, мы надеемся, что каждая страница обновляет набор данных, который нам нужен, только часть данных, так что мы можем легко думать об асинхронной связи ajax, с ajax и базой данных (я в процессе разработки использую базу данных mysql) асинхронное взаимодействие, вернется, данные из запросов базы данных с использованием jquery заменяют исходные данные, которые в случае не обновления страницы до локального обновления, чтобы достичь желаемых результатов.

Класс подкачки Thinkphp ajax

Этот класс подкачки находится на интернет-ресурсах, вы можете прямо в своем thinkphp создать такой класс, я здесь имя класса ajaxpage.class

[email protected]>
// +----------------------------------------------------------------------
// $Id: Page.class.php 2712 2012-02-06 10:12:49Z liu21st $
namespace Common\Common;
class AjaxPage {
    // the number of pages displayed per page in the paging bar
    public $rollPage = 5;
    // parameter to take when page jump
    public $parameter  ;
    // the default list displays the number of rows per page
    public $listRows = 20;
    // number of initial rows
    public $firstRow ;
    // total number of pages
    protected $totalPages  ;
    // the total number of rows
    protected $totalRows  ;
    // current page number
    protected $nowPage    ;
    // the total number of pages of paginated columns
    protected $coolPages   ;
    // pagination shows customization
    Protected $config = array (' header '= >' record ', 'prev' = > 'previous' and' next '= >' next 'and' first '= >' page 1 ', 'last' = > 'last page', 'theme' = > 'nowPage header totalRow % % % % % % % / totalPage first downPage upPage page % % % % % % % % % prePage End nextPage linkPage % % % % % % ');
    // default page variable name
    protected $varPage;


    public function __construct($totalRows,$listRows='',$ajax_func,$parameter='') {
        $this->totalRows = $totalRows;
        $this->ajax_func = $ajax_func;
        $this->parameter = $parameter;
        $this->varPage = C('VAR_PAGE') ? C('VAR_PAGE') : 'p' ;
        if(!empty($listRows)) {
            $this->listRows = intval($listRows);
        }
        $this - > totalPages = ceil ($this - > totalRows / $this - > listRows); // the total number of pages
        $this->coolPages  = ceil($this->totalPages/$this->rollPage);
        $this->nowPage  = !empty($_GET[$this->varPage])?intval($_GET[$this->varPage]):1;
        if(!empty($this->totalPages) && $this->nowPage>$this->totalPages) {
            $this->nowPage = $this->totalPages;
        }
        $this->firstRow = $this->listRows*($this->nowPage-1);
    }

     public function nowpage($totalRows,$listRows='',$ajax_func,$parameter='') {
        $this->totalRows = $totalRows;
        $this->ajax_func = $ajax_func;
        $this->parameter = $parameter;
        $this->varPage = C('VAR_PAGE') ? C('VAR_PAGE') : 'p' ;
        if(!empty($listRows)) {
            $this->listRows = intval($listRows);
        }
        $this - > totalPages = ceil ($this - > totalRows / $this - > listRows); // the total number of pages
        $this->coolPages  = ceil($this->totalPages/$this->rollPage);
        $this->nowPage  = !empty($_GET[$this->varPage])?intval($_GET[$this->varPage]):1;
        if(!empty($this->totalPages) && $this->nowPage>$this->totalPages) {
            $this->nowPage = $this->totalPages;
        }
        $this->firstRow = $this->listRows*($this->nowPage-1);

        return $this->nowPage;
    }

    public function setConfig($name,$value) {
        if(isset($this->config[$name])) {
            $this->config[$name]    =   $value;
        }
    }


    public function show() {
        if(0 == $this->totalRows) return '';
        $p = $this->varPage;
        $nowCoolPage      = ceil($this->nowPage/$this->rollPage);
        $url  =  $_SERVER['REQUEST_URI'].(strpos($_SERVER['REQUEST_URI'],'?')?'':"?").$this->parameter;
        $parse = parse_url($url);
        if(isset($parse['query'])) {
            parse_str($parse['query'],$params);
            unset($params[$p]);
            $url   =  $parse['path'].'?'.http_build_query($params);
        }
        // page up/down string
        $upRow   = $this->nowPage-1;
        $downRow = $this->nowPage+1;
        if ($upRow>0){
            $upPage="".$this->config['prev']."";
        }else{
            $upPage="";
        }

        if ($downRow <= $this->totalPages){
            $downPage="".$this->config['next']."";
        }else{
            $downPage="";
        }
        // << < > >>
        if($nowCoolPage == 1){
            $theFirst = "";
            $prePage = "";
        }else{
            $preRow =  $this->nowPage-$this->rollPage;
            $prePage = "< a class =" ajaxify 'id =' big 'href = "javascript:". $this - > ajax_func. "(". $preRow.)"' > ". $this - > rollPage. "page < / a >";
            $theFirst = "".$this->config['first']."";
        }
        if($nowCoolPage == $this->coolPages){
            $nextPage = "";
            $theEnd="";
        }else{
            $nextRow = $this->nowPage+$this->rollPage;
            $theEndRow = $this->totalPages;
            $nextPage = "< a class =" ajaxify 'id =' big 'href = "javascript:". $this - > ajax_func. "(". $nextRow.)"' > ". $this - > rollPage. "page < / a >";
            $theEnd = "".$this->config['last']."";
        }
        // 1 2 3 4 5
        $linkPage = "";
        for($i=1;$i<=$this->rollPage;$i++){
            $page=($nowCoolPage-1)*$this->rollPage+$i;
            if($page!=$this->nowPage){
                if($page<=$this->totalPages){
                   $linkPage .= "  ".$page." ";
                }else{
                    break;
                }
            }else{
                if($this->totalPages != 1){
                    $linkPage .= " ".$page."";
                }
            }
        }
        $pageStr  =  str_replace(
            array('%header%','%nowPage%','%totalRow%','%totalPage%','%upPage%','%downPage%','%first%','%prePage%','%linkPage%','%nextPage%','%end%'),
            array($this->config['header'],$this->nowPage,$this->totalRows,$this->totalPages,$upPage,$downPage,$theFirst,$prePage,$linkPage,$nextPage,$theEnd),$this->config['theme']);
        return $pageStr;
    }

}

?>

Конкретные шаги

Далее, шаг за шагом, с контроллера мы реализуем бесплатный эффект обновления страницы thinkphp.

1. Часть контроллера

Это всего лишь часть основного кода контроллера.

// instantiate the data model
        $info=M('info');
        // statistics the number of data to query
        $count=$info->where("ID='$id'")->count();
        // instantiates the page-splitting class, passing in three parameters: the total number of data, the number of data bars per page, and the name of the jQuery ajax method to call
        $p=new \Host\Common\AjaxPage($count,10,'server');
        // generates paging information
        $page=$p->show();
        Limit represents the number of queries per page, which is 10
        $data = $server_info->where("ID='$id'")->limit($p->firstRow.','.$p->listRows)->select();
        The assign method assigns values to the template
        $this->assign('list',$data);
        $this->assign('page',$page);
        //ajax returns information
        $res["content"] = $this->fetch('Index/myinfolist')
        $this->ajaxReturn($res);

2. Раздел шаблона

Название шаблона: myinfolist.html это то же самое, что и шаблон, отображаемый в контроллере выше.

 $res["content"] = $this->fetch('Index/myinfolist')

Поскольку фреймворк начальной загрузки используется в интерфейсе, многие классы в этом шаблоне являются начальной загрузкой. Тебе не нужно слишком сильно беспокоиться об этом, просто





    
Caption
< I class="icon-globe"> info list
// loop assignment
a b c d
{$info.a} {$info.b} {$info.c} {$info.d}
// paging information
{$page}

Часть 3. Js

Этот шаг является ключом к достижению страницы без обновления в ajax. Он ИСПОЛЬЗУЕТ ajax-связь jQuery, записывает полученные данные в шаблон посредством взаимодействия ajax с базой данных, заменяет предыдущий набор данных и

function server(id){  
         var id = id;
            $.get('/Server/myinfo', {'p':id}, function(data){  
            // use the get method to send information to the myinfo method in the Server
             $("#server").replaceWith("
" +data.content+ "
"); }); }

Сервер имен методов-это третий параметр, передаваемый в контроллере для создания экземпляра класса разделения страниц. Каждый раз, когда вы нажимаете “Включить страницу” в шаблоне, вы запускаете сервер методов js (p), который передает номер страницы страницы.

$p=new \Host\Common\AjaxPage($count,10,'server');

Сервер имен методов-это третий параметр, передаваемый в контроллере для создания экземпляра класса разделения страниц. Каждый раз, когда вы нажимаете “Включить страницу” в шаблоне, вы запускаете сервер методов js (p), который передает номер страницы страницы.

+ data

Замените идентификатор шаблона для div сервера, добейтесь эффекта подкачки.

резюме

Описанные выше шаги являются конкретными шагами для создания страницы ajax, метод jQuery ajax имеет $. Ajax, $. Get, $.