ホームページ >バックエンド開発 >PHPチュートリアル >PHP長い記事のページング原理と実装手順_PHPチュートリアル

PHP長い記事のページング原理と実装手順_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 16:56:37852ブラウズ

以下では、長い記事ページングと記事ページングのプログラムコードを分析します。必要な友達はそれを参照してください。

方法 1: 文字数制御に応じたページング

文字数によるページネーション方法はシンプルで使いやすいですが、効果はあまり良くありません。

一般的な考え方: まず、各ページに収容できる最大単語数を設定し、次に記事コンテンツの合計単語数を計算し、合計単語数と合計ページ数に基づいて合計ページ数を計算します。 1 ページの最大単語数。このようにして、ページングの準備が完了しました。

各ページの特定の表示コンテンツは、コンテンツのインターセプトを通じて実現できます。たとえば、ページに 500 ワードが含まれ、記事に 2200 ワードが含まれている場合、page=2 がページに渡されると、501 番目から 1000 番目までの間のコンテンツが表示されます。

この方法は簡単ですが、記事のコンテンツにはHTMLタグが付いていることが多いので、コンテンツを切り取る際にHTMLタグを閉じるのが難しく、ページング後の影響が顕著になります。同じです。

コードは次のとおりです コードをコピー


$content1="コンテンツは非常に長い必要があります...";

$current=$_REQUEST['page_t']
$result=ff_page($content1,$current); エコー $result;

関数ff_page($content,$page)
                                                   グローバル $expert_id

If (空($page)) {
$page = 1 ;
} } //$pageに初期値を代入

$PageLength = 2000 //ページあたりの単語数
; $CLength = strlen($content) //記事の長さ
; $PageCount = Floor(($CLength / $PageLength)) + 1 //ページ数を計算します
; $PageArray=array();//改ページ位置の配列
$Seperator = array("n","r",".","!","?",";",",",""","'",".","!"," ? ",";"); //区切り記号

//エコー "ページ数:".$PageCount."
"; //エコー "長さ: ".$CLength."
"; //strpos() 関数は、別の文字列内で最初に出現した文字列の位置を返します

If($CLength                                                                     $content をエコーし​​ます。 }//ページが 1 つしかない場合は、直接印刷します
それ以外{ $PageArray[0]=0; $Pos = 0; $i=0; //最初のページ、print_r($Seperator); for( $j=0 ; $j                                                                                      $Pos=strpos($content,$Seperator[$j],$PageArray[$i]+1900); while($Pos > 0 && $Pos $i*$PageLength )
                                                                    $PageArray[$i] = $Pos ;
If ($Pos+$PageLength > $CLength)
{
$start_p = $CLength-1; }
その他{
$start_p = $Pos+$PageLength ;
}
//位置内の合計文字数を超えないように、位置を見つけるための開始点を与えます
$Pos = strpos($content,$Seperator[$j],$start_p) ; }
//ページングポイントが見つかったら、ループから抜け出す
If($PageArray[$i]>0)
                                                                                    $j = $j + sizeof($Seperator) + 1;
                                                                        }

for( $i = 1; $i                                                    for( $j = 0 ; $j                                                                            $Pos=strpos($content,$Seperator[$j],$PageArray[$i-1]+1900); while($Pos > 0 && $Pos $i*$PageLength )
{
$PageArray[$i] = If ($Pos+$PageLength > $CLength)
{
$start_p2 = $CLength-1; }
その他{
$start_p2 = $Pos+$PageLength ;
}
$Pos = strpos($content,$Seperator[$j],$start_p2)
                                                        If($PageArray[$i]>0)
{
$j = $j + sizeof($Seperator) + 1; }
                                                        }
//--PHP の長い記事のページング関数の最終ページ
$PageArray[$PageCount-1] = $CLength
//$ページ=2;
If($page==1)
{
$output=substr($content,0,$PageArray[$page-1]+2); }
If($page > 1 && $page {
$output=substr($content,$PageArray[$page-2]+2,$PageArray[$page-1]-$PageArray[$page-2]); $output=" (ページ ".($page-1) からの続き。")n".$output; }

// echo str_replace("n","
   ",$output); //入力して改行し、必要に応じて調整します
エコー $output

if($PageCount > 1)
{
エコー "

"; echo "".$page."/".$PageCount."page "; If($page>1)
echo "前のページ "; その他
echo "前のページ";                                        for( $i=1 ; $i                                   echo "[".$i."] ";                                                        
If($page echo " 次のページ "; それ以外は
「次のページ」をエコーし​​ます
エコー "
";                                                         }
}

?>




方法 2: 改ページを使用してページを区切る

改ページによるページングは​​、最初の方法よりも理想的です。

一般的な考え方: 記事のコンテンツを編集するときは、コンテンツに改ページ (


など) を挿入し、記事が表示されるときに記事のコンテンツを分割します。各部分はページのコンテンツを表し、どのページを表示するかを制御します。パラメータを渡すことで表示します。

結局のところ、この方法は、手動で制御されたページングによってインターセプトされたコンテンツの方がユーザーフレンドリーであり、HTML タグが閉じられていない状況をある程度回避できます。

記事コンテンツのページネーション コードは、エディターによって挿入された改ページに基づいて動作し、非常に美しいオフセット効果を備えたページネーションを作成できます。

コードは次のとおりです コードをコピー

クラスコンテンツページ
{
private $content; //記事の内容
private $pagesize; //ページあたりの最小バイト数
private $breakflag; //改ページ (カスタマイズ可能、デフォルトは n)
private $pageurl //URL アドレス
private $pagevar; //ページングパラメータ
public $pagecount; // 総ページ数
public $page; //現在のページ番号
public $pagebreak; //各ページの開始位置

function __construct($content = "",$pagesize = 10,$breakflag = "n",$pageurl = '',$pagevar = 'p')
{
$this->content = $content;
$this->pagesize = $pagesize;
$this->breakflag = $breakflag;
$this->pageurl = $pageurl;
$this->pagevar = $pagevar;
$this->getpages();
}

//総ページ数、各ページの開始位置と終了位置
パブリック関数 getpages()
{
$contentlen = strlen($this->content); //記事の総バイト数
$this->改ページ[0] = 0;
$i = 0;
$offset = $this->ページサイズ;

for ($k=0;$kpagesize;$k++)
{
if($offset > $contentlen)
{
$i++;
$this->pagebreak[$i] = $contentlen;
休憩
}
// $this->pagevar が表示される場所を検索します
$where = strpos($this->content,$this->breakflag,$offset);
if($where > $contentlen または intval($where) {
$i++;
$this->pagebreak[$i] = $contentlen;
休憩
}
それ以外は
{
$i++;
$this->改ページ[$i] = $where;
$offset = $where + $this->ページサイズ;
}
}
$this->ページ数 = $i;
if(isset($_get[$this->pagevar]) && $_get[$this->pagevar] >1 && $_get[$this->pagevar] <= $this->pagecount)
{
$this->page = $_get[$this->pagevar];
}
それ以外
{
$this->ページ = 1;
}
}

//各ページのコンテンツ
関数getpage()
{
// 現在のページ番号のデータをインターセプトします
if($this->ページ > 1)
{
return substr($this->content,$this->pagebreak[$this->page-1]+1,$this->pagebreak[$this->page] - $this->pagebreak [$this->page-1]);
}
それ以外
{
return substr($this->content,$this->pagebreak[$this->page-1],$this->pagebreak[$this->page] - $this->pagebreak[$これ->ページ-1]);
}

}

//ページバー
パブリック関数 getpagenav()
{
if($this->ページ > 1)
{
$pagenav = "前のページ< /a> ; ";
}

//数字页コードを出力
  for($j=1;$j<=$this->ページ数;$j++)
  {
   if($j == $this->page)
   {
    $pagenav .= "".$j."  ";
   }
   それ以外
   {
    $pagenav .= "
".$j."  ; ";
   }
  }
  //次の页
  if($this->ページ < $this->ページ数 && $this->ページ数 >1)
  {
   $pagenav .= "下一页< ;/a>  ";
  }
  $pagenav を返します;
 }
 //获取url地址
 パブリック関数 geturl()
 {
  $url = $_server['request_uri'];
  $parse_url = parse_url($url);
  $query_url = $parse_url['クエリ'];
 
  if($query_url)
  {
   $query_url = ereg_replace("(^|&)".$this->pagevar."=".$this->page,"",$query_url);
   $url = str_replace($parse_url['query'],$query_url,$url);
   if($query_url)
   {
    $url .= "&".$this->pagevar;
   }
   それ以外
   {
    $url .= $this->pagevar;
   }
  }
  それ以外
  {
   $url .= "?".$this->pagevar;
  }
  $url を返します;
 }
}

$content = "第一页:文章内容分页阿斯顿浪空間阿斯顿来看福建省地方吉林省福建路口附近大手拉飞机上浪费的说浪费监理费
2番目:阿斯顿房间阿双方は啊对萨拉开発行谁得谁来付款将令对方空的来福建阿里か否かを承知している
第三页:欧文炯诶哦生地拉开面来看就继续超文章内容分页滤机蓝卡
4番目:ヨーロッパの文章の拉致と4分の1の放送は両方の愛です。 $model = 新しいコンテンツページ($content);
echo $model->getpage();  //出分页内容
echo $model->getpagenav(); //出页码
?>