0

好吧,我有一个工作脚本(见下文),但它看起来很笨拙和多余;在我的辩护中,我在很多个月前编写了这段代码,但这不是重点。我很好奇是否有人对编写此代码的更有效方式有想法,循环和条件更少,以及代码中的噪音。

有问题的代码:

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但这不是很重要。我的问题是有一种更清洁的方法来处理这些链接的构建吗?还是我被这组循环困住了?

4

1 回答 1

1

codereview.stackexchange.com的帮助下,我找到了我需要的东西。您可以在这里找到更深入的方法的答案,但如果有人遇到这个并且很好奇,这里是更新的代码:

private function pageLinks($num, $page = 1, $search = false, $ne = false) {
    $query = ($search && is_numeric($ne)) ? "&query=" . $search . "&by=" . $ne : null;
    $links = "Page(s):" . $this->page_link(1, $query);
    $npp = $this->numPerPage;
    $half = 4;
    $count = floor($num / $npp) + 1;
    $from = $page - $half;
    if($from <= 2) {
        $from = 2;
    }
    $to = $page + $half;
    if($to >= $count - 1) {
        $to = $count - 1;
    }
    if($from > 2) {
        $links .= "...";
    }
    for($i = $from; $i <= $to; $i++) {
        $links .= $this->page_link($i, $query);
    }
    if($i < $count) {
        $links .= "...";
    }
    $links .= $this->page_link($count, $query);
    return($links);
}
private function page_link($num, $query) {
    return("<a href=\"search.php?page=" . $num . $query . "\" class=\"table_link\">" . $num . "</a>");
}
于 2013-08-17T23:20:32.307 回答