Я работаю над созданием базового форума (на основе laracasts.com/discuss). Когда пользователь публикует ответ в теме:
- Я хотел бы направить их в конец списка ответов с разбивкой на страницы с якорем их ответа (такое же поведение, как у Laracasts).
- Я также хотел бы вернуть пользователя на правильную страницу, когда он редактирует один из своих ответов.
Как узнать, на какой странице будет опубликован новый ответ (?page=x) и как вернуться на нужную страницу после редактирования ответа? Или из основного списка постов, на какой странице находится последний ответ?
Вот моя текущая модель ForumPost (за вычетом нескольких несвязанных вещей) -
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* Class ForumPost
*
* Forum Posts table
*
* @package App
*/
class ForumPost extends Model {
/**
* Post has many Replies
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function replies()
{
return $this->hasMany('App\ForumReply');
}
/**
* Get the latest reply for a post
* @return null
*/
public function latestReply()
{
return $this->replies()->orderBy('created_at', 'desc')->first();
}
}
ОБНОВЛЕНИЕ
Взгляните на это и дайте мне знать, что вы думаете. Это немного странно в том, как это работает, но возвращает правильную страницу для данного идентификатора ответа, и это всего лишь один метод:
public function getReplyPage($replyId = null, $paginate = 2)
{
$id = $replyId ? $replyId : $this->latestReply()->id;
$count = $this->replies()->where('id', '<', $id)->count();
$page = 1; // Starting with one page
// Counter - when we reach the number provided in $paginate, we start a new page
$offset = 0;
for ($i = 0; $i < $count; $i++) {
$offset++;
if ($offset == $paginate) {
$page++;
$offset = 0;
}
}
return $page;
}
$count % $paginateвернет остаток ($ offset) от$count/$paginate, поэтому11%2 = 1даст вам смещение. Pageno можно проверить с помощьюfloor($count / $paginate). Возможно, это небольшое улучшение. - person Luceos   schedule 21.03.2015