public function SectionsMenu($options) { /* * Настроки кеширования */ $env = $this->container->getParameter("kernel.environment"); $cacheDriver = new \Doctrine\Common\Cache\ApcuCache(); $namespace = 'menu_section_' . $env . '_' . $options['BLOCK_ID']; $cacheDriver->setNamespace($namespace); // засекаем время $time_start = microtime(1); /* * Добавляем текущую страницу в id кеша */ $request = $this->container->get('request_stack')->getMasterRequest(); $routeParams = $request->attributes->get('_route_params'); $currentCode = false; if (array_key_exists('SECTION_CODE', $routeParams)) { $currentCode = trim($routeParams['SECTION_CODE'], '/'); } //$currentCode = trim($routeParams['CODE'], '/'); $options['@currentCode'] = $currentCode; // id кеша $cacheId = json_encode($options); if ($fooString = $cacheDriver->fetch($cacheId)) { //if (false) { /* * Выдаем результат из кеша */ $result = unserialize($fooString); } else { /* * Генерируем результат */ $SectionClass = $this->container->get('SectionClass'); $tree = $SectionClass->SectionsList(array('block_id' => $options['BLOCK_ID'])); //echo '<pre>' . print_r('tree on SectionMenu', true) . '</pre>'; //echo '<pre>' . print_r($tree, true) . '</pre>'; $factory = new MenuFactory(); $menu = $factory->createItem('root'); //echo '<pre>' . print_r($routeName, true) . '</pre>'; //echo '<pre>' . print_r($routeParams, true) . '</pre>'; $this->generateMenuFromTree($tree, $menu, $options['route'], $currentCode); $menuRenderer = $this->getMenuRenderer(); $result = $menuRenderer->render($menu, array('template' => $options['template'], 'currentAsLink' => false)); /* * Сохраняем результат в кеш */ $cacheDriver->save($cacheId, serialize($result)); } echo $result; $time_end = microtime(1); $time = number_format(($time_end - $time_start) * 1000, 2); //echo $time.' мс'; }
public function elementsListAction($BLOCK_ID, $template_code, $section_id, $params, Request $request) { $host = $request->headers->get('host'); $cacheId = 'Novuscom\\CMFBundle\\Controller\\elementsListAction(BLOCK_ID=' . $BLOCK_ID . ')'; $env = $this->get('kernel')->getEnvironment(); //$cache = new \Doctrine\Common\Cache\FilesystemCache($_SERVER['DOCUMENT_ROOT'] . '/../app/cache/' . $env . '/sys/' . $host . '/elements_list/'); $cacheDriver = new \Doctrine\Common\Cache\ApcuCache(); if ($cacheDriver->contains($cacheId)) { //echo 'cache exists'; } else { //echo 'cache does not exist'; } if (false) { //if ($fooString = $cacheDriver->fetch($cacheId)) { //echo '<pre>' . print_r('ответ из кеша', true) . '</pre>'; $render = unserialize($fooString); } else { /** * Переменные */ $response = new Response(); $em = $this->getDoctrine()->getManager(); /** * Вычисление необходимой информации */ $block = $em->getRepository('NovuscomCMFBundle:Block')->find($BLOCK_ID); //echo '<pre>' . print_r($block->getName(), true) . '</pre>'; $ElementSection = $em->getRepository('NovuscomCMFBundle:ElementSection')->findBy(array('section' => $section_id)); $elements_id = array(); foreach ($ElementSection as $es) { //echo '<pre>' . print_r($es->getSection()->getName(), true) . '</pre>'; $elements_id[] = $es->getElement()->getId(); } $elements = array(); if ($elements_id) { //$elements = $em->getRepository('NovuscomCMFBundle:Element')->findBy(array('id' => $elements_id)); $repository = $this->getDoctrine()->getRepository('NovuscomCMFBundle:Element'); $query = $repository->createQueryBuilder('p')->where('p.id IN(:id)')->setParameter('id', $elements_id)->orderBy('p.id', 'DESC')->getQuery(); $elements = $query->getResult(); } else { //echo '<pre>' . print_r('elements_id не указан', true) . '</pre>'; //$elements = $em->getRepository('NovuscomCMFBundle:Element')->findBy(array('block' => $block)); $repository = $this->getDoctrine()->getRepository('NovuscomCMFBundle:Element'); $query = $repository->createQueryBuilder('p')->where('p.block = :block')->setParameter('block', $block)->orderBy('p.id', 'DESC')->getQuery(); $elements = $query->getResult(); } /** * HTTP кэширование */ /*$lastModifiedTimes = array(); $timesArray = array(); foreach ($elements as $e) { //echo '<pre>' . print_r($e->getLastModified(), true) . '</pre>'; $date = $e->getLastModified(); //$dateTime = new \DateTime('now'); $timestamp = $date->getTimestamp(); $lastModifiedTimes[] = $timestamp; $timesArray[$timestamp] = $date; } if ($timesArray) { //echo '<pre>' . print_r($lastModifiedTimes, true) . '</pre>'; $max = max($lastModifiedTimes); $response->setLastModified($timesArray[$max]); $eTag = $max; $response->setETag($eTag); } $response->setSharedMaxAge(10); $response->setMaxAge(10); */ $data = array('block' => $block); /** * Получаем previewPictures */ $preview_id = array(); foreach ($elements as $e) { if ($e->getPreviewPicture()) { $preview_id[] = $e->getPreviewPicture()->getId(); } } if ($preview_id) { $em->getRepository('NovuscomCMFBundle:File')->findBy(array('id' => $preview_id)); } $response->setMaxAge(60); $response->setSharedMaxAge(60); $render = $this->render('@templates/' . $params['template_directory'] . '/ElementsList/' . $template_code . '_.html.twig', array('elements' => $elements), $response); $cacheDriver->save($cacheId, serialize($render)); } return $render; }