/** * @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'); }