Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- // Не код, а ЖОПА, переписать xPDO left right join
- // Время выполнения 0,65 секунд, при этом время генерации страницы без кеша 4,3 секунды oO, с кешем 0,8 секунд
- // getResources выдает на это 8 секунд без кеша
- // Данные для администратора
- $userExt = $modx->user->Profile->get('extended');
- $readedResource = $userExt['readedResource'];
- $time_pre = microtime(true);
- // Перебираем всех спикеров
- $speakers = $modx->getCollection('modResource', array('deleted'=>'0', 'published' => 1, 'parent' => 2, 'template' => 3));
- $speakersArray = array();
- foreach($speakers as $speaker) {
- $id = $speaker->get('id');
- $childIds = $modx->getChildIds($id,1,array('context' => 'web'));
- $speakersArray[$id] = array(
- 'id' => $id,
- 'fullname' => $speaker->get('pagetitle'),
- 'name' => $modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 2))->get('value'), // быстрее $speaker->getTVValue(VALUE) в 2 раза
- 'surname' => $modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 3))->get('value'),
- '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') ,
- 'description' => $speaker->get('description'),
- 'introtext' => $speaker->get('introtext'),
- 'childIds' => implode('|',$childIds),
- 'lecturesCount' => 0,
- 'url' => $modx->makeUrl($id),
- );
- }
- // Перебираем все ресурсы с шаблоном #21
- $criteria = $modx->newQuery('modResource');
- $criteria->sortby('publishedon', 'DESC');
- $criteria->where(array(
- 'published' => 1,
- 'deleted' => 0,
- 'template' => 21
- ));
- $resources = $modx->getCollection('modResource', $criteria);
- //$resources = $modx->getCollection('modResource', array('published'=>'1','deleted'=>'0', 'template' => 21));
- $lecturessArray = array();
- foreach($resources as $resource) {
- $id = $resource->get('id');
- $parentId = $resource->get('parent');
- $isfolder = $resource->get('isfolder');
- $readed = (array_key_exists(' '.$id.' ', $readedResource) ? $readedResource[' '.$id.' '] : '0');
- // var_dump($id);
- // var_dump($readedResource);
- // die();
- if($isfolder == 1) {
- $lecturessArray[$id] = array(
- 'id' => $id,
- 'parent' => $parentId,
- 'name' => $resource->get('pagetitle'),
- 'isfolder' => 1,
- 'introtext' => $resource->get('introtext'),
- 'theme' => ($modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 20)) ? $modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 20))->get('value') : ''),
- 'readed' => $readed
- );
- $childIds = $modx->getChildIds($id,1,array('context' => 'web'));
- $lecturessArray[$id]['childIds'] = implode('|', $childIds);
- if(array_key_exists($parentId, $speakersArray)) {
- if(in_array($id, explode('|', $speakersArray[$parentId]['childIds']))) {
- $lecturessArray[$id]['author'] = $speakersArray[$parentId];
- }
- }
- foreach ($childIds as $childId) {
- if(array_key_exists($childId,$lecturessArray)) {
- $lecturessArray[$id]['lectures'][$childId] = $lecturessArray[$childId];
- unset($lecturessArray[$childId]);
- }
- }
- } else {
- $lecturessArray[$id] = array(
- 'id' => $id,
- 'parent' => $parentId,
- 'name' => $resource->get('pagetitle'),
- 'isfolder' => 0,
- 'introtext' => $resource->get('introtext'),
- 'theme' => ($modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 20)) ? $modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 20))->get('value') : ''),
- 'url' => $modx->makeUrl($id),
- 'readed' => $readed
- );
- if(array_key_exists($parentId, $speakersArray)) {
- if(in_array($id, explode('|', $speakersArray[$parentId]['childIds']))) {
- $lecturessArray[$id]['author'] = $speakersArray[$parentId];
- }
- }
- $lecturessArray[$id]['code'] = ($modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 8)) ? $modx->getObject('modTemplateVarResource', array( 'contentid' => $id, 'tmplvarid' => 8))->get('value') : '');
- if(array_key_exists($parentId,$lecturessArray)) {
- $lecturessArray[$parentId]['lectures'][$id] = $lecturessArray[$id];
- unset($lecturessArray[$id]);
- }
- }
- }
- $sectionChunk = $modx->getObject('modChunk', 111)->get('content'); // main.section.list.item
- $subSectionChunk = $modx->getObject('modChunk', 112)->get('content'); // main.section.list.lectures.item
- foreach($lecturessArray as $id => $lecture) {
- $replaceArray = array(
- "[+lecture.id+]",
- "[+lecture.introtext+]",
- "[+lecture.pagetitle+]",
- "[+lecture.isfolder+]",
- "[+lecture.url+]",
- "[+lecture.childsCount+]",
- "[+lecture.code+]",
- "[+author.introtext+]",
- "[+author.name+]",
- "[+author.surname+]",
- "[+lecture.themesIds+]",
- "[+author.image+]",
- "[+lecture.readed+]",
- "[+author.url+]",
- );
- $replacedArray = array(
- $id,
- $lecture['introtext'],
- $lecture['name'],
- $lecture['isfolder'],
- $lecture['url'],
- $lecture['childsCount'],
- $lecture['code'],
- $lecture['author']['introtext'],
- $lecture['author']['name'],
- $lecture['author']['surname'],
- $lecture['theme'],
- $lecture['author']['image'],
- $lecture['readed'],
- $lecture['author']['url'],
- );
- if($lecture['isfolder'] == 1) {
- $subOutput = '';
- foreach($lecture['lectures'] as $subId => $subLecture) {
- $replaceArray2 = array(
- "[+sublecture.id+]",
- "[+sublecture.introtext+]",
- "[+sublecture.pagetitle+]",
- "[+sublecture.isfolder+]",
- "[+sublecture.url+]",
- "[+sublecture.childsCount+]",
- "[+sublecture.code+]",
- "[+sublecture.theme+]",
- "[+sublecture.readed+]"
- );
- $replacedArray2 = array(
- $subId,
- $subLecture['introtext'],
- $subLecture['name'],
- $subLecture['isfolder'],
- $subLecture['url'],
- $subLecture['childsCount'],
- $subLecture['code'],
- $subLecture['theme'],
- $subLecture['readed']
- );
- $subOutput .= str_replace($replaceArray2, $replacedArray2, $subSectionChunk);
- }
- array_push($replaceArray, '[+lectures+]');
- array_push($replacedArray, $subOutput);
- }
- $output .= str_replace($replaceArray, $replacedArray, $sectionChunk); // самое производительное решение
- }
- $time_post = microtime(true);
- $exec_time = $time_post - $time_pre;
- // echo $exec_time;
- // echo '<pre>';
- // print_r($readedResource);
- // print_r($lecturessArray);
- // echo '</pre>';
- return $output;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement