public function getRelatedPosts($postId, $limit = 10) { $phql = <<<QUERY SELECT B.postId, B.tagId, SUM( LOG( 100 / C.count ) ) AS weight FROM Eva\\EvaBlog\\Entities\\TagsPosts AS A LEFT JOIN Eva\\EvaBlog\\Entities\\TagsPosts AS B ON A.tagId = B.tagId LEFT JOIN Eva\\EvaBlog\\Entities\\Tags AS C ON B.tagId = C.id WHERE A.postId = {$postId} AND B.postId != {$postId} GROUP BY B.postId ORDER BY weight DESC LIMIT {$limit} QUERY; $manager = $this->getModelsManager(); $query = $manager->createQuery($phql); $results = $query->execute(); $posts = null; $idArray = array(); if ($results->count() > 0) { foreach ($results as $result) { $idArray[] = $result->postId; } $postModel = new Post(); $postsQueryBuilder = $postModel->findPosts(array('id' => implode(',', $idArray))); $posts = $postsQueryBuilder->getQuery()->execute(); } return $posts; }
public function indexAction() { $limit = $this->request->getQuery('limit', 'int', 25); $limit = $limit > 100 ?: $limit; $limit = $limit < 10 ?: $limit; $order = $this->request->getQuery('order', 'string', '-created_at'); $query = array('q' => $this->request->getQuery('q', 'string'), 'status' => 'published', 'tid' => $this->request->getQuery('tid', 'int'), 'uid' => $this->request->getQuery('uid', 'int'), 'cid' => $this->request->getQuery('cid', 'int'), 'username' => $this->request->getQuery('username', 'string'), 'order' => $order, 'limit' => $limit, 'page' => $this->request->getQuery('page', 'int', 1)); if ($query['cid']) { $this->view->setVar('category', Category::findFirst($query['cid'])); } if ($query['uid']) { $this->view->setVar('author', UserManager::findFirst($query['uid'])); } if ($query['tid']) { $this->view->setVar('tag', Tag::findFirst($query['tid'])); } $post = new Post(); $posts = $post->findPosts($query); $paginator = new \Eva\EvaEngine\Paginator(array("builder" => $posts, "limit" => $limit, "page" => $query['page'])); $paginator->setQuery($query); $pager = $paginator->getPaginate(); $this->view->setVar('pager', $pager); $this->view->setVar('query', $query); $tag = new Tag(); $tags = $tag->getPopularTags(6); $this->view->setVar('tags', $tags); }
public function listAction() { $limit = $this->dispatcher->getParam('limit'); $limit = $limit ? $limit : 25; /** @noinspection PhpDuplicateArrayKeysInspection */ $query = array('q' => $this->dispatcher->getParam('q'), 'status' => $this->dispatcher->getParam('status'), 'uid' => $this->dispatcher->getParam('uid'), 'cid' => $this->dispatcher->getParam('cid'), 'tid' => $this->dispatcher->getParam('tid'), 'has_image' => $this->dispatcher->getParam('has_image', 'int'), 'min_created_at' => $this->dispatcher->getParam('min_created_at', 'int'), 'username' => $this->dispatcher->getParam('username'), 'order' => $this->dispatcher->getParam('order'), 'limit' => $limit, 'page' => $this->dispatcher->getParam('page')); $post = new Models\Post(); $posts = $post->findPosts($query); $paginator = new \Eva\EvaEngine\Paginator(array("builder" => $posts, "limit" => $query['limit'], "page" => $query['page'])); $paginator->setQuery($query); $pager = $paginator->getPaginate(); return $pager; }
/** * @operationName("Post List") * @operationDescription("Post List") */ public function indexAction() { $limit = $this->request->getQuery('per_page', 'int', 25); $limit = $limit > 100 ? 100 : $limit; $limit = $limit < 10 ? 10 : $limit; $order = $this->request->getQuery('order', 'string', '-created_at'); $query = array('q' => $this->request->getQuery('q', 'string'), 'status' => $this->request->getQuery('status', 'string'), 'uid' => $this->request->getQuery('uid', 'int'), 'cid' => $this->request->getQuery('cid', 'int'), 'tid' => $this->request->getQuery('tid', 'int'), 'tag' => $this->request->getQuery('tag', 'string'), 'username' => $this->request->getQuery('username', 'string'), 'sourceName' => $this->request->getQuery('source_name', 'string'), 'order' => $order, 'limit' => $limit, 'page' => $this->request->getQuery('page', 'int', 1)); $form = new Forms\FilterForm(); $form->setValues($this->request->getQuery()); $this->view->setVar('form', $form); $post = new Models\Post(); $posts = $post->findPosts($query); $paginator = new \Eva\EvaEngine\Paginator(array("builder" => $posts, "limit" => $limit, "page" => $query['page'])); $paginator->setQuery($query); $pager = $paginator->getPaginate(); $this->view->setVar('pager', $pager); }
public function listAction() { $limit = $this->request->getQuery('limit', 'int', 25); $limit = $limit > 100 ? 100 : $limit; $limit = $limit < 10 ? 10 : $limit; $order = $this->request->getQuery('order', 'string', '-created_at'); $query = array('q' => $this->request->getQuery('q', 'string'), 'status' => $this->request->getQuery('status', 'string', 'published'), 'uid' => $this->request->getQuery('uid', 'int'), 'cid' => $this->request->getQuery('cid', 'int'), 'username' => $this->request->getQuery('username', 'string'), 'order' => $order, 'limit' => $limit, 'page' => $this->request->getQuery('page', 'int', 1)); if ($query['cid']) { $this->view->setVar('category', Category::findFirst($query['cid'])); } $post = new Post(); $posts = $post->findPosts($query); $paginator = new \Eva\EvaEngine\Paginator(array("builder" => $posts, "limit" => $limit, "page" => $query['page'])); $paginator->setQuery($query); $pager = $paginator->getPaginate(); $this->view->setVar('pager', $pager); return $paginator; }
/** * * @SWG\Api( * path="/admin/posts", * description="Posts manage API", * produces="['application/json']", * @SWG\Operations( * @SWG\Operation( * method="GET", * summary="Get post list", * notes="Returns post list", * @SWG\Parameters( * @SWG\Parameter( * name="q", * description="Keyword", * paramType="query", * required=false, * type="string" * ), * @SWG\Parameter( * name="status", * description="Status, allow value : pending | published | deleted | draft", * paramType="query", * required=false, * type="string" * ), * @SWG\Parameter( * name="uid", * description="User ID", * paramType="query", * required=false, * type="integer" * ), * @SWG\Parameter( * name="cid", * description="Category ID", * paramType="query", * required=false, * type="integer" * ), * @SWG\Parameter( * name="tid", * description="Tag ID", * paramType="query", * required=false, * type="integer" * ), * @SWG\Parameter( * name="order", * description="Order, allow value : +-id, +-created_at, +-sortOrder default is -created_at", * paramType="query", * required=false, * type="string" * ), * @SWG\Parameter( * name="limit", * description="Limit max:100 | min:3; default is 25", * paramType="query", * required=false, * type="integer" * ) * ) * ) * ) * ) * @operationName("文章列表") * @operationDescription("文章列表") */ public function indexAction() { $limit = $this->request->getQuery('limit', 'int', 25); $limit = $limit > 100 ? 100 : $limit; $limit = $limit < 3 ? 3 : $limit; $order = $this->request->getQuery('order', 'string', '-created_at'); $query = array('q' => $this->request->getQuery('q', 'string'), 'status' => $this->request->getQuery('status', 'string'), 'uid' => $this->request->getQuery('uid', 'int'), 'cid' => $this->request->getQuery('cid', 'int'), 'tid' => $this->request->getQuery('tid', 'int'), 'username' => $this->request->getQuery('username', 'string'), 'order' => $order, 'limit' => $limit, 'page' => $this->request->getQuery('page', 'int', 1)); $form = new Forms\FilterForm(); $form->setValues($this->request->getQuery()); $post = new Models\Post(); $posts = $post->findPosts($query); $paginator = new \Eva\EvaEngine\Paginator(array("builder" => $posts, "limit" => $limit, "page" => $query['page'])); $paginator->setQuery($query); $pager = $paginator->getPaginate(); $postArray = array(); if ($pager->items) { foreach ($pager->items as $key => $post) { $postArray[] = $post->dump(Models\Post::$simpleDump); } } $data = array('paginator' => $this->getApiPaginator($paginator), 'results' => $postArray); return $this->response->setJsonContent($data); }