feat: #3607228 Build the programmes listing and programme page to the design
Brings the programmes listing and the programme page in line with the design.
Listing
- Full width section, one programme per row, in the design's order. The listing sorts on the Sector term weight, so the vocabulary drives the order and editors reorder it by dragging terms.
- Each row is a 40/60 split: a panel with the title, summary and Learn More beside the image, vertically centred, 16px panel corners and 12px image corners, ~114px between rows.
- Dropped the result summary, corrected the hidden heading that read "All blog posts", and the hero now reads the design's copy.
Programme page
node.program.full was empty, so every Learn More led to a blank page. It now follows the design end to end: hero panel with the title, summary and image; the write-up; a headline feature beside a photograph; a by-the-numbers panel with three figures; a how-we-deliver intro beside four tinted cards; a world map highlighting the countries the programme runs in; the news slider; and a closing call to action.
The fields that needed adding
The design asks for content the Program type did not hold. Reusing Country's storages where they exist, and adding the rest:
field_headline,field_on_the_ground,field_on_the_ground_image— the headline feature block.field_figures_heading,field_figures_description,field_figure_number,field_figure_description— the figures panel.field_delivery_heading,field_our_role,field_delivery_title,field_delivery_text— the four delivery cards.field_map_heading,field_map_texton Program andfield_country_codeon Country — the map, which highlights a country by its two-letter code.field_cta_heading,field_cta_text— the closing call to action.
All are on the programme edit form, and the five demo programmes and twelve countries carry values.
Also
- Program gained a compact
cardview mode for the related grid; the wide listing template does not fit a three-up grid. - The blog slider keeps the reference site's navy band, and a second display renders it on the light panel the programme page needs.
- Restored the
finish_urlwithout its leading slash, which this branch had reverted.
Verified on a clean build, installed twice from this branch — through the browser site-template picker and through drush: 70 nodes, 25 terms, 74 media, 7 pages, program.full 60 components, event.full still 22, and both pages measured against the design.
Two gaps are left, both outside this recipe: the delivery cards have no icon tiles (the icon component takes a media reference, and there is no icon media yet), and the news cards show no category badge or teaser because varbase_blog_base ships that card template with an invalid UUID, so it cannot be repointed.
AI-Generated: Yes
Checkpoints:
- File an issue
- Addition/Change/Update/Fix
- Testing to ensure no regression
- Automated unit testing coverage
- Automated functional testing coverage
- UX/UI designer responsibilities
- Readability
- Accessibility
- Performance
- Security
- Developer Documentation
- User Guide Documentation
- Reviewed by human
- Code review by maintainers
- Full testing and approval
- Credit contributors
- Review with the product owner
- Release notes snippet
- Release