PHP paging (imitating google)-interview question answering _ php skills

Source: Internet
Author: User
I went to XX for an interview today, and it was not ideal. Because ZendFramework has been deepened for a while, and common functions and methods have not been practiced. The answer to the written test is not very good, especially for the JS part, which is why I haven't reviewed it for a long time.
On the machine, the question is to write a class similar to google paging. when we want to take the maximum integer similar to 9/2, we can't remember the name of the function ceil, and we have been dizzy for a long time.
Finally, the test program is not wrong, but it cannot be displayed normally. later (after going home), I checked the statement: for ($ I = 0; $ I ++; $ I <9) was wrong, so I decided to write it again, so I had the following code:

The code is as follows:


/*
The display style is as follows:
[1] 2 3 4 5 6 7 8 9 10... 100 Last Page
Home Page 1... 12 13 14 15 [16] 17 18 19 20... 100 at the end of the next page
Home Page 1 .. 92 93 94 95 96 97 98 [99] 100

Usage:
$ CurrentPage = $ _ GET ['Page']? $ _ GET ['Page']: 1;
$ Pagep = new pagep (500, 10, 11, $ currentPage, 'Test. php? Page = ');
$ Pagep-> show ();

*/
Class pagep
{
Public $ part1;
Public $ part2;
Public $ part3;
Public $ part4;
Public $ part5;

/*
Split the following page display:
Home Page 1... 12 13 14 15 [16] 17 18 19 20... 100 at the end of the next page
$ Part1: Homepage
$ Part2: 1 ..
$ Part3: 12 13 14 15 [16] 17 18 19 20
$ Part4: .. 100
$ Part5: Next page
*/

Public $ allPage; // The total number of pages.
Public $ allRocords; // The total number of records.
Public $ perPage; // number of records per page
Public $ showPagesNo; // displays the total number of page numbers in the pagination bar. There are a total of 11 display styles.
Public $ currentPage; // current page
Public $ urlModel; // Url link style

Public $ startHidden; // when the page number of 1... appears, the middle page is hidden.
Public $ endHidden; // hide the middle page at the end of the page when... 100 is displayed

Public function _ construct ($ allRocords, $ perPage, $ showPagesNo, $ currentPage, $ urlModel ){
$ This-> allRocords = $ allRocords;
$ This-> perPage = $ perPage;
$ This-> showPagesNo = $ showPagesNo;
$ This-> currentPage = $ currentPage;
$ This-> urlModel = $ urlModel;
$ This-> allPage = $ this-> getAllPage ();

$ This-> startHidden = $ this-> getInt ($ this-> showPagesNo)/2); // 6
$ This-> endHidden = $ this-> allPage-$ this-> startHidden; // 94
}

Public function getUrl ($ _ index = ''){
$ _ Current = $ _ index;
If ($ _ index = 'pre') $ _ current = $ this-> currentPage-1;
If ($ _ index = 'next') $ _ current = $ this-> currentPage + 1;
If ($ _ index = '') $ _ current = $ this-> allPage;
Return $ this-> urlModel. $ _ current;
}

Public function getAllPage (){
Return $ this-> getInt ($ this-> allRocords/$ this-> perPage );
}

Public function getInt ($ _ float ){
$ _ Int = $ _ float;
If ($ _ index = strpos ($ _ float, '.') = true ){
$ _ Int = substr ($ _ float, 0, $ _ index );
$ _ Int ++;
}
// No alternative plan for ceil
Return $ _ int;
}

Public function getPart1 (){
$ Content = 'geturl (1). '"> homepage getUrl ('Pre').'"> previous page ';
If ($ this-> currentPage <= $ this-> startHidden ){
$ Content = '';
}
Return $ content;
}

Public function getPart2 (){
$ Content = 'geturl (1). '"> 1 ';
$ Add = '';
If ($ this-> currentPage> $ this-> startHidden ){
$ Add = '...';
}
If ($ this-> currentPage = 1 ){
$ Content = '[1]';
$ Add = '';
}
$ Part2 = $ content. $ add;
Return $ part2;
}

Public function getPart3 (){
$ Content = '';
If ($ this-> currentPage <= $ this-> startHidden ){
// [1] 2 3 4 5 6 7 8 9 10... 100 Last Page
$ Long = $ this-> showPagesNo-2;
For ($ I = 0; $ I <$ long; $ I ++ ){
$ J = $ I + 2;
If ($ j = $ this-> currentPage ){
$ Content. = '['. $ this-> currentPage. ']';
} Else {
$ Content. = 'geturl ($ j). '">'. $ j .'';
}

}

} Elseif ($ this-> currentPage >=$ this-> endHidden ){
// On the homepage, 1 .. 92 93 94 95 96 97 98 [99] 100
$ Long = $ this-> showPagesNo-2;
$ _ Start = $ this-> allPage-$ long;
For ($ I = 0; $ I <$ long; $ I ++ ){
$ J = $ _ start + $ I;
If ($ j = $ this-> currentPage ){
$ Content. = '['. $ this-> currentPage. ']';
} Else {
$ Content. = 'geturl ($ j). '">'. $ j .'';
}
}
} Else {
// The last page of the home page 1... 12 13 14 15 [16] 17 18 19 20... 100
$ Long = $ this-> showPagesNo-2;
$ Offset = $ this-> getInt ($ long/2)-1;
$ _ Start = $ this-> currentPage-$ offset;
For ($ I = 0; $ I <$ long; $ I ++ ){
$ J = $ _ start + $ I;
If ($ j = $ this-> currentPage ){
$ Content. = '['. $ this-> currentPage. ']';
} Else {
$ Content. = 'geturl ($ j). '">'. $ j .'';
}
}
}
$ Part3 = $ content;
Return $ part3;
}

Public function getPart4 (){
$ Content = 'geturl (). '">'. $ this-> allPage .'';
$ Add = '';
If ($ this-> currentPage <$ this-> endHidden ){
$ Add = '...';
}
If ($ this-> currentPage ==$ this-> allPage ){
$ Content = '['. $ this-> allPage. ']';
$ Add = '';
}
$ Part4 = $ add. $ content;
Return $ part4;

}

Public function getPart5 (){
$ Content = 'geturl ('next'). '"> getUrl ().'"> last page ';
If ($ this-> currentPage >=$ this-> endHidden ){
$ Content = '';
}
Return $ content;
}

Public function show (){
// Illegal judgment
If (! Is_numeric ($ this-> currentPage) | $ this-> currentPage <0 | $ this-> currentPage> $ this-> allPage ){
Print 'Error: pageNo is flase ';
Return;
}
// If the total number of pages does not reach the total number of pages displayed on the page bar, all are displayed.
If ($ this-> allPage <$ this-> showPagesNo ){
$ Long = $ this-> allPage;
For ($ I = 0; $ I <$ long; $ I ++ ){
$ J = $ I + 1;
If ($ j = $ this-> currentPage ){
$ Content. = '['. $ this-> currentPage. ']';
} Else {
$ Content. = 'geturl ($ j). '">'. $ j .'';
}

}
Print $ content;
Return;
}
$ This-> part1 = $ this-> getPart1 ();
$ This-> part2 = $ this-> getPart2 ();
$ This-> part3 = $ this-> getPart3 ();
$ This-> part4 = $ this-> getPart4 ();
$ This-> part5 = $ this-> getPart5 ();

Print $ this-> part1. $ this-> part2. $ this-> part3. $ this-> part4. $ this-> part5;
}
}
?>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.