Exemple #1
0
 public function clearCacheSection($block_id, $section_id)
 {
     $fullCode = $this->getFullCode($section_id);
     $cacheDriver = new \Doctrine\Common\Cache\ApcuCache();
     $nameSpace = 'SectionAction_dev_' . $block_id;
     $cacheDriver->setNamespace($nameSpace);
     $cacheDriver->delete($fullCode);
     $nameSpace = 'SectionAction_prod_' . $block_id;
     $cacheDriver->setNamespace($nameSpace);
     $cacheDriver->delete($fullCode);
 }
 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($params, Request $request, $PAGE = 1)
 {
     if (is_numeric($PAGE) === false || $PAGE < 1) {
         throw $this->createNotFoundException('Не может быть страницы меньше нуля для постраничной навигации и должно быть числом');
     }
     if ($this->checkConstruction()) {
         return $this->constructionResponse();
     }
     $logger = $this->get('logger');
     /**
      * Переменные
      */
     $response = new Response();
     $em = $this->getDoctrine()->getManager();
     $page_repository = $em->getRepository('NovuscomCMFBundle:Page');
     $host = $request->headers->get('host');
     $cacheId = json_encode($params);
     $section_id = null;
     if (array_key_exists('section_id', $params)) {
         $section_id = $params['section_id'];
     }
     $template_code = 'default';
     //$this->msg($params);
     if (array_key_exists('template_code', $params)) {
         $template_code = $params['template_code'];
         /*if (array_key_exists('params', $params) && array_key_exists('template_code', $params['params']))
         		$template_code = $params['params']['template_code'];*/
     }
     $env = $this->get('kernel')->getEnvironment();
     $exist_page_id = array_key_exists('page_id', $params);
     if (!$exist_page_id) {
         $params['page_id'] = false;
     }
     if (!array_key_exists('LIMIT', $params)) {
         $params['LIMIT'] = null;
     }
     if (!array_key_exists('OPTIONS', $params)) {
         $params['OPTIONS'] = null;
     }
     $Site = $this->get('Site');
     $site = $Site->getCurrent();
     /**
      * Кэш
      */
     //$cacheDriver = new \Doctrine\Common\Cache\FilesystemCache($_SERVER['DOCUMENT_ROOT'] . '/../app/cache/' . $env . '/sys/' . $host . '/components/ElementsList/');
     $cacheDriver = new \Doctrine\Common\Cache\ApcuCache();
     $cacheDriver->setNamespace('ElementsListAction_' . $env . '_' . $params['BLOCK_ID']);
     if (false) {
         //if ($fooString = $cacheDriver->fetch($cacheId)) {
         //echo '<pre>' . print_r('есть такое в кеше', true) . '</pre>';
         $render = unserialize($fooString);
     } else {
         $response_data = array();
         $logger->info('Выбор списка элементов из инфоблока ' . $params['BLOCK_ID']);
         /**
          * Элементы
          */
         $elements = $this->getElementsList($params['BLOCK_ID'], false, $params);
         $response_data['title'] = '';
         $pageEntity = $page_repository->find($params['page_id']);
         if ($pageEntity) {
             $pagination = $this->getPagination($elements, $PAGE, $params, $site);
             if ($this->paginationRedirect !== false) {
                 return new RedirectResponse($this->paginationRedirect);
             }
             $response_data['pagination'] = $pagination;
             $response_data['title'] = $pageEntity->getTitle();
             $response_data['header'] = $pageEntity->getHeader();
             $response_data['description'] = $pageEntity->getDescription();
             $response_data['page'] = $pageEntity;
         }
         /**
          * Данные попадающие в шаблон
          */
         $response_data['elements'] = $elements;
         $response_data['options'] = $params['OPTIONS'];
         $response_data['params'] = $params;
         $template = '@templates/' . $site['code'] . '/ElementsList/' . $template_code . '.html.twig';
         if ($this->get('templating')->exists($template) === false) {
             $template = 'NovuscomCMFBundle:DefaultTemplate/ElementsList:default.html.twig';
         }
         $render = $this->render($template, $response_data, $response);
     }
     return $render;
 }
 public function sections_listAction($block_id = false, $section_id = null, $template_code = "default", $get_elements = null, $params)
 {
     //$cache = new \Doctrine\Common\Cache\FilesystemCache($_SERVER['DOCUMENT_ROOT'] . '/../app/cache/sys/components/sections_list/');
     $cache = new \Doctrine\Common\Cache\ApcuCache();
     $cacheId = md5(json_encode(array('block_id' => $block_id, 'section_id' => $section_id, 'template_code' => $template_code, 'get_elements' => $get_elements)));
     //echo '<pre>' . print_r($cache->fetch($cacheId), true) . '</pre>';
     if ($fooString = $cache->fetch($cacheId)) {
         //echo '<pre>' . print_r('возвращаем закешированные данные', true) . '</pre>';
         $render = unserialize($fooString);
     } else {
         //echo '<pre>' . print_r('возвращаем не закешированные данные', true) . '</pre>';
         $em = $this->getDoctrine()->getManager();
         //echo '<pre>' . print_r($block_id, true) . '</pre>';
         if (is_numeric($block_id)) {
             //$sections = $em->getRepository('NovuscomCMFBundle:Section')->findBy(array('block' => $block_id, 'lvl' => 0));
             //echo '<pre>' . print_r($block_id, true) . '</pre>';
             $repository = $em->getRepository('NovuscomCMFBundle:Section');
             $query = $repository->createQueryBuilder('p')->where('p.block = :block_id')->setParameters(array('block_id' => $block_id))->orderBy('p.sort', 'ASC')->getQuery();
             $sections = $query->getResult();
             /*foreach($sections as $s) {
             			echo '<pre>' . print_r($s->getName(), true) . '</pre>';
             		}*/
         } else {
             //echo '<pre>' . print_r('notfound', true) . '</pre>';
             throw $this->createNotFoundException('');
         }
         if (is_int($section_id)) {
             $repository = $em->getRepository('NovuscomCMFBundle:Section');
             $query = $repository->createQueryBuilder('p')->where('p.id = :section_id')->setParameter('section_id', $section_id)->orderBy('p.sort', 'ASC')->getQuery();
             $sections = $query->getResult();
         }
         $this->setSectionsElements($sections);
         $response = new Response();
         $data = array();
         $data['sections'] = $sections;
         //echo '<pre>' . print_r($template_code, true) . '</pre>';
         $render = $this->render('@templates/' . $params['params']['template_directory'] . '/SectionsList/' . $template_code . '.html.twig', $data, $response);
     }
     return $render;
 }
 private function getCacheDriver()
 {
     //$redis = new Redis();
     //$redis->connect('127.0.0.1', 6379);
     $site = $this->getSite();
     $env = $this->get('kernel')->getEnvironment();
     //$cacheDriver = new \Doctrine\Common\Cache\FilesystemCache($_SERVER['DOCUMENT_ROOT'] . '/../app/cache/' . $env . '/sys/' . $site['id'] . '/pages/');
     $cacheDriver = new \Doctrine\Common\Cache\ApcuCache();
     //$cacheDriver = new \Doctrine\Common\Cache\RedisCache();
     $cacheDriver->setNamespace('Pages_' . $env);
     return $cacheDriver;
 }
 private function clearCache($page_id)
 {
     $cacheDriver = new \Doctrine\Common\Cache\ApcuCache();
     $cacheDriver->delete('page_' . $page_id);
 }
 private function clearMenuCache($menu_id)
 {
     //$env = $this->container->getParameter("kernel.environment");
     //echo '<pre>' . print_r('Удаление кеша '.$menu_id, true) . '</pre>'; exit;
     $cacheDriver = new \Doctrine\Common\Cache\ApcuCache();
     $cacheDriver->setNamespace('menu_prod_' . $menu_id);
     $cacheDriver->deleteAll();
     $cacheDriver->setNamespace('menu_dev_' . $menu_id);
     $cacheDriver->deleteAll();
 }
 private function clearElementsListCache($request, $block_id)
 {
     $env = $this->get('kernel')->getEnvironment();
     $cacheDriver = new \Doctrine\Common\Cache\ApcuCache();
     $cacheDriver->setNamespace('ElementsListAction_' . $env . '_' . $block_id);
     $cacheDriver->deleteAll();
 }