Вероломство
PHP:
$this->uri .= «https://php.ru/» . $item; } }из /test/page/2 получаем /test/page
может быть есть изящнее способы?
Sail
@Вероломство, substr() по координатам от strrpos(),?
— Добавлено —
Или регуляркой отсечь хвост из слеша и числа.
Вероломство
/test/page/2/2
хоть у меня роутер и не пропустит такого рода адрес в 404 выкинет, но всё-равно косяк вылазит теоретически
MouseZver
PHP:
<?php # result: /test/page
Sail
Регуляркой отсечь весь хвост, начинающийся со слеша и цифры
Вероломство
чувак ты крут, я даже не подозревал, что trim так умеет, благодарю: красота
miketomlin
То что триму можно передавать доп. набор удаляемых символов, это, правда, вкусная плюшка. Но сомневаюсь, что это прям красота для вашего случая. Не идите на поводу у WP и прочей лабуды, передавайте номер страницы пагинации в GET-параметре
Вероломство
у меня нету GET я на уровне роутера ловлю параметры, примерно так
PHP:
Router::addRoute(‘{controller:unit}/{action:ground}/{page:[1-9]d*}’);раньше использовал что-то вроде &page=2, но сейчас полностью отказался
miketomlin
Это пофиг. Роуты могут быть и с GET, просто с GET больше шансов использовать один роут вместо двух похожих.
Адреса для ссылок обычно делаются не путем секвестрирования текущего, а путем их полной постройки. Хотя часто бывает трудно отказаться от соблазна для создания нового адреса что-нибудь отчикать от текущего, понимаю
Вероломство
PHP:
<?php namespace core; use Error; class Pagination { public $uri; public $per_page; public $total; public $count_pages; public $current_page; public function __construct($per_page, $current_page, $total) { $this->per_page = $per_page; $this->total = $total; $this->count_pages = $this->getCountPages(); $this->current_page = $this->getCurrentPage($current_page); } public function getCountPages() { } public function getCurrentPage($current_page) { ‘options’ => [ ‘min_range’ => 1, ‘max_range’ => $this->count_pages ] ])) { return $current_page; } throw new Error(‘Страница не найдена’, 404); } public function getStart() { return ($this->current_page — 1) * $this->per_page; } public function __toString() { return $this->getHtml(); } public function getHtml() { $start_page = $back = $page2left = $page1left = $page1right = $page2right = $forward = $end_page = null; if ($this->current_page > 3) { $start_page = «<li class=»page-item»><a class=»page-link» href=»https://php.ru/forum/threads/request_uri-bez-nomera-stranicy-paginacii.91223/{$this->uri}/1″>«</a></li>»; } if ($this->current_page > 1) { $back = «<li class=»page-item»><a class=»page-link» href=»https://php.ru/forum/threads/request_uri-bez-nomera-stranicy-paginacii.91223/{$this->uri}/» . ($this->current_page — 1) . «»>‹</a></li>»; } if ($this->current_page — 2 > 0) { $page2left = «<li class=»page-item»><a class=»page-link» href=»https://php.ru/forum/threads/request_uri-bez-nomera-stranicy-paginacii.91223/{$this->uri}/» . ($this->current_page — 2) . «»>» . ($this->current_page — 2) . «</a></li>»; } if ($this->current_page — 1 > 0) { $page1left = «<li class=»page-item»><a class=»page-link» href=»https://php.ru/forum/threads/request_uri-bez-nomera-stranicy-paginacii.91223/{$this->uri}/» . ($this->current_page — 1) . «»>» . ($this->current_page — 1) . «</a></li>»; } if ($this->current_page + 1 <= $this->count_pages) { $page1right = «<li class=»page-item»><a class=»page-link» href=»https://php.ru/forum/threads/request_uri-bez-nomera-stranicy-paginacii.91223/{$this->uri}/» . ($this->current_page + 1) . «»>» . ($this->current_page + 1) . «</a></li>»; } if ($this->current_page + 2 <= $this->count_pages) { $page2right = «<li class=»page-item»><a class=»page-link» href=»https://php.ru/forum/threads/request_uri-bez-nomera-stranicy-paginacii.91223/{$this->uri}/» . ($this->current_page + 2) . «»>» . ($this->current_page + 2) . «</a></li>»; } if ($this->current_page < $this->count_pages) { $forward = «<li class=»page-item»><a class=»page-link» href=»https://php.ru/forum/threads/request_uri-bez-nomera-stranicy-paginacii.91223/{$this->uri}/» . ($this->current_page + 1) . «»>›</a></li>»; } if ($this->current_page < ($this->count_pages — 2)) { $end_page = «<li class=»page-item»><a class=»page-link» href=»https://php.ru/forum/threads/request_uri-bez-nomera-stranicy-paginacii.91223/{$this->uri}/{$this->count_pages}«>»</a></li>»; } return ‘<nav class=»mt-1″><ul class=»pagination pagination-sm justify-content-center m-0″>’ . $start_page . $back . $page2left . $page1left . ‘<li class=»page-item active»><a class=»page-link»>’ . $this->current_page . ‘</a></li>’ . $page1right . $page2right . $forward . $end_page . ‘</ul></nav>’; } }
miketomlin
ЭТО не СУТЬ, а самообман Причем с возможными трудно уловимыми багами.
В конце вообще жесть. Я про getHtml. Отчетливо ощущается душок поповщины. Был когда-то такой продвиженец г/кода в массы.
P.S. Но не буду наседать. Авось само со временем дойдет. Хотя лично мне многое вдалбливали
— Добавлено —Немного раскрою, чтобы не выглядеть каким-нибудь трол-ло-ло. Часто в конце путей всплывают различные числовые идентификаторы. Ваша реализация это намертво убивает. Это только для затравки. Там много еще всякого Г может повсплывать.
Вероломство
в том-то и дело, что сейчас бага нет , до этого проскакивало кое-что
поповщину видел только в интернете на картинках обложки книг, мне некогда их просто читать
говнокодю всё сам + вопросы в сообществах, во фреймворки заглядываю иногда, чтобы поржать и лишний раз убедиться, что всё гораздо проще, когда сам
— Добавлено —
@miketomlin что ещё за числовые идентификаторы? как они туда попали, я про них знаю, я задавал правила под них?не очень понял
miketomlin
У вас как класс называется? Ему должны быть параллельны ваши правила
— Добавлено —
Хотя вы даже умудрились разметку в него затащить
Вероломство
@miketomlin моим правилом туда прилетает current_page и меня устраивает разметка
ты видимо предлагаешь разметку в отдельный файл вынести и заинкудить в методе, так мне без разницы
miketomlin
Это да, но там и сама разметка – жесть. Оно циклом делается. Что-то типа такого: https://gency.ru/comment/33
Вероломство
ну пока что так, будет время допилю что-то, там же разметка по условиЯМ, подумаю, ок
askanim
начать пользоваться любым framework и научится работать в нём с маршрутами и забыть про костыли на регулярках при парсинге урла.
MouseZver
Ты программист или просто конструкторщик ?
askanim
Не ну можешь дальше руками землю копать когда рядом экскаватор стоит !
Вероломство
PHP:
что тут не так сделано и неумолимым образом требует развернуть фреймворк на 50 мегабайт?
и зачем мне становиться пользователем фреймворка, если я сам могу его написать?