<?php
namespace Customize\Controller\Block;
use Eccube\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Knp\Component\Pager\PaginatorInterface;
class ZenNewsListController extends AbstractController
{
/**
* @var EntityManagerInterface
*/
protected $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @Route("/block/zen_news_list", name="block_zen_news_list")
* @Template("user_data/zen_news_list.twig")
*/
public function index(Request $request, SessionInterface $session, PaginatorInterface $paginator)
{
$id = $session->get('blb_id', '0');
$w = '';
$category = '全ての記事';
if ($id == 1) {
$w = 'AND `category`="お知らせ"';
$category = 'お知らせ';
} elseif ($id == 2) {
$w = 'AND `category`="商品情報"';
$category = '商品情報';
}
// SQLで全件取得(LIMITなし)
$connection = $this->entityManager->getConnection();
$sql = 'SELECT * FROM `blb_information` WHERE `view`=1 ' . $w . ' ORDER BY `s_date` DESC';
$stmt = $connection->prepare($sql);
$result = $stmt->executeQuery();
// $newsListAll = $result->fetchAllAssociative();
$newsListAll = array_values($result->fetchAllAssociative());
// dump('KF001:' . count($newsListAll));
// 画像パスを追加
foreach ($newsListAll as &$news) {
$news['image'] = file_exists('up_images/news/' . $news['id'] . '/1.jpg')
? '../up_images/news/' . $news['id'] . '/1.jpg'
: '';
}
// paginate()で分割(ここが要)
$page = $session->get('blb_page', 1);
if ($page > ceil(count($newsListAll) / 12)) {
$page = ceil(count($newsListAll) / 12);
}
$pagination = $paginator->paginate(
$newsListAll,
$page,
12
);
// ページ情報を別にまとめる(Paginatorオブジェクトに直接プロパティを追加しない)
$pageInfo = [
'pageCount' => (int) ceil(count($newsListAll) / 12),
'currentPageNumber' => $page,
'previousPageNumber' => ($page > 1) ? $page - 1 : null,
'nextPageNumber' => ($page < ceil(count($newsListAll) / 12)) ? $page + 1 : null,
'pagesInRange' => range(1, (int) ceil(count($newsListAll) / 12)),
];
return $this->render('Block/zen_news_list.twig', [
'Category' => $category,
'NewsItems' => $pagination->getItems(), // 実データのみ
'PageInfo' => $pageInfo,
]);
}
}