Template:Category/Workshop logistics
Render template for Category:Workshop logistics.
Called by the SemanticSchemas dispatcher when a page belongs to Category:Workshop logistics. Renders the whole participant-facing logistics page from structured fields, in the visual language the 2026 Paris and 2026 Research Triangle pages established by hand: tinted arrival callout, what-to-bring callout, at-a-glance card grid, then one panel per topic.
Everything the dispatcher passes as a parameter is read as a parameter,
not re-queried with #show — the dispatcher already has the
values. The only #show calls left are the two that chain
one hop out to the linked Workshop record for its start date (to label
the meal days), and the subobject queries for lodging and meals.
What lives in fields vs. in the page body
Fields cover what recurs at every venue — the door, the rooms, the transit, the beds, the food, the wifi, the dress code. That is also what makes the set queryable — "which upcoming workshop still has no wifi info" becomes an #ask rather than a reading exercise.
Anything long-form and venue-specific stays in the page body, which flows in below this template's output: a multi-section software-setup walkthrough, a room-by-room floor guide, a translated welcome note. The template deliberately does not try to absorb those — a field per one-off is how a schema rots.
Sections and anchors
Real == headings, so the TOC works and the at-a-glance
cards can deep-link: #What_to_bring,
#Getting_there, #Accommodation,
#Food, #WiFi, #Other.
The venue heading is a plain == Venue == rather than the
hand-written pages' "Venue: ESPCI" — interpolating the venue name into
the heading would make the anchor venue-dependent
(#Venue:_ESPCI,_Paris) and break every incoming deep link.
The venue name is the first line inside the panel instead.
Each section suppresses itself entirely when it has no data, so a half-filled page reads as a shorter page rather than a page full of empty boxes. The exception is the arrival callout, which renders a visible editor-facing hint when empty: a logistics page that does not say how to get in the door is not usable, and silence there should be loud.
Properties read (all via dispatcher parameters)
Has workshop(required),Has workshop hub- Arrival —
Has arrival entrance,
Has arrival first stop,Has arrival note,Has preparation url
- Bring —
Has required items,Has optional items - Venue —
Has location,Has address,
Has venue room,Has map url,Has directions url,Has venue note
- Transport —
Has airport transport,
Has public transport,Has local transport
- Accommodation —
Has accommodation note+ Lodging option
subobjects
- Food —
Has caterer,Has caterer url,
Has dietary note,Has on site food+ Meal service subobjects
- WiFi —
Has wifi network,Has wifi password,
Has wifi note
- Other —
Has dress code,
Has facility dress code,Has on site contact
Not rendered here: Has catering arrangement,
Has catering payment, Has room food policy,
Has host contact. Those four answer the host institution's
side of the planning conversation and are organiser-facing only. They
are stored here but deliberately not rendered: participants should
never see our billing arrangements. Nothing currently displays them —
they are captured for the record and for #ask queries.
Page-typed and multi-valued parameters
Dispatcher parameters arrive as the raw form values: a multi-valued
Page property is a comma-separated list of page names, not
wikilinks. Has venue room and Has on site contact
therefore route through Template:Category/Workshop logistics/pagelist, which
arraymaps the list into links. Multi-valued URL properties
(Has directions url, Has preparation url) route
through Template:Category/Workshop logistics/linklist. A URL
containing a literal comma would be split by that arraymap — the same
constraint |+sep=, already imposes on
Has recording url wiki-wide; percent-encode the comma.
Meal day iteration
Meals are grouped into one column per calendar day by invoking
Template:Category/Workshop logistics/meal-day seven times, at
offsets −1 through +5 from the linked workshop's
Has start date. Offset −1 exists for the arrival-evening
dinner that lands before day one. Each block self-suppresses when that
day has no meals (the day heading rides in the query's
intro=, which SMW omits on an empty result), so the run of
seven costs seven queries and renders only the days that exist.
The day label is computed here and passed down, because
#ask's intro= value is scanned for
| in the template source and an inline
{{#time: … | … }} would have its pipe
eaten. See that subtemplate's notes.
Section gating on subobject counts
#ask … format=count returns the string "0",
which is truthy to #if. Every count gate here goes
through #ifexpr: … > 0 and emits a sentinel character that
the enclosing #if then tests. Testing the count directly
would render an empty Accommodation panel on every page.
Parameters:
category— "Workshop logistics" (informational)page— the page being rendered. Falls back to
Template:Category/Workshop logistics.
- plus one parameter per property above, snake-cased by the dispatcher.