Index: core/units/categories/categories_event_handler.php =================================================================== --- core/units/categories/categories_event_handler.php +++ core/units/categories/categories_event_handler.php @@ -2359,6 +2359,7 @@ return; } + $files = $this->sortByDependencies($files); kUtil::setResourceLimit(); /** @var CategoriesItem $dummy */ @@ -2388,6 +2389,40 @@ } /** + * Sort structure files array by dependencies. + * + * @param array $files Files. + * + * @return array + */ + protected function sortByDependencies(array $files) + { + foreach ( $files as $template => $data ) { + $meta = unserialize($data['FileMetaInfo']); + $section = isset($meta['section']) ? $meta['section'] : ''; + $page_name = isset($meta['name']) ? $meta['name'] : '_Auto: ' . $template; + $files[$template]['sort_key'] = $section . '||' . $page_name; + } + + uasort($files, array($this, 'compareSMSTemplates')); + + return $files; + } + + /** + * Files array comparing. + * + * @param array $sms_template_a First item. + * @param array $sms_template_b Second item. + * + * @return integer + */ + public function compareSMSTemplates(array $sms_template_a, array $sms_template_b) + { + return strcmp($sms_template_a['sort_key'], $sms_template_b['sort_key']); + } + + /** * Processes OnMassMoveUp, OnMassMoveDown events * * @param kEvent $event