Вход Регистрация
Файл: system/controllers/admin/actions/widgets.php
Строк: 92
<?php

class actionAdminWidgets extends cmsAction {

    private 
$is_dynamic_scheme false;
    private 
$rows_titles_pos 'left';

    public function 
run($do false) {

        
// если нужно, передаем управление другому экшену
        
if ($do){
            
$this->runExternalAction('widgets_'.$doarray_slice($this->params1));
            return;
        }

        
cmsCore::loadAllControllersLanguages();

        
$controllers $this->model_widgets->getPagesControllers();

        
$widgets_list $this->model_widgets->getAvailableWidgets();

        
$tpls cmsCore::getTemplates();

        
$template_name $this->request->get('template_name''');

        if(!
$template_name || !in_array($template_name$tpls)){
            
$template_name cmsConfig::get('template');
        }

        
cmsCore::loadTemplateLanguage($template_name);

        
// Шаблоны для показа виджетов
        
$templates = [];
        
// Шаблоны, у которых есть динамическая схема
        
$templates_dynamic_scheme = [];

        foreach (
$tpls as $tpl) {
            
$template_path $this->cms_config->root_path cmsTemplate::TEMPLATE_BASE_PATH$tpl;
            
$manifest cmsTemplate::getTemplateManifest($template_path);
            if(
$manifest !== null){
                if (!empty(
$manifest['properties']['is_frontend'])) {
                    
$templates[$tpl] = !empty($manifest['title']) ? $manifest['title'] : $tpl;
                }
                if (!empty(
$manifest['properties']['is_dynamic_layout'])) {
                    
$templates_dynamic_scheme[$tpl] = !empty($manifest['title']) ? $manifest['title'] : $tpl;
                }
                continue;
            }
            if(
file_exists($template_path .'/main.tpl.php')){
                
$templates[$tpl] = $tpl;
            }
        }

        
$this->rows_titles_pos cmsUser::getCookie('rows_titles_pos');
        if(!
$this->rows_titles_pos){
            
$this->rows_titles_pos 'left';
        }

        
$scheme_html $this->getSchemeHTML($template_name);

        
// Пошаговое руководство страницы, если есть
        
$intro_lang cmsCore::loadLanguage('templates/'.$this->cms_template->name.'/admin/intro/widgets/widgets');

        return 
$this->cms_template->render('widgets', array(
            
'is_dynamic_scheme' => $this->is_dynamic_scheme,
            
'rows_titles_pos' => $this->rows_titles_pos,
            
'intro_lang'    => $intro_lang,
            
'controllers'   => $controllers,
            
'template_name' => $template_name,
            
'templates'     => $templates,
            
'templates_dynamic_scheme' => $templates_dynamic_scheme,
            
'widgets_list'  => $widgets_list,
            
'scheme_html'   => $scheme_html
        
));

    }

    public function 
getSchemeHTML($name=''){

        
$template = new cmsTemplate($name);

        
$template->setContext($this);

        
$scheme_html $template->getSchemeHTML();
        if (!
$scheme_html) {
            
$scheme_html $this->getDynamicSchemeHTML($template);
            if (!
$scheme_html) { return false; }

            
$this->is_dynamic_scheme true;
        }

        
preg_match_all('/{(.+)}/ui'$scheme_html$matches);

        if(!empty(
$matches[1])){
            foreach(
$matches[1] as $block){

                list(
$type$value) = explode(':'$block);

                if (
$type=='position') {
                    
$replace_html '<ul class="position" rel="'.$value.'" id="pos-'.$value.'"></ul>';
                }

                if (
$type=='block') {
                    if (
mb_strpos($value'LANG_') === 0){ $value constant($value); }
                    
$replace_html '<div class="block"><span>'.$value.'</span></div>';
                }

                if (
$type=='cell') {
                    if (
mb_strpos($value'LANG_') === 0){ $value constant($value); }
                    
$replace_html '<div class="cell"><span>'.$value.'</span></div>';
                }

                
$scheme_html str_replace("{{$block}}"$replace_html$scheme_html);

            }
        }

        return 
$scheme_html;

    }

    private function 
getDynamicSchemeHTML($template) {

        
$this->cms_template->addTplJSName('admin-scheme');

        
$rows $this->model_widgets->getLayoutRows($template->getName());

        return 
$template->getRenderedChild('widgets_scheme', array(
            
'rows_titles_pos' => $this->rows_titles_pos,
            
'rows' => $rows
        
));

    }

}
Онлайн: 0
Реклама