/** * @param Request $request * @param Options $matches * @return string */ public function category(Request $request, Options $matches = null) { /** @var \PostCategory $category */ $category = \PostCategory::find($matches->get('id')); if ($category) { /** @var RecursiveTree $recursive_tree */ $recursive_tree = NCService::load('Module.RecursiveTree', [\PostCategory::listing()]); // Filter conditions $filter = ['conditions' => ['category_id IN (?) AND moderate = ?', $recursive_tree->childs($category->id), 0]]; // Rows count $rows = \Post::count($filter); // Paginator /** @var Listing $pagination */ $pagination = NCService::load('Paginator.Listing', [$request->page, $rows]); // Limitation $filter = array_merge($filter, $pagination->limit()); // Ordering if ($request->order) { $filter['order'] = $request->order; } else { $filter['order'] = 'created_at DESC'; } // Get posts $posts = \Post::all($filter); // Rendering return $this->view->render('posts/list.twig', ['title' => $category->title, 'category' => $category->to_array(), 'posts' => \Post::as_array($posts), 'listing' => $pagination->pages(), 'page' => $request->page]); } return $this->error404($request); }