public function __invoke($group_slug = null, $board_slug = null) { $forum = $this->getForum(); $group = GroupModel::search($group_slug, $forum->id); if (!$group) { $group = GroupModel::getGroup($group_slug); } $board = BoardModel::search($board_slug, $forum->id, $group->id); if (!$board) { $board = BoardModel::getBoard($board_slug); } $request = $this->getRequest(); $t_page = $request->query->get('t_page'); $t_size = $request->query->get('t_size'); if (!$t_page) { $t_page = 1; } if (!$t_size) { $t_size = 5; } $threads_pager = ThreadModel::listThreads($t_page, $t_size, function (QueryBuilder $qb) use($board, $group, $forum) { $qb->andWhere($qb->expr()->eq('board_id', ':board_id'))->setParameter(':board_id', $board->id); $qb->andWhere($qb->expr()->eq('group_id', ':group_id'))->setParameter(':group_id', $group->id); $qb->andWhere($qb->expr()->eq('forum_id', ':forum_id'))->setParameter(':forum_id', $forum->id); $qb->addOrderBy('create_timestamp', 'desc'); }); $threads_pager->setPageParamName('t_page'); $threads_pager->setBaseUrl($this->generateUrl('forum_board_threads', array('group_slug' => $group->search ? $group->search : $group->id, 'board_slug' => $board->search ? $board->search : $board->id))); return $this->render('board/threads.html.twig', array('pager' => $threads_pager, 'group' => $group, 'board' => $board)); }
protected function handle() { $board_id = $this->id; $board = BoardModel::getBoard($board_id); $group = GroupModel::getGroup($board->groupId); $forum = ForumModel::getForum($group->forumId); // 子版块 $sub_boards = BoardModel::allBoards(function (QueryBuilder $qb) use($board) { $qb->andWhere($qb->expr()->eq('parent_id', ':parent_id'))->setParameter(':parent_id', $board->id); $qb->addOrderBy('weight', 'desc'); $qb->addOrderBy('create_timestamp'); }); $columns = array('ID', '标题', '作者', '回复'); // 主题 $request = $this->getRequest(); if ($request->isXmlHttpRequest()) { $posts = $request->request; $page_offset = $posts->get('start'); $page_offset = intval($page_offset); $page_size = $posts->get('length'); $page_size = intval($page_size); $is_all = false; if ($page_size < 0) { $is_all = true; } $s_echo = $posts->get('draw'); $s_echo = intval($s_echo); $search = $posts->get('search'); $search_value = $search['value']; $records = array(); $records['data'] = array(); $records['draw'] = $s_echo; $records['recordsTotal'] = 0; $records['recordsFiltered'] = 0; if ($is_all) { $page_size = ThreadModel::getCount(function (QueryBuilder $qb) use($board, $search_value) { $qb->andWhere($qb->expr()->eq('board_id', ':board_id'))->setParameter(':board_id', $board->id); if ($search_value) { $qb->orWhere($qb->expr()->like("`title`", ":title"))->setParameter(":title", "%{$search_value}%"); } $qb->addOrderBy('update_timestamp', 'desc'); $qb->addOrderBy('create_timestamp', 'desc'); }); } $page = $page_offset / $page_size + 1; $pager = ThreadModel::listThreads($page, $page_size, function (QueryBuilder $qb) use($board, $search_value) { $qb->andWhere($qb->expr()->eq('board_id', ':board_id'))->setParameter(':board_id', $board->id); if ($search_value) { $qb->orWhere($qb->expr()->like("`title`", ":title"))->setParameter(":title", "%{$search_value}%"); } $qb->addOrderBy('update_timestamp', 'desc'); $qb->addOrderBy('create_timestamp', 'desc'); }); $total = $pager->getCount(); $records['recordsTotal'] = $total; $records['recordsFiltered'] = $total; $data = $pager->getData(); /*$columns = array( 'ID', '标题', '作者', '回复', );*/ foreach ($data as $k => $v) { $line = array(); $line[] = '<input type="checkbox" name="id[]" value="' . $v['id'] . '">'; $line[] = $v['id']; $line[] = $v['title']; $line[] = $v['author_name'] . '(' . date('Y-m-d H:i:s', $v['create_timestamp']) . ')'; $line[] = $v['reply_author_name'] . '(' . date('Y-m-d H:i:s', $v['reply_timestamp']) . ')'; $operation = '<div class="btn-group"> <a href="javascript:void(0);" data-toggle="dropdown" aria-expanded="false">操作 <i class="fa fa-angle-down"></i></a> <ul class="dropdown-menu pull-right" role="menu"> </ul> </div>'; $line[] = $operation; $records['data'][] = $line; } return new JsonResponse($records); } else { return $this->render('board/index.html.twig', array('forum' => $forum, 'group' => $group, 'board' => $board, 'sub_boards' => $sub_boards, 'columns' => $columns)); } }