fix: #3614494 Repair the install, tag the demo events and build the event full page
Summary
Three distinct faults in the Horizon Aid Site recipe, each reproduced before fixing:
1. Fresh installs aborted
The ten event-topic term files carried format: basic_html on their description. Varbase ships no basic_html format (it has full_html, content_format, plain_text, plus Canvas and webform formats), so Drupal\Core\DefaultContent\Importer threw InvalidEntityException on event-topic-education.yml:
description.0.format=The value you selected is not a valid choice.The event_topics vocabulary was never created, the import stopped at that file, and blog truncated to 25 nodes. Every other shipped term file in the recipe has no description, so the block is dropped to match. Reproduced both in the real browser installer via the site-template picker and headlessly with drush site:install recipes/horizonaid.
2. No event was tagged with a topic
Each event's _meta.depends map declared only its category term and its media. Drupal's default-content importer resolves only declared entity: references, so every field_event_topics value was dropped silently — 0 of 24 events tagged, and the Topic exposed filter added in the earlier issue (#3614099, MR !15 (merged)) returned nothing for every option. The topic term UUIDs are now declared in depends.
3. The event full page rendered empty
canvas.content_template.node.event.full existed with component_tree: {} — a placeholder from varbase_events_base — so /events/<alias> rendered header and footer with zero characters of main content, no h1, no images. It is now filled from the design : media banner with the title and description, a 75/25 section carrying About this Event, What You'll Learn, Speakers and a sticky Share rail, then a "More Events" section embedding the events related display.
Adds field_what_you_will_learn and field_speakers as text_long with textarea widgets. Rich text rather than multi-value on purpose: Canvas content templates cannot loop, so a multi-value field must be bound by fixed index (field_partners␞0, ␞1, …) and would leave empty component slots when an event has fewer items. This matches how country.full already models its prose sections (field_our_role, field_on_the_ground).
The events related display could never return results either — it related by field_tags, which no event carries (the 26 tagged nodes are blogs), and its default_argument_options.vids was scoped to the tags vocabulary. It now relates by field_event_topics scoped to event_topics, keeping the nid argument so the current event is excluded.
Also adds About / What You'll Learn / Speakers demo content to all 24 events.
Verification
Verified on a clean install from this recipe (drush site:install recipes/horizonaid), plus a real-browser install through the site-template picker.
| Check | Result |
|---|---|
| Import / validation errors | none |
| Nodes | blog=26 country=12 event=24 page=3 program=5 |
event_topics terms |
10 |
| Events tagged with a topic | 24 of 24 |
| Events carrying body / What You'll Learn / Speakers | 24 / 24 / 24 |
| Event page | H1 title, 2 About paragraphs, 4 bullets, 3 speaker lines, banner at 20px radius, breadcrumb |
| More Events | 2 topic-related events |
Topic filtering on /events |
Protection 5, Health 2, Shelter 3, Partnerships 5 |
Known gaps (stated honestly, not hidden)
- The design's list bullets are a custom blue dot (a
list-textcomponent the theme does not ship), so bullets currently use the Bootstrap default. Theme-side, to be handled separately. - The Share rail renders but is not sticky/vertical on the current
sharecomponent version. Theme-side, to be handled separately. - The component version hashes pinned in the content template are only valid for the theme version installed when they were read. When the theme changes they go stale and the recipe stops installing — this happened during development and was fixed by re-reading the live component schemas. Worth deciding whether these templates should pin hashes at all.
Issue
AI-Generated: Yes
Checkpoints
- File an issue about this project
- Addition/Change/Update/Fix to this project
- Testing to ensure no regression
- Automated unit/functional testing coverage
- Developer Documentation support on feature change/addition
- User Guide Documentation support on feature change/addition
- UX/UI designer responsibilities
- Accessibility and Readability
- Reviewed by a human
- Code review by maintainers
- Full testing and approval
- Credit contributors
- Review with the product owner
- Update Release Notes
- Release