/** * Add fields to Set's layout. * * @param array $fields Array filled with FieldLayoutFieldModel. */ private function _addFieldsToLayout($fields) { $oldLayout = false; $newLayout = $this->_globalSet->getFieldLayout(); $layoutTabs = array(); $layoutFields = array(); // Delete old layout if available if ($this->_globalSet->fieldLayoutId) { $oldLayout = $this->_globalSet->getFieldLayout(); // Overwrite variables $layoutTabs = $oldLayout->getTabs(); $layoutFields = $oldLayout->getFields(); } // Create layout if (!count($layoutTabs)) { // Nothing is set, so we have to create it $tab = new FieldLayoutTabModel(); $tab->name = Craft::t('Content'); $tab->sortOrder = 1; $tab->setFields($fields); $layoutTabs[] = $tab; // Add fields to layout foreach ($fields as $field) { $layoutFields[] = $field; } } else { // Update existing information foreach ($layoutTabs as $tab) { // Add fields to first tab if ($tab === reset($layoutTabs)) { $tabFields = $tab->getFields(); $sortOrder = count($tabFields) + 1; foreach ($fields as $field) { // Update position for added field $field->sortOrder = $sortOrder; // Add field to tab and layout $tabFields[] = $field; $layoutFields[] = $field; // Update order $sortOrder++; } $tab->setFields($tabFields); } } } $newLayout->setTabs($layoutTabs); $newLayout->setFields($layoutFields); // Delete old layout if ($oldLayout !== false) { craft()->fields->deleteLayoutById($oldLayout->id); } // Set new layout $this->_globalSet->setFieldLayout($newLayout); }