app/Plugin/CMBlogPro42/Controller/Blog/BlogController.php line 102

Open in your IDE?
  1. <?php
  2. namespace Plugin\CMBlogPro42\Controller\Blog;
  3. use Eccube\Controller\AbstractController;
  4. use Knp\Component\Pager\PaginatorInterface;
  5. use Plugin\CMBlogPro42\Entity\Blog;
  6. use Plugin\CMBlogPro42\Entity\BlogStatus;
  7. use Plugin\CMBlogPro42\Form\Type\Admin\BlogType;
  8. use Plugin\CMBlogPro42\Repository\BlogRepository;
  9. use Plugin\CMBlogPro42\Repository\CategoryRepository;
  10. use Plugin\CMBlogPro42\Repository\ConfigRepository;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Eccube\Repository\PageRepository;
  15. use Eccube\Repository\ProductRepository;
  16. use Symfony\Component\HttpFoundation\Response;
  17. class BlogController extends AbstractController
  18. {
  19.     /**
  20.      * @var BlogRepository
  21.      */
  22.     protected $blogRepository;
  23.     /**
  24.      * @var CategoryRepository
  25.      */
  26.     protected $categoryRepository;
  27.     /**
  28.      * @var ProductRepository
  29.      */
  30.     protected $productRepository;
  31.     /**
  32.      * @var ConfigRepository
  33.      */
  34.     protected $configRepository;
  35.     /**
  36.      * @var PageRepository
  37.      */
  38.     protected $pageRepository;
  39.     /**
  40.      * BlogController constructor.
  41.      *
  42.      * @param BlogRepository $blogRepository
  43.      * @param ProductRepository $productRepository
  44.      * @param ConfigRepository $blogRepository
  45.      */
  46.     public function __construct(
  47.         BlogRepository $blogRepository,
  48.         CategoryRepository $categoryRepository,
  49.         PageRepository $pageRepository,
  50.         ProductRepository $productRepository,
  51.         ConfigRepository $configRepository)
  52.     {
  53.         $this->blogRepository $blogRepository;
  54.         $this->categoryRepository $categoryRepository;
  55.         $this->productRepository $productRepository;
  56.         $this->configRepository $configRepository;
  57.         $this->pageRepository $pageRepository;
  58.     }
  59.     /**
  60.      * @Route("/news/", name="cm_blog_page_list")
  61.      * @Template("web/list.twig")
  62.      */
  63.     public function index(Request $requestPaginatorInterface $paginator)
  64.     {
  65.         
  66.         $form $this->createForm(BlogType::class);
  67.         $search $request->query->all();
  68.         dump($search);
  69.         $search["status"] = 1;
  70.         $qb $this->blogRepository->getQueryBuilderBySearchData($search);
  71.         $config $this->configRepository->get();
  72.         $pagination $paginator->paginate(
  73.             $qb,
  74.             !empty($search['pageno']) ? $search['pageno'] : 1,
  75.             !empty($search['disp_number']) ? $search['disp_number'] : $config->getDisplayPage()
  76.         );
  77.         return [
  78.             'form' => $form->createView(),
  79.             'categories' => $this->categoryRepository->getFrontCategoryList(),
  80.             'pagination' => $pagination,
  81.             'monthArr' => $this->setMonthArchive($search)
  82.         ];
  83.     }
  84.     /**
  85.      * @Route("/news/{id}/", name="cm_blog_page_detail")
  86.      * @Template("web/detail.twig")
  87.      */
  88.     public function detail(Request $request$id)
  89.     {
  90.         //postgresql→int の最大値:2147483647だから、最大値を超えるとSlug として判断
  91.         if(is_numeric($id) && $id <= 2147483647) {
  92.             $blog $this->blogRepository->get($id);
  93.             //IDで検索できない場合、Slugで検索する
  94.             if(!$blog) {
  95.                 $blog $this->blogRepository->findBy(['slug' => $id]);
  96.                 $blog $blog[0];
  97.             }
  98.         } else {
  99.             $blog $this->blogRepository->findBy(['slug' => $id]);
  100.             $blog $blog[0];
  101.         }
  102.         if (!$blog || !$this->checkVisibility($blog)) {
  103.             $this->addError('ブログを見つかりませんでした。');
  104.             return $this->redirectToRoute('cm_blog_pro_page_list');
  105.         }
  106.         $config $this->configRepository->get();
  107.         $form $this->createForm(BlogType::class, $blog);
  108.         $cmPage $this->pageRepository->findOneBy(['url'  => 'cm_blog_pro_page_detail']);
  109.         if($blog->getAuthor() != Null){
  110.             $Page["author"] = $blog->getAuthor();
  111.         } else {
  112.             $Page["author"] = $cmPage->getAuthor();
  113.         }
  114.             
  115.         if($blog->getDescription() != Null){
  116.             $Page["description"] = $blog->getDescription();
  117.         } else {
  118.             $Page["description"] = $cmPage->getDescription();
  119.         };
  120.         
  121.         if($blog->getKeyword() != Null){
  122.             $Page["keyword"] = $blog->getKeyword();
  123.         } else {
  124.             $Page["keyword"] = $cmPage->getKeyword();
  125.         };
  126.         
  127.         if($blog->getRobot() != Null){
  128.             $Page["meta_robots"] = $blog->getRobot();
  129.         } else {
  130.             $Page["meta_robots"] = $cmPage->getMetaRobots();
  131.         }
  132.         
  133.         if($blog->getMetatag() != Null){
  134.             $Page["meta_tags"] = $blog->getMetatag();
  135.         } else {
  136.             $Page["meta_tags"] = $cmPage->getMetaTags();
  137.         }
  138.         $tagArr = [];
  139.         if($blog->getTag() != Null){
  140.             $tagArr preg_split('/[;, 、]+/u'$blog->getTag());
  141.         }
  142.         $Page["edit_type"] = 0;
  143.         return [
  144.             'form' => $form->createView(),
  145.             'blog' => $blog,
  146.             'Page' => $Page,
  147.             'subtitle' => $blog->getTitle(),
  148.             'tags' => $tagArr,
  149.             'monthArr' => $this->setMonthArchive()
  150.         ];
  151.     }
  152.     /**
  153.      * 閲覧可能なブログかどうかを判定
  154.      *
  155.      * @param Blog $blog
  156.      *
  157.      * @return boolean 閲覧可能な場合はtrue
  158.      */
  159.     protected function checkVisibility(Blog $blog)
  160.     {
  161.         $is_admin $this->session->has('_security_admin');
  162.         // 管理ユーザの場合はステータスやオプションにかかわらず閲覧可能.
  163.         if (!$is_admin) {
  164.             if ($blog->getStatus()->getId() !== BlogStatus::DISPLAY_SHOW) {
  165.                 return false;
  166.             }
  167.         }
  168.         return true;
  169.     }
  170.     /**
  171.      * 月別アーカイブ表示のため取得
  172.      *
  173.      * @param 
  174.      *
  175.      * @return array 月別配列
  176.      */
  177.     private function setMonthArchive($search = []) {
  178.         
  179.         $releaseDate $this->blogRepository->getReleaseDate($search);
  180.         $monthArr = [];
  181.         foreach($releaseDate as $val) {
  182.             if(is_null($val['release_date'])) {
  183.                 continue;
  184.             }
  185.             $key $val['release_date']->format('Y-m');
  186.             if(isset($monthArr[$key])) {
  187.                 continue;
  188.             }
  189.             $monthArr[$key] = $val['release_date']->format('Y年m月');
  190.             
  191.         }
  192.         return $monthArr;
  193.     }
  194. }