protected function handle() { /** @var CategoryModel[] $tree */ $tree = CategoryModel::getTree(); /** @var CategoryModel $root_node */ $root_node = CategoryModel::getRootNode(); $categories = array(); foreach ($tree as $category) { $categories[$category->categoryId] = $category; } $request = $this->getRequest(); $category_id = $request->query->get('category_id'); if (!$category_id || $category_id == $root_node->categoryId) { $category_id = null; } $page = $request->query->get('page'); if (!$page) { $page = 1; } $size = 10; $pager = ArticleModel::listPortalArticles($page, $size, function (QueryBuilder $qb) use($category_id) { if ($category_id) { $qb->andWhere($qb->expr()->eq('category_id', ':category_id'))->setParameter(':category_id', $category_id); } $qb->addOrderBy('create_timestamp', 'DESC'); }); $pager->setQuery(array('category_id' => $category_id)); return $this->render('article/manage-article.html.twig', array('tree' => $tree, 'pager' => $pager, 'categories' => $categories)); }
public function __invoke($article_id = null) { $this->articleId = $article_id; $article_id = $this->articleId; $session = $this->getSession(); $article = ArticleModel::getPortalArticle($article_id); if (!$article) { $session->addFlash('error', '文章不存在'); return new RedirectResponse($this->generateUrl('portal_homepage')); } $category_id = $article->categoryId; $category = CategoryModel::getPortalCategory($category_id); if (!$category) { $session->addFlash('error', '分类不存在'); return new RedirectResponse($this->generateUrl('portal_homepage')); } $parent_category = $category->getDirectParentNode(); if ($parent_category->isRootNode()) { $parent_category = null; } // 面包屑导航 $breadcrumb = $category->getNodeSinglePath(); unset($breadcrumb[0]); $breadcrumb = array_values($breadcrumb); // 边栏导航 /** @var CategoryModel $top_nav */ $top_nav = $breadcrumb[0]; $side_nav = $top_nav->getDirectChildNodes(); return $this->render('article/index.html.twig', array('breadcrumb' => $breadcrumb, 'side_nav' => $side_nav, 'category' => $category, 'parent_category' => $parent_category, 'article' => $article)); }
protected function handle() { $category = CategoryModel::getPortalCategory($this->categoryId); $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $session = $this->getSession(); try { $category_name = $request->request->get('category_name'); $category_desc = $request->request->get('category_desc'); if (!$category_name) { throw new \Exception("分类子链接标题不能为空"); } $category_type = $request->request->get('category_type'); if (!$category_type) { throw new \Exception("子分类链接的类型不能为空"); } if (!in_array($category_type, array('article-menu', 'menu', 'page', 'link', 'article'))) { throw new \Exception("子分类链接的类型错误"); } $enabled = $request->request->get('enabled'); $enabled = intval($enabled); $category->categoryName = $category_name; $category->categoryDesc = $category_desc; $category->categoryType = $category_type; $category->enabled = $enabled; CategoryModel::savePortalCategory($category); $session->addFlash('success', '编辑成功'); } catch (\Exception $e) { $session->addFlash('error', $e->getMessage()); } return new RedirectResponse($this->generateUrl('admin_portal_category_manage')); } return $this->render('category/edit-category-modal.html.twig', array('category' => $category)); }
public function __invoke() { $homepage_node = CategoryModel::getRootNode(); $category_id = $homepage_node->categoryId; $articles_pager = ArticleModel::listPortalArticles(1, 3, function (QueryBuilder $qb) use($category_id) { $qb->andWhere($qb->expr()->eq('category_id', ':category_id'))->setParameter(':category_id', $category_id); $qb->andWhere($qb->expr()->gt('publish_timestamp', 0)); $qb->addOrderBy('publish_timestamp', 'desc'); }); return $this->render('homepage/index.html.twig', array('pager' => $articles_pager)); }
protected function handle() { $category = CategoryModel::getPortalCategory($this->categoryId); $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $session = $this->getSession(); try { $category->remove(); $session->addFlash('success', '操作成功'); } catch (\Exception $e) { $session->addFlash('error', $e->getMessage()); } return new RedirectResponse($this->generateUrl('admin_portal_category_manage')); } return $this->render('category/delete-category-modal.html.twig', array('category' => $category)); }
public function render($template_path = 'index/index.html.twig', array $context = array()) { // 添加顶部导航 $home_nav = CategoryModel::getRootNode(); /** @var CategoryModel[] $nav_tree */ $nav_tree = $home_nav->getSubTree(); $list = array(); foreach ($nav_tree as $i => $node) { if ($i == 0) { continue; } $list[$node->categoryId] = $node; } PortalBusiness::preOrderTree2RecursiveTree($list, $home_nav); $context['navigation'] = $home_nav; $template_path = '@TknyMedPortalModule/' . $template_path; return $this->renderTemplate($template_path, $context); }
protected function handle() { $tree = CategoryModel::getTree(); $request = $this->getRequest(); if ($request->getMethod() == 'POST') { try { // 检查参数 $category_name = $request->request->get('category_name'); if (!$category_name) { throw new \Exception("子分类链接标题不能为空"); } $category_desc = $request->request->get('category_desc'); $enabled = $request->request->get('enabled'); $category_type = $request->request->get('category_type'); if (!$category_type) { throw new \Exception("子分类链接的类型不能为空"); } if (!in_array($category_type, array('article-menu', 'menu', 'page', 'link', 'article'))) { throw new \Exception("子分类链接的类型错误"); } $enabled = intval($enabled); $parent_category_id = $request->request->get('parent_category_id'); if (!$parent_category_id) { throw new \Exception("请选择父链接"); } $parent_category = CategoryModel::getPortalCategory($parent_category_id); if (!$parent_category) { throw new \Exception("父链接不存在"); } $now = time(); $parent_category->createChildNode(array('category_name' => $category_name, 'category_desc' => $category_desc, 'category_type' => $category_type, 'enabled' => $enabled, 'create_timestamp' => $now, 'update_timestamp' => $now)); } catch (\Exception $e) { $session = $this->getSession(); $session->addFlash('error', $e->getMessage()); } return new RedirectResponse($this->generateUrl('admin_portal_category_manage')); } return $this->render('category/add-category-modal.html.twig', array('tree' => $tree)); }
public function __invoke($category_id = null) { $session = $this->getSession(); $category = CategoryModel::getPortalCategory($category_id); if (!$category) { $session->addFlash('error', '分类不存在'); return new RedirectResponse($this->generateUrl('portal_homepage')); } // $parent_category = $category->getDirectParentNode(); // if ($parent_category->isRootNode()) { // $parent_category = null; // } switch ($category->categoryType) { case 'article': case 'article-menu': // 文章列表 // 面包屑导航 $breadcrumb = $category->getNodeSinglePath(); unset($breadcrumb[0]); $breadcrumb = array_values($breadcrumb); // 边栏导航 /** @var CategoryModel $top_nav */ $top_nav = $breadcrumb[0]; $side_nav = $top_nav->getDirectChildNodes(); // 文章内容 $article_id = $category->categoryDesc; $article_id = intval($article_id); $article = ArticleModel::getPortalArticle($article_id); if (!$article) { $session->addFlash('error', '文章不存在'); return new RedirectResponse($this->generateUrl('portal_homepage')); } return $this->render('category/article.html.twig', array('breadcrumb' => $breadcrumb, 'side_nav' => $side_nav, 'category' => $category, 'parent_category' => $top_nav, 'article' => $article)); break; case 'menu': // 面包屑导航 $breadcrumb = $category->getNodeSinglePath(); unset($breadcrumb[0]); $breadcrumb = array_values($breadcrumb); // 边栏导航 /** @var CategoryModel $top_nav */ $top_nav = $breadcrumb[0]; $side_nav = $top_nav->getDirectChildNodes(); $category = $side_nav[0]; // 内容列表 $request = $this->getRequest(); $page = $request->query->get('page'); if (!$page) { $page = 1; } $size = 20; $pager = ArticleModel::listPortalArticles($page, $size, function (QueryBuilder $qb) use($category) { /** @var CategoryModel $category */ $qb->andWhere($qb->expr()->eq('category_id', ':category_id'))->setParameter(':category_id', $category->categoryId); $qb->andWhere($qb->expr()->gt('publish_timestamp', 0)); }); return $this->render('category/index.html.twig', array('breadcrumb' => $breadcrumb, 'side_nav' => $side_nav, 'pager' => $pager, 'category' => $category, 'parent_category' => $top_nav)); break; case 'page': $breadcrumb = $category->getNodeSinglePath(); unset($breadcrumb[0]); $breadcrumb = array_values($breadcrumb); // 边栏导航 /** @var CategoryModel $top_nav */ $top_nav = $breadcrumb[0]; $side_nav = $top_nav->getDirectChildNodes(); $category = $side_nav[0]; return $this->render($category->categoryDesc, array('breadcrumb' => $breadcrumb, 'side_nav' => $side_nav, 'category' => $category, 'parent_category' => $top_nav)); break; case 'link': return new RedirectResponse($category->categoryDesc); break; default: $session->addFlash('error', '错误的分类类型'); return new RedirectResponse($this->generateUrl('portal_homepage')); break; } }
protected function handle() { /** @var CategoryModel[] $tree */ $tree = CategoryModel::getTree(); $session = $this->getSession(); $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $posts = $request->request; $title = $posts->get('title'); $content = $posts->get('content'); $category_id = $posts->get('category_id'); $op = $posts->get('op'); $cdn_url = $this->getContainer()->getParameter('cdn_url'); $cdn_url = str_replace('/', '\\/', $cdn_url); try { if (empty($title)) { throw new \Exception('标题不能为空'); } $category_valid = false; foreach ($tree as $category) { if ($category->categoryId == $category_id) { $category_valid = true; } } if (!$category_valid) { throw new \Exception("文章分类不能为空"); } $article = new ArticleModel(); $new_thumbnails = array(); $pattern = "/<\\s*img\\s+[^>]*?src\\s*=\\s*(\\'|\")({$cdn_url}.*?)\\1[^>]*?\\/?\\s*>/i"; preg_match_all($pattern, $content, $new_thumbnails); $new_thumbnails = $new_thumbnails[0]; foreach ($new_thumbnails as $key => $thumbnail) { $matches = array(); preg_match('/src=\\"(.*?)\\"/', $thumbnail, $matches); $new_thumbnails[$key] = $matches[1]; } $thumbnails = $new_thumbnails; $summary = strip_tags($content); $article->title = $title; $article->summary = $summary; $article->content = $content; $article->thumbnails = implode('<>', $thumbnails); $now = time(); $article->createTimestamp = $now; if ($op == 'submit-publish') { $article->publishTimestamp = $now; } $article->userId = 0; // 官方发布 $article->categoryId = $category_id; ArticleModel::createPortalArticle($article); $session->addFlash('success', '操作成功'); return new RedirectResponse($this->generateUrl('admin_portal_article_manage')); } catch (\Exception $e) { $session->addFlash('error', $e->getMessage()); return new RedirectResponse($this->generateUrl('admin_portal_article_add')); } } return $this->render('article/add-article.html.twig', array('tree' => $tree)); }
protected function handle() { $tree = CategoryModel::getTree(); $session = $this->getSession(); $article_id = $this->articleId; $article = ArticleModel::getPortalArticle($article_id); if (!$article) { $session->addFlash('error', '文章不存在'); return new RedirectResponse($this->generateUrl('admin_portal_article_manage')); } $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $posts = $request->request; $title = $posts->get('title'); $content = $posts->get('content'); $thumbnails = $posts->get('thumbnails'); $category_id = $posts->get('category_id'); $category_valid = false; foreach ($tree as $category) { if ($category->categoryId == $category_id) { $category_valid = true; } } if (!$category_valid) { throw new \Exception("文章分类不能为空"); } if (empty($thumbnails)) { $thumbnails = array(); } $reset_thumbnails = $posts->get('reset_thumbnails'); $cdn_url = $this->getContainer()->getParameter('cdn_url'); $cdn_url = str_replace('/', '\\/', $cdn_url); try { if (empty($title)) { throw new \Exception('标题不能为空'); } $article->title = $title; $new_thumbnails = array(); $pattern = "/<\\s*img\\s+[^>]*?src\\s*=\\s*(\\'|\")({$cdn_url}.*?)\\1[^>]*?\\/?\\s*>/i"; preg_match_all($pattern, $content, $new_thumbnails); $new_thumbnails = $new_thumbnails[0]; foreach ($new_thumbnails as $key => $thumbnail) { $matches = array(); preg_match('/src=\\"(.*?)\\"/', $thumbnail, $matches); $new_thumbnails[$key] = $matches[1]; } if ($reset_thumbnails) { $thumbnails = $new_thumbnails; } $article->content = $content; $article->thumbnails = implode('<>', $thumbnails); $article->categoryId = $category_id; ArticleModel::savePortalArticle($article); $session->addFlash('success', '操作成功'); return new RedirectResponse($this->generateUrl('admin_portal_article_edit', array('article_id' => $article_id))); } catch (\Exception $e) { $session->addFlash('error', $e->getMessage()); return new RedirectResponse($this->generateUrl('admin_portal_article_edit', array('article_id' => $article_id))); } } return $this->render('article/edit-article.html.twig', array('article' => $article, 'tree' => $tree)); }
protected function handle() { /** @var CategoryModel $root_node */ $root_node = CategoryModel::getRootNode(); if (!$root_node) { // 没有根分类,需要自动创建 $node = new CategoryModel(); $node->categoryName = '官网首页'; $node->categoryDesc = '官网首页'; $now = time(); $node->createTimestamp = $now; $node->updateTimestamp = $now; $node->preOrderTreeLeft = 0; $node->preOrderTreeRight = 1; $root_node = CategoryModel::createPortalCategory($node); } /** @var CategoryModel[] $sub_tree */ $sub_tree = $root_node->getSubTree(); $list = array(); foreach ($sub_tree as $i => $node) { if ($i == 0) { continue; } $list[$node->categoryId] = $node; } $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $session = $this->getSession(); try { /*$root_category_name = $request->request->get('root_category_name'); $root_category_name = trim($root_category_name); $root_category_desc = $request->request->get('root_category_desc'); $root_category_desc = trim($root_category_desc); if (!$root_category_name) { throw new \Exception("根菜单的名称不能为空"); } $root_node->categoryName = $root_category_name; $root_node->categoryDesc = $root_category_desc;*/ $root_category = $root_node->toArray(); if (isset($root_category['depth'])) { unset($root_category['depth']); } if (isset($root_category['width'])) { unset($root_category['width']); } if (isset($root_category['children'])) { unset($root_category['children']); } // 保存根菜单 CategoryModel::editPortalCategory($root_category); $serialized_output = $request->request->get('serialized_output'); $serialized_output = trim($serialized_output); $serialized_output = json_decode($serialized_output, true); $tree = $this->formatTree($serialized_output, $list); $root_node->children = $tree; $list = $this->recursiveTree2PreOrderTree($root_node); foreach ($list as $category) { $category = $category->toArray(); if (isset($category['depth'])) { unset($category['depth']); } if (isset($category['width'])) { unset($category['width']); } if (isset($category['children'])) { unset($category['children']); } // 保存根菜单 CategoryModel::editPortalCategory($category); } $session->addFlash('success', '操作成功'); } catch (\Exception $e) { $session->addFlash('error', $e->getMessage()); } return new RedirectResponse($this->generateUrl('admin_portal_category_manage')); } $this->preOrderTree2RecursiveTree($list, $root_node); return $this->render('category/manage-category.html.twig', array('root_node' => $root_node)); }
/** * 保存 * @param CategoryModel $blog_category * @return CategoryModel * @throws \Exception */ public static function savePortalCategory(CategoryModel $blog_category) { return self::editPortalCategory($blog_category->toArray()); }