Everything is HTML
One of DonorPoint’s most powerful — and least visible — design principles is this: all content is HTML, and all HTML is evaluated against live data at render time.
This applies to:
- Donor-facing form layouts and item descriptions
- Confirmation pages
- Receipt and all other autoresponder emails
- Mass email templates
- Page template wrappers (headers, footers, navigation)
- Document templates (tickets, letters, receipts, PDFs)
- View pages (custom admin and portal screens)
What This Means
Write content once. Use merge tags and expressions to make it personal. When the content is rendered — for each donor, each email, each document — DonorPoint evaluates every #{expression} against the current context and substitutes the result.
A single email template with Dear #{contact.firstName}, sends a personalised greeting to every recipient. A single confirmation page with #{ORDERTABLE} shows each donor their specific transaction summary. A single document template with #{fund.get('GL_CODE').value} produces a correctly coded receipt for every fund designation.
The Merge Tag System
DonorPoint has two types of expressions in content:
Legacy uppercase tags — #{CONTACT}, #{DATE}, #{ORDERTABLE} — resolved by string substitution before rendering. These are the quickest to type and cover the most common data.
EL (Expression Language) tags — #{contact.firstName}, #{purchaseOrder.amount}, #{orderItem.get('Dept').value} — full expression language evaluated against all data in the current context. These access any data in the system.
Both types can be mixed freely in the same content.
Dynamic Tables
Use the data-value and data-var HTML attributes on a <table> element to produce repeating rows:
<table data-value="#{purchaseOrder.orderItems}" data-var="item">
<tr>
<td>#{item.fund.name}</td>
<td>$#{item.extendedPrice}</td>
</tr>
</table>
This renders one row per line item in the transaction — or any other collection in context.
XHTML Requirement
All DonorPoint content is XHTML — an XML-compatible variant of HTML. When writing or editing raw HTML directly:
- Use
 instead of - Use
&for ampersands in URLs and text - Wrap
<script>tag content in CDATA sections - All tags must be properly closed
The visual editors (drag-and-drop designer and rich-text editor) handle these requirements automatically. Only the code editor (Source view) requires manual attention to XHTML rules.
One System, All Channels
Because email, confirmation pages, document templates, and form content all use the same merge tag syntax, content skills transfer directly across channels. What you learn writing a receipt email applies immediately to writing a print letter template or a custom view page.