Многоточие, когда много пунктов в меню

383
01 августа 2017, 18:32

Сейчас генерирую ссылки на страницы меню таким кодом:

for ($i = 0; $i < $num_of_pages; $i++) {
  $actual = $i + 1;
  if($i === intval($page)){
    echo "<a  id=\"now\" href=\"http://site.com/index.php?page=".$i."\">".$actual."</a>&nbsp;"; 
  } else {
    echo "<a id=\"other\" href=\"http://site.com/index.php?page=".$i."\">".$actual."</a>&nbsp;";
  }
}

И он выводит все количество страниц в меню. Как можно сделать ограничение, так, чтобы с каждой стороны от актуальной страницы выводилось по 2 предыдущих/следующих, а вместо оставшихся многоточие. Допустим:

1 2 3 ...

1 2 3 4 ...

1 2 3 4 5 ...

... 2 3 4 5 6 ...

Пока идей, как это отслеживать грамотно, не пришло.

Answer 1

id=other - это нехорошо. id предполагает уникальное значение.

https://www.w3.org/TR/html5/dom.html#the-id-attribute The id attribute specifies its element's unique identifier (ID). The value must be unique amongst all the IDs in the element's home subtree and must contain at least one character. The value must not contain any space characters.

Вместо ID лучше использовать Class

А теперь по делу:

// Получили $page, проверили на границы (больше 0, меньше $num_of_pages)
$page= min($num_of_pages-1, max(0, intval($_GET['page'])));
// Теперь рассчитаем, границы, какие будем показывать
$from = max(0, $page-2); // меньше на 2 страницы, но не меньше 0
$to = min($num_of_pages-1, $page+2); // больше на 2 страницы, но не больше $num_of_pages
// если начинаем не с 0, то показать многоточие
if ($from!==0){
  echo "&hellip;";
}
for ($i = $from; $i <= $to; $i++) {
  echo ' <a class='.($i===$page ? "now" : "other").' href="http://site.com/index.php?page='.$i.'">'.($i+1).'</a> ';
}
// если закончили не последней страницей, показать многоточие
if ($to!==$num_of_pages-1){
  echo "&hellip;";
}
READ ALSO
Помогите определить CMS или Framework сайта

Помогите определить CMS или Framework сайта

Возникла задача поднять сайтДоступ по FTP есть, однако для настройки nginx необходимо понять какой CMS или Framework используется

340
Реляционная База Данных Laravel

Реляционная База Данных Laravel

У меня есть такие таблицы:

291
как обрезать эту строку?

как обрезать эту строку?

Как обрезать строку чтобы выдавало только "PBcqVio2ado" ? "https://wwwyoutube

279
как перейти на GNU parallel?

как перейти на GNU parallel?

как вот это (это команда запускается кроном 1 раз в минуту)

267