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 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; }
public function elementAction($id, Request $request, $template_code = 'default') { $host = $request->headers->get('host'); $cacheId = 'id=[' . $id . ']'; $env = $this->get('kernel')->getEnvironment(); //$cache = new \Doctrine\Common\Cache\FilesystemCache($_SERVER['DOCUMENT_ROOT'] . '/../app/cache/'.$env.'/sys/'.$host.'/element/'); $cache = new \Doctrine\Common\Cache\ApcuCache(); if ($fooString = $cache->fetch($cacheId)) { //echo '<pre>' . print_r('есть кэш '.$cacheId, true) . '</pre>'; $response = unserialize($fooString); } else { $element = new FrontElement(); $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository('NovuscomCMFBundle:Element')->find($id); $element->setInfo($entity); $propertyFiles = $em->getRepository('NovuscomCMFBundle:ElementPropertyF')->findBy(array('element' => $entity, 'property_id' => 26)); foreach ($propertyFiles as $pf) { //echo '<pre>' . print_r($pf->getFile(), true) . '</pre>'; $element->addPropertyFile($pf->getFile()); } //echo '<pre>' . print_r($entity->getName(), true) . '</pre>'; if ($entity) { $templatePath = 'CMFTemplateBundle:Element:' . $template_code . '.html.twig'; $response = $this->render($templatePath, array('element' => $element)); } else { $response = new Response('<div>Элемент не найден</div>'); } $cache->save($cacheId, serialize($response)); } return $response; }