Advertisement
Guest User

Untitled

a guest
Sep 30th, 2014
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.63 KB | None | 0 0
  1. <?php
  2. // Не код, а ЖОПА, переписать xPDO left right join
  3. // Время выполнения 0,65 секунд, при этом время генерации страницы без кеша 4,3 секунды oO, с кешем 0,8 секунд
  4. // getResources выдает на это 8 секунд без кеша
  5. // Данные для администратора
  6. $userExt = $modx->user->Profile->get('extended');
  7. $readedResource = $userExt['readedResource'];
  8.  
  9. $time_pre = microtime(true);
  10.  
  11. // Перебираем всех спикеров
  12. $speakers = $modx->getCollection('modResource', array('deleted'=>'0', 'published' => 1, 'parent' => 2, 'template' => 3));
  13.  
  14. $speakersArray = array();
  15. foreach($speakers as $speaker) {
  16.  
  17.     $id = $speaker->get('id');
  18.     $childIds = $modx->getChildIds($id,1,array('context' => 'web'));
  19.     $speakersArray[$id] = array(
  20.         'id' => $id,
  21.         'fullname' => $speaker->get('pagetitle'),
  22.         'name' => $modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 2))->get('value'), // быстрее $speaker->getTVValue(VALUE) в 2 раза
  23.         'surname' => $modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 3))->get('value'),
  24.         'image' => ($modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 1)) ? '/assets/tpl/img/' . $modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 1))->get('value') : '/assets/tpl/img/noavatar.png') ,
  25.         'description' => $speaker->get('description'),
  26.         'introtext' => $speaker->get('introtext'),
  27.         'childIds' => implode('|',$childIds),
  28.         'lecturesCount' => 0,
  29.         'url' => $modx->makeUrl($id),
  30.     );
  31.  
  32. }
  33.  
  34. // Перебираем все ресурсы с шаблоном #21
  35. $criteria = $modx->newQuery('modResource');
  36. $criteria->sortby('publishedon', 'DESC');
  37. $criteria->where(array(
  38.     'published' => 1,
  39.     'deleted' => 0,
  40.     'template' => 21
  41. ));
  42. $resources = $modx->getCollection('modResource', $criteria);
  43. //$resources = $modx->getCollection('modResource', array('published'=>'1','deleted'=>'0', 'template' => 21));
  44. $lecturessArray = array();
  45.  
  46. foreach($resources as $resource) {
  47.     $id = $resource->get('id');
  48.     $parentId = $resource->get('parent');
  49.     $isfolder = $resource->get('isfolder');
  50.     $readed = (array_key_exists(' '.$id.' ', $readedResource) ? $readedResource[' '.$id.' '] : '0');
  51.     // var_dump($id);
  52.     // var_dump($readedResource);
  53.     // die();
  54.     if($isfolder == 1) {
  55.         $lecturessArray[$id] = array(
  56.             'id' => $id,
  57.             'parent' => $parentId,
  58.             'name' => $resource->get('pagetitle'),
  59.             'isfolder' => 1,
  60.             'introtext' => $resource->get('introtext'),
  61.             'theme' => ($modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 20)) ? $modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 20))->get('value') : ''),
  62.             'readed' => $readed
  63.         );
  64.         $childIds = $modx->getChildIds($id,1,array('context' => 'web'));
  65.         $lecturessArray[$id]['childIds'] = implode('|', $childIds);
  66.        
  67.         if(array_key_exists($parentId, $speakersArray)) {
  68.             if(in_array($id, explode('|', $speakersArray[$parentId]['childIds']))) {
  69.                 $lecturessArray[$id]['author'] = $speakersArray[$parentId];
  70.             }
  71.         }
  72.  
  73.         foreach ($childIds as $childId) {
  74.             if(array_key_exists($childId,$lecturessArray)) {
  75.                 $lecturessArray[$id]['lectures'][$childId] = $lecturessArray[$childId];
  76.                 unset($lecturessArray[$childId]);
  77.             }
  78.         }
  79.  
  80.     } else {
  81.         $lecturessArray[$id] = array(
  82.             'id' => $id,
  83.             'parent' => $parentId,
  84.             'name' => $resource->get('pagetitle'),
  85.             'isfolder' =>  0,
  86.             'introtext' => $resource->get('introtext'),
  87.             'theme' => ($modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 20)) ? $modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 20))->get('value') : ''),
  88.             'url' => $modx->makeUrl($id),
  89.             'readed' => $readed
  90.         );
  91.         if(array_key_exists($parentId, $speakersArray)) {
  92.             if(in_array($id, explode('|', $speakersArray[$parentId]['childIds']))) {
  93.                 $lecturessArray[$id]['author'] = $speakersArray[$parentId];
  94.             }
  95.         }
  96.        
  97.         $lecturessArray[$id]['code'] = ($modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 8)) ? $modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 8))->get('value') : '');
  98.        
  99.         if(array_key_exists($parentId,$lecturessArray)) {
  100.             $lecturessArray[$parentId]['lectures'][$id] = $lecturessArray[$id];
  101.             unset($lecturessArray[$id]);
  102.         }
  103.     }
  104.  
  105. }
  106.  
  107.  
  108. $sectionChunk = $modx->getObject('modChunk', 111)->get('content'); //   main.section.list.item
  109. $subSectionChunk = $modx->getObject('modChunk', 112)->get('content'); //   main.section.list.lectures.item
  110.  
  111. foreach($lecturessArray as $id => $lecture) {
  112.  
  113.     $replaceArray = array(
  114.         "[+lecture.id+]",
  115.         "[+lecture.introtext+]",
  116.         "[+lecture.pagetitle+]",
  117.         "[+lecture.isfolder+]",
  118.         "[+lecture.url+]",
  119.         "[+lecture.childsCount+]",
  120.         "[+lecture.code+]",
  121.         "[+author.introtext+]",
  122.         "[+author.name+]",
  123.         "[+author.surname+]",
  124.         "[+lecture.themesIds+]",
  125.         "[+author.image+]",
  126.         "[+lecture.readed+]",
  127.         "[+author.url+]",
  128.     );
  129.     $replacedArray = array(
  130.         $id,
  131.         $lecture['introtext'],
  132.         $lecture['name'],
  133.         $lecture['isfolder'],
  134.         $lecture['url'],
  135.         $lecture['childsCount'],
  136.         $lecture['code'],
  137.         $lecture['author']['introtext'],
  138.         $lecture['author']['name'],
  139.         $lecture['author']['surname'],
  140.         $lecture['theme'],
  141.         $lecture['author']['image'],
  142.         $lecture['readed'],
  143.         $lecture['author']['url'],
  144.     );
  145.  
  146.     if($lecture['isfolder'] == 1) {
  147.         $subOutput = '';
  148.         foreach($lecture['lectures'] as $subId => $subLecture) {
  149.             $replaceArray2 = array(
  150.                 "[+sublecture.id+]",
  151.                 "[+sublecture.introtext+]",
  152.                 "[+sublecture.pagetitle+]",
  153.                 "[+sublecture.isfolder+]",
  154.                 "[+sublecture.url+]",
  155.                 "[+sublecture.childsCount+]",
  156.                 "[+sublecture.code+]",
  157.                 "[+sublecture.theme+]",
  158.                 "[+sublecture.readed+]"
  159.             );
  160.             $replacedArray2 = array(
  161.                 $subId,
  162.                 $subLecture['introtext'],
  163.                 $subLecture['name'],
  164.                 $subLecture['isfolder'],
  165.                 $subLecture['url'],
  166.                 $subLecture['childsCount'],
  167.                 $subLecture['code'],
  168.                 $subLecture['theme'],
  169.                 $subLecture['readed']
  170.             );
  171.             $subOutput .= str_replace($replaceArray2, $replacedArray2, $subSectionChunk);
  172.         }
  173.         array_push($replaceArray, '[+lectures+]');
  174.         array_push($replacedArray, $subOutput);
  175.     }
  176.  
  177.     $output .= str_replace($replaceArray, $replacedArray, $sectionChunk); // самое производительное решение
  178. }
  179. $time_post = microtime(true);
  180. $exec_time = $time_post - $time_pre;
  181. // echo $exec_time;
  182. // echo '<pre>';
  183. // print_r($readedResource);
  184. // print_r($lecturessArray);
  185. // echo '</pre>';
  186.  
  187. return $output;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement