示例#1
0
 /**
  * Renders container
  * @param  array  $container Container data to be rendered
  * @return string HTML code of rendered container
  */
 private function _renderContainer($container)
 {
     static $layout_width = 0;
     if (empty($layout_width)) {
         $layout_width = Registry::get('runtime.layout.width');
     }
     $content = '';
     $container['width'] = $layout_width;
     $this->_view->assign('container', $container);
     if (isset($this->_grids[$container['container_id']]) && ($this->_area == 'A' || $container['status'] != 'D')) {
         $grids = $this->_grids[$container['container_id']];
         $grids = fn_build_hierarchic_tree($grids, 'grid_id');
         $grids = $this->sortGrids($grids);
         $this->_parent_grid = array();
         $content = $this->_renderGrids($grids);
         $this->_view->assign('content', $content);
         // Cleanup old blocks content to avoid extra memory using
         $this->_rendered_blocks = array();
         return $this->_view->fetch($this->_theme . 'container.tpl');
     } else {
         $this->_view->assign('content', '');
         if ($this->_area == 'A') {
             return $this->_view->fetch($this->_theme . 'container.tpl');
         }
     }
 }
示例#2
0
/**
 * Builds hierarchic tree from array width id and parent_id
 * @param array $array array of data, must be sorted ASC by  parent_id
 * @param string $object_key  name of id key in array
 * @param string $parent_key name of parent key in array
 * @param string $cildren_key name of key whee sub elements will be located in tree
 * @return array
 */
function fn_build_hierarchic_tree(&$array, $object_key, $parent_key = 'parent_id', $child_key = 'children', &$current_item = null, $parent_id = 0)
{
    $sorted = array();
    foreach ($array as $_id => $item) {
        if ($item[$parent_key] == $parent_id) {
            $sorted[$item[$object_key]] = $item;
            $sorted[$item[$object_key]][$child_key] = fn_build_hierarchic_tree($array, $object_key, $parent_key, $child_key, $sorted[$item[$object_key]], $item[$object_key]);
        }
    }
    return $sorted;
}
示例#3
0
 /**
  * Export blocks to XML structure
  *
  * @param  array              $location_ids
  * @param  array              $params
  * @param  string             $lang_code
  * @return ExSimpleXmlElement
  */
 public function export($layout_id, $location_ids = array(), $params = array(), $lang_code = DESCR_SL)
 {
     /* Exclude unnecessary fields*/
     $except_location_fields = array('location_id', 'company_id');
     $except_container_fields = array('container_id', 'location_id', 'dispatch', 'is_default', 'company_id', 'default');
     $except_grid_fields = array('container_id', 'location_id', 'position', 'grid_id', 'parent_id', 'order', 'children');
     $except_layout_fields = array('layout_id', 'theme_name', 'company_id');
     $except_location_fields = array_flip($except_location_fields);
     $except_container_fields = array_flip($except_container_fields);
     $except_grid_fields = array_flip($except_grid_fields);
     $except_layout_fields = array_flip($except_layout_fields);
     $layout_data = Layout::instance($this->_company_id)->get($layout_id);
     $layout_data = array_diff_key($layout_data, $except_layout_fields);
     $xml_root = new ExSimpleXmlElement('<block_scheme></block_scheme>');
     $xml_root->addAttribute('scheme', '1.0');
     $settings = $xml_root->addChild('settings');
     $settings->addChild('default_language', $lang_code);
     $layout_xml = $xml_root->addChild('layout');
     foreach ($layout_data as $field_name => $field_value) {
         $layout_xml->addChild($field_name, $field_value);
     }
     if (empty($location_ids)) {
         $location_ids = Location::instance($this->_layout_id)->getList(array(), $lang_code);
         $location_ids = array_keys($location_ids);
     }
     foreach ($location_ids as $location_id) {
         $location = Location::instance($this->_layout_id)->getById($location_id);
         $containers = Container::getList(array('location_id' => $location_id));
         $xml_location = $xml_root->addChild('location');
         $location = array_diff_key($location, $except_location_fields);
         foreach ($location as $attr => $value) {
             $xml_location->addAttribute($attr, $value);
         }
         $xml_containers = $xml_location->addChild('containers');
         $xml_translations = $xml_location->addChild('translations');
         $translations = Location::instance($this->_layout_id)->getAllDescriptions($location_id);
         foreach ($translations as $translation) {
             if ($translation['lang_code'] == $lang_code) {
                 // We do not needed default language
                 continue;
             }
             $xml_translation = $xml_translations->addChild('translation');
             $xml_translation->addChildCData('meta_keywords', $translation['meta_keywords']);
             $xml_translation->addChildCData('page_title', $translation['title']);
             $xml_translation->addChildCData('meta_description', $translation['meta_description']);
             $xml_translation->addChild('name', $translation['name']);
             $xml_translation->addAttribute('lang_code', $translation['lang_code']);
         }
         unset($xml_translations);
         foreach ($containers as $position => $container) {
             $grids = Grid::getList(array('container_ids' => $container['container_id']));
             $xml_container = $xml_containers->addChild('container');
             foreach ($container as $attr => $value) {
                 $xml_container->addAttribute($attr, $value);
             }
             if (!empty($grids) && isset($grids[$container['container_id']])) {
                 $grids = $grids[$container['container_id']];
                 $grids = fn_build_hierarchic_tree($grids, 'grid_id');
                 $container = array_diff_key($container, $except_container_fields);
                 $this->_buildGridStructure($xml_container, $grids, $except_grid_fields, $lang_code);
             }
         }
     }
     return $xml_root->asXML();
 }
示例#4
0
 /**
  * Removes grid
  * @param  int  $grid_id Grid identifier
  * @return bool True in success, false otherwise
  */
 public static function remove($grid_id)
 {
     $grids = db_get_hash_array('SELECT b.grid_id, b.parent_id FROM ?:bm_grids as a LEFT JOIN ?:bm_grids as b ON a.container_id = b.container_id WHERE a.grid_id = ?i ORDER BY b.parent_id, b.grid_id ASC', 'grid_id', $grid_id);
     if (!empty($grids)) {
         $grids = fn_build_hierarchic_tree($grids, 'grid_id');
         foreach ($grids as $grid) {
             self::_remove($grid_id, $grid);
         }
         self::removeMissing();
         return true;
     } else {
         return false;
     }
 }
 /**
  * Renders container
  * @param  array  $container Container data to be rendered
  * @return string HTML code of rendered container
  */
 private function _renderContainer($container)
 {
     static $layout_width = 0;
     if (empty($layout_width)) {
         $layout_width = Registry::get('runtime.layout.width');
     }
     $content = '';
     $container['width'] = $layout_width;
     $this->_view->assign('container', $container);
     if (isset($this->_grids[$container['container_id']]) && ($this->_area == 'A' || $container['status'] != 'D')) {
         $grids = $this->_grids[$container['container_id']];
         $grids = fn_build_hierarchic_tree($grids, 'grid_id');
         $this->_parent_grid = array();
         foreach ($grids as $grid) {
             $content .= $this->_renderGrid($grid);
         }
         $this->_view->assign('content', $content);
         return $this->_view->fetch($this->_theme . 'container.tpl');
     } else {
         $this->_view->assign('content', '');
         if ($this->_area == 'A') {
             return $this->_view->fetch($this->_theme . 'container.tpl');
         }
     }
 }