diff --git a/composer.json b/composer.json index aed627d..a5e829a 100644 --- a/composer.json +++ b/composer.json @@ -22,6 +22,7 @@ "drupal/config_split": "^1.4", "drupal/core-composer-scaffold": "^8.8", "drupal/core-recommended": "^8.8", + "drupal/discoverable_entity_bundle_classes": "^1.0", "drupal/google_analytics": "^2.4", "drupal/honeypot": "^2.0", "drupal/hook_event_dispatcher": "^1.28", diff --git a/composer.lock b/composer.lock index 3119a7a..414ba46 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "45ee4839265d8526697b7d951fc351a2", + "content-hash": "94cf3f9b73a5a2ae184de25fd2a302b7", "packages": [ { "name": "asm89/stack-cors", @@ -2322,6 +2322,56 @@ "issues": "https://www.drupal.org/project/issues/ctools" } }, + { + "name": "drupal/discoverable_entity_bundle_classes", + "version": "1.0.0-alpha2", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/discoverable_entity_bundle_classes.git", + "reference": "8.x-1.0-alpha2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/discoverable_entity_bundle_classes-8.x-1.0-alpha2.zip", + "reference": "8.x-1.0-alpha2", + "shasum": "c8f1e27475f3a1b7d7694949baaf337ed126c05a" + }, + "require": { + "drupal/core": "~8.0" + }, + "require-dev": { + "drupal/paragraphs": "*" + }, + "type": "drupal-module", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + }, + "drupal": { + "version": "8.x-1.0-alpha2", + "datestamp": "1553798282", + "security-coverage": { + "status": "not-covered", + "message": "Project has not opted into security advisory coverage!" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "amcgowanca", + "homepage": "https://www.drupal.org/user/802138" + } + ], + "description": "An experimental approach for implementing entity classes for specific bundles.", + "homepage": "https://www.drupal.org/project/discoverable_entity_bundle_classes", + "support": { + "source": "https://git.drupalcode.org/project/discoverable_entity_bundle_classes" + } + }, { "name": "drupal/entity_reference_revisions", "version": "1.8.0", diff --git a/config/default/core.extension.yml b/config/default/core.extension.yml index b4ee2ac..2138dd6 100644 --- a/config/default/core.extension.yml +++ b/config/default/core.extension.yml @@ -14,6 +14,7 @@ module: custom: 0 datetime: 0 dblog: 0 + discoverable_entity_bundle_classes: 0 dynamic_page_cache: 0 entity_reference_revisions: 0 field: 0 diff --git a/web/modules/custom/custom/custom.module b/web/modules/custom/custom/custom.module index 709199a..c7ad0c0 100644 --- a/web/modules/custom/custom/custom.module +++ b/web/modules/custom/custom/custom.module @@ -7,14 +7,15 @@ declare(strict_types=1); -use Drupal\custom\Entity\Node; +use Drupal\discoverable_entity_bundle_classes\Storage\Node\NodeStorage; /** * Implements hook_entity_type_build(). */ function custom_entity_type_build(array &$entityTypes): void { + /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entityTypes */ if (isset($entityTypes['node'])) { - $entityTypes['node']->setClass(Node::class); + $entityTypes['node']->setStorageClass(NodeStorage::class); } } diff --git a/web/modules/custom/custom/src/Entity/Node/Post.php b/web/modules/custom/custom/src/Entity/Node/Post.php new file mode 100644 index 0000000..00b6527 --- /dev/null +++ b/web/modules/custom/custom/src/Entity/Node/Post.php @@ -0,0 +1,25 @@ +get('field_has_tweet')->getString(); + } + +} diff --git a/web/modules/custom/custom/tests/src/Kernel/TalksTestBase.php b/web/modules/custom/custom/tests/src/Kernel/TalksTestBase.php index cb15c11..c7d8bc5 100644 --- a/web/modules/custom/custom/tests/src/Kernel/TalksTestBase.php +++ b/web/modules/custom/custom/tests/src/Kernel/TalksTestBase.php @@ -22,6 +22,7 @@ abstract class TalksTestBase extends EntityKernelTestBase { 'datetime', // Contrib. + 'discoverable_entity_bundle_classes', 'entity_reference_revisions', 'paragraphs', 'hook_event_dispatcher', diff --git a/web/themes/custom/opdavies/opdavies.theme b/web/themes/custom/opdavies/opdavies.theme index 4bcb0b0..c5fcb18 100644 --- a/web/themes/custom/opdavies/opdavies.theme +++ b/web/themes/custom/opdavies/opdavies.theme @@ -5,20 +5,22 @@ * Functions to support theming in the Tailwind CSS theme. */ +use Drupal\custom\Entity\Node\Post; + /** * Implements hook_preprocess_HOOK(). */ function opdavies_preprocess_page(array &$variables): void { - /** @var \Drupal\Core\Entity\EntityInterface $node */ - if (!$node = \Drupal::routeMatch()->getParameter('node')) { + /** @var \Drupal\custom\Entity\Node\Post $node */ + if (!$node = $variables['node']) { return; } - if ($node->getType() != 'post') { + if (!$node instanceof Post) { return; } - if ($node->get('field_has_tweet')->getString()) { + if ($node->hasTweet()) { $variables['#attached']['library'][] = 'opdavies/twitter'; } }