私は実際に動作するスクリプトを持っています (以下を参照)。私の弁護では、私はこのコードを何ヶ月も前に書きましたが、それは重要ではありません。ループや条件を減らし、コード内のノイズを少なくして、このコードをより効率的に記述する方法について誰かがアイデアを持っているかどうか、私は興味がありました。
問題のコード:
private function pageLinks($num, $page = 1, $search = false, $ne = false) {
$query = ($search) ? '&query='.$search : null;
$by = (is_numeric($ne)) ? '&by='.$ne : null;
$links = 'Page(s):<a href="search.php?page=1' . $query . $by . '" class="tableLink">1</a>';
$count = 1;
$npp = $this->numPerPage;
$buttons = 9;
$half = 4;
for($i = 1; $i <= $num; $i++) {
if(($i%$npp) === 0) {
$count++;
}
}
if($count < $buttons) {
for($i = 2; $i <= $count; $i++) {
$links .= '<a href="search.php?page=' . $i . $query . $by . '" class="tableLink">' . $i . '</a>';
}
} elseif($page <= ($half + 2)) {
for($i = 2; $i <= $buttons; $i++) {
$links .= '<a href="search.php?page=' . $i . $query . $by . '" class="tableLink">' . $i . '</a>';
}
$links .= '...<a href="search.php?page=' . $count . $query . $by . '" class="tableLink">' . $count . '</a>';
} elseif($page <= ($count - ($half + 2))) {
$links .= '...';
for($i = $half; $i > 0; $i--) {
$links .= '<a href="search.php?page=' . ($page - $i) . $query . $by . '" class="tableLink">' . ($page - $i) . '</a>';
}
$links .= '<a href="search.php?page=' . ($page - $i) . $query . $by . '" class="tableLink">' . ($page - $i) . '</a>';
for($i = 1; $i <= $half; $i++) {
$links .= '<a href="search.php?page=' . ($page + $i) . $query . $by . '" class="tableLink">' . ($page + $i) . '</a>';
}
$links .= '...<a href="search.php?page=' . $count . $query . $by . '" class="tableLink">' . $count . '</a>';
} else {
$links .= '...';
for($i = $buttons - 1; $i >= 0; $i--) {
$links .= '<a href="search.php?page=' . ($count - $i) . $query . $by . '" class="tableLink">' . ($count - $i) . '</a>';
}
}
return($links);
}
メソッドは次のように呼び出されます。
$links = $this->pageLinks($count, $page, $url, $ne);
そして、変数は次のとおりです。
$count
= データベース内のクライアントの総数(int)
$page
= 構築元の現在のページ(int)
$url
= 検索用の名前または電子メール(String)
$ne
= 名前 (1) または電子メール (2) による検索文字列(int)
そして、出力は(リンクとして)のようなものです:
ページ: 1
2
3
4
5
6
7
8
9
...33
または、中間の場合 (20 ページ):
ページ: 1
... 16
17
18
19
20
21
22
23
24
...33
現在、これは常に検索関数を介して呼び出されるとは限らないため、$url
とのデフォルト値です$ne
が、これはあまり重要ではありません。私の質問は、これらのリンクの構築を処理するよりクリーンな方法はありますか? それとも、このループのクラスターで立ち往生していますか?