Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
я делаю вывод страниц по полю sef из БД, чтобы сразу были красивые урлы
но не получается нормально сделать на странице с одной новостью ссылки previous и next
в файле routes.php
Route::get('news', 'NewsController@getIndex'); / все новости
Route::get('news/{title}', 'NewsController@showpage'); / одна новость
попытался сделать так в контроллере NewsController
public function showpage($title)
{
$pages = Page::where('sef', '=', $title)->get();
foreach ($pages as $page) // access user properties here
{
$previous = Page::where('id', '<', $page->id)->get()->first();
$next = Page::where('id', '>', $page->id)->get()->first();
}
return View::make('news.item')->withPages($pages)->with('previous', $previous)->with('next', $next);
}
в шаблоне вывожу
<a href="{{ URL::to( 'news/' . $previous->sef ) }}">Previous</a>
<a href="{{ URL::to( 'news/' . $next->sef ) }}">Next</a>
почти работает, но есть 2 проблемы:
1) ссылка previous всегда ссылается на одну и ту же статью, у которой id = 1
2) на предпоследней странице ссылка next уже вызывает ошибку
Trying to get property of non-object (View: D:\OpenServer\domains\schel4ok.dev\app\views\news\item.blade.php)
Не в сети
вот так получилось немного лучше
$previous = Page::where('id', '=', $page->id-1)->get()->first();
$next = Page::where('id', '>', $page->id+1)->get()->first();
при этом обе ссылки работают как надо, только не отображается страница с максимальным id в БД. Видимо потому, что для неё не существует $next.
Надо как-то сделать обработку этого события
Не в сети
немного доработал
class NewsController extends BaseController {
public function getIndex()
{
$pages = Page::where('category_id', '=', 85)
->orderBy('created_at', 'desc')
->paginate(10); // все новости по 10 штук на страницу
return View::make('news.index')->withPages($pages);
}
public function showpage($title)
{
$pages = Page::where('category_id', '=', 85)->where('sef', '=', $title)->get();
foreach ($pages as $page) // access user properties here
{
$previous = Page::where('id', '=', $page->id - 1)->get()->first();
$next = Page::where('id', '=', $page->id + 1)->get()->first();
}
return View::make('news.item')
->withPages($pages)
->withPrevious($previous)
->withNext($next);
}
}
<a href="{{ URL::to( 'news/' . $previous->sef ) }}">Previous</a>
@if (isset ($next))
<a href="{{ URL::to( 'news/' . $next->sef ) }}">Next</a>
@endif
Новостей на сайте немного, поэтому они хранятся в одной таблице с остальными страницами в отдельной категории id=85
При этом новости расположены в конце БД, поэтому последняя страница рушилась с ошибкой, которую я вылечил при помощи @if (isset ($next)).
Но вот проблему с $previous я пока решить не могу.
При нажатии на ссылку previous на странице с первой новостью я попадаю на страницу из другой категории, которая выдает ошибку Undefined variable: previous
И вот как убрать ссылку previous со страницы с первой новостью мне пока непонятно.
Не в сети
всё!!! разобрался
@if (isset($previous) and $previous->category_id === $page->category_id )
<a href="{{ URL::to( 'news/' . $previous->sef ) }}">Previous</a>
@endif
@if (isset($next) and $next->category_id === $page->category_id )
<a href="{{ URL::to( 'news/' . $next->sef ) }}">Next</a>
@endif
Не в сети
Костыль тут, костыль там...
Первый вариант самый годный. Хинт: orderBy() или min() max().
Не в сети
Страницы 1