public function setBlockTypes($blockTypes)
    {
        $this->_blockTypes = [];
        $defaultFieldConfig = [
            'type' => null,
            'instructions' => null,
            'required' => false,
            'translationMethod' => Field::TRANSLATION_METHOD_NONE,
            'translationKeyFormat' => null,
            'typesettings' => null,
        ];

        foreach ($blockTypes as $key => $config) {
            if ($config instanceof SuperTableBlockTypeModel) {
                $this->_blockTypes[] = $config;
            } else {
                $blockType = new SuperTableBlockTypeModel();
                $blockType->fieldId = $this->id;

                // Existing block type?
                if (is_numeric($key)) {
                    $info = (new Query())
                        ->select(['uid', 'fieldLayoutId'])
                        ->from(['{{%supertableblocktypes}}'])
                        ->where(['id'=> $key])
                        ->one();

                    if ($info) {
                        $blockType->id = $key;
                        $blockType->uid = $info['uid'];
                        $blockType->fieldLayoutId = $info['fieldLayoutId'];
                    }
                }

                $fields = [];

                if (!empty($config['fields'])) {
                    foreach ($config['fields'] as $fieldId => $fieldConfig) {
                        /** @noinspection SlowArrayOperationsInLoopInspection */
                        $fieldConfig = array_merge($defaultFieldConfig, $fieldConfig);

                        $fields[] = Craft::$app->getFields()->createField([
                            'type' => $fieldConfig['type'],
                            'id' => is_numeric($fieldId) ? $fieldId : null,
                            'name' => $fieldConfig['name'],
                            'handle' => $fieldConfig['handle'],
                            'instructions' => $fieldConfig['instructions'],
                            'required' => (bool)$fieldConfig['required'],
                            'translationMethod' => $fieldConfig['translationMethod'],
                            'translationKeyFormat' => $fieldConfig['translationKeyFormat'],
                            'settings' => $fieldConfig['typesettings'],
                        ]);
                    }
                }

                $blockType->setFields($fields);
                $this->_blockTypes[] = $blockType;
            }
        }
    }
public function setBlockTypes($blockTypes)
    {
        $this->_blockTypes = [];
        $defaultFieldConfig = [
            'type' => null,
            'instructions' => null,
            'required' => false,
            'translationMethod' => Field::TRANSLATION_METHOD_NONE,
            'translationKeyFormat' => null,
            'typesettings' => null,
        ];

        foreach ($blockTypes as $key => $config) {
            if ($config instanceof SuperTableBlockTypeModel) {
                $this->_blockTypes[] = $config;
            } else {
                $blockType = new SuperTableBlockTypeModel();
                $blockType->fieldId = $this->id;

                // Existing block type?
                if (is_numeric($key)) {
                    $info = (new Query())
                        ->select(['uid', 'fieldLayoutId'])
                        ->from(['{{%supertableblocktypes}}'])
                        ->where(['id'=> $key])
                        ->one();

                    if ($info) {
                        $blockType->id = $key;
                        $blockType->uid = $info['uid'];
                        $blockType->fieldLayoutId = $info['fieldLayoutId'];
                    }
                }

                $fields = [];

                if (!empty($config['fields'])) {
                    foreach ($config['fields'] as $fieldId => $fieldConfig) {
                        /** @noinspection SlowArrayOperationsInLoopInspection */
                        $fieldConfig = array_merge($defaultFieldConfig, $fieldConfig);

                        $fields[] = Craft::$app->getFields()->createField([
                            'type' => $fieldConfig['type'],
                            'id' => is_numeric($fieldId) ? $fieldId : null,
                            'name' => $fieldConfig['name'],
                            'handle' => $fieldConfig['handle'],
                            'instructions' => $fieldConfig['instructions'],
                            'required' => (bool)$fieldConfig['required'],
                            'translationMethod' => $fieldConfig['translationMethod'],
                            'translationKeyFormat' => $fieldConfig['translationKeyFormat'],
                            'settings' => $fieldConfig['typesettings'],
                        ]);
                    }
                }

                $blockType->setFields($fields);
                $this->_blockTypes[] = $blockType;
            }
        }
    }
public function setBlockTypes ( $ blockTypes ) { $ this -> _blockTypes = [ ] ; $ defaultFieldConfig = [ 'type' => null , 'instructions' => null , 'required' => false , 'translationMethod' => Field :: TRANSLATION_METHOD_NONE , 'translationKeyFormat' => null , 'typesettings' => null , ] ; foreach ( $ blockTypes as $ key => $ config ) { if ( $ config instanceof SuperTableBlockTypeModel ) { $ this -> _blockTypes [ ] = $ config ; } else { $ blockType = new SuperTableBlockTypeModel ( ) ; $ blockType -> fieldId = $ this -> id ; // Existing block type? if ( is_numeric ( $ key ) ) { $ info = ( new Query ( ) ) -> select ( [ 'uid' , 'fieldLayoutId' ] ) -> from ( [ '{{%supertableblocktypes}}' ] ) -> where ( [ 'id' => $ key ] ) -> one ( ) ; if ( $ info ) { $ blockType -> id = $ key ; $ blockType -> uid = $ info [ 'uid' ] ; $ blockType -> fieldLayoutId = $ info [ 'fieldLayoutId' ] ; } } $ fields = [ ] ; if ( ! empty ( $ config [ 'fields' ] ) ) { foreach ( $ config [ 'fields' ] as $ fieldId => $ fieldConfig ) { /** @noinspection SlowArrayOperationsInLoopInspection */ $ fieldConfig = array_merge ( $ defaultFieldConfig , $ fieldConfig ) ; $ fields [ ] = Craft :: $ app -> getFields ( ) -> createField ( [ 'type' => $ fieldConfig [ 'type' ] , 'id' => is_numeric ( $ fieldId ) ? $ fieldId : null , 'name' => $ fieldConfig [ 'name' ] , 'handle' => $ fieldConfig [ 'handle' ] , 'instructions' => $ fieldConfig [ 'instructions' ] , 'required' => ( bool ) $ fieldConfig [ 'required' ] , 'translationMethod' => $ fieldConfig [ 'translationMethod' ] , 'translationKeyFormat' => $ fieldConfig [ 'translationKeyFormat' ] , 'settings' => $ fieldConfig [ 'typesettings' ] , ] ) ; } } $ blockType -> setFields ( $ fields ) ; $ this -> _blockTypes [ ] = $ blockType ; } } }
Sets the block types.

@param SuperTableBlockType|array $blockTypes The block type settings or actual SuperTableBlockType model instances
Sets the block types .