diff --git a/README.md b/README.md index 8535139..8cbe61f 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,17 @@ Allows to reference and print a custom block plugin. You only need to put `allow */ ~~~~ +Version 4 supports PHP Attributes: +~~~~ +#[Block( + id: "category_products_block", + admin_label: new TranslatableMarkup("Category products"), + context_definitions: [ + 'allow_as_block_plugin_field_context' => new ContextDefinition('boolean'), + ] +)] +~~~~ + ### Mr. Milú Color: Provides a field type to store a color in hexadecimal format. diff --git a/mrmilu_fields.info.yml b/mrmilu_fields.info.yml index 9f2d978..ebdeff8 100644 --- a/mrmilu_fields.info.yml +++ b/mrmilu_fields.info.yml @@ -2,5 +2,5 @@ name: Mr. Milú Fields description: Provides some custom fields package: Mr. Milú type: module -core_version_requirement: ^8.8.0 || ^9 || ^10 -version: 3.0.0 +core_version_requirement: ^10 || ^11 +version: 4.0.0 diff --git a/mrmilu_fields.services.yml b/mrmilu_fields.services.yml new file mode 100644 index 0000000..9d06e3c --- /dev/null +++ b/mrmilu_fields.services.yml @@ -0,0 +1,5 @@ +services: + mrmilu_fields.allow_as_plugin_field_context: + class: Drupal\mrmilu_fields\ContextProvider\AllowAsBlockPluginFieldContext + tags: + - { name: 'context_provider' } diff --git a/src/ContextProvider/AllowAsBlockPluginFieldContext.php b/src/ContextProvider/AllowAsBlockPluginFieldContext.php new file mode 100644 index 0000000..ba2dc57 --- /dev/null +++ b/src/ContextProvider/AllowAsBlockPluginFieldContext.php @@ -0,0 +1,30 @@ + new Context(new ContextDefinition('boolean'), TRUE), + ]; + } + + /** + * {@inheritdoc} + */ + public function getAvailableContexts(): array { + return $this->getRuntimeContexts([]); + } + +} diff --git a/src/Plugin/Field/FieldWidget/MrMiluBlockPluginWidget.php b/src/Plugin/Field/FieldWidget/MrMiluBlockPluginWidget.php index f829a53..17019cf 100644 --- a/src/Plugin/Field/FieldWidget/MrMiluBlockPluginWidget.php +++ b/src/Plugin/Field/FieldWidget/MrMiluBlockPluginWidget.php @@ -103,8 +103,14 @@ public function getOptions() { $options = ['_none' => t('- None -')]; $definitions = $this->blockManager->getDefinitionsForContexts($this->contextRepository->getAvailableContexts()); foreach ($definitions as $id => $definition) { + // Default support for Annotations. if (!empty($definition['allow_as_block_plugin_field'])) { $options[$id] = $definition['admin_label']; + continue; + } + // Support for PHP Attributes. + if (isset($definition['context_definitions']['allow_as_block_plugin_field_context'])) { + $options[$id] = $definition['admin_label']; } } return $options;