Beispiel #1
0
 /**
  * @param ExSimpleXmlElement $parent
  * @param $grids
  * @param array  $except_fields
  * @param string $lang_code
  */
 private function _buildGridStructure(&$parent, $grids, $except_fields = array(), $lang_code = DESCR_SL)
 {
     $except_block_fields = array_flip(array('block_id', 'snapping_id', 'grid_id', 'company_id'));
     foreach ($grids as $grid) {
         $xml_grid = $parent->addChild('grid');
         $blocks = Block::instance($this->_company_id)->getList(array('?:bm_snapping.*', '?:bm_blocks.*'), array($grid['grid_id']));
         if (!empty($blocks)) {
             $blocks = $blocks[$grid['grid_id']];
         }
         $attrs = array_diff_key($grid, $except_fields);
         foreach ($attrs as $attr => $value) {
             $xml_grid->addAttribute($attr, $value);
         }
         if (!empty($grid['children'])) {
             $grid['children'] = fn_sort_array_by_key($grid['children'], 'grid_id');
             $this->_buildGridStructure($xml_grid, $grid['children'], $except_fields, $lang_code);
         }
         if (!empty($blocks)) {
             $xml_blocks = $xml_grid->addChild('blocks');
             foreach ($blocks as $block_id => $block) {
                 $block_descr = Block::instance($this->_company_id)->getFullDescription($block['block_id']);
                 $block = array_merge(Block::instance($this->_company_id)->getById($block['block_id']), $block);
                 $block = array_diff_key($block, $except_block_fields);
                 $xml_block = $xml_blocks->addChild('block');
                 $this->_buildAttrStructure($xml_block, $block);
                 $xml_translations = $xml_block->addChild('translations');
                 foreach ($block_descr as $_lang_code => $data) {
                     if ($_lang_code == $lang_code) {
                         // We do not needed default language
                         continue;
                     }
                     $xml_translation = $xml_translations->addChildCData('translation', $data['name']);
                     $xml_translation->addAttribute('lang_code', $_lang_code);
                     unset($xml_translation);
                 }
                 $contents = Block::instance($this->_company_id)->getAllContents($block_id);
                 $xml_contents = $xml_block->addChild('contents');
                 foreach ($contents as $content) {
                     if (!empty($content['lang_code']) && $content['lang_code'] == $lang_code) {
                         continue;
                     }
                     if (!empty($content['content'])) {
                         $this->_buildAttrStructure($xml_contents, array('item' => array_diff_key($content, $except_block_fields)));
                     }
                 }
             }
         }
     }
 }
 /**
  * Magic method for _serialize
  * @return array
  */
 public function __sleep()
 {
     $this->_xml = $this->_xml->asXML();
     return array('_xml');
 }