Help center Customer portals Liquid array filters: sort, select and summarize supplied lists Updated Wednesday, October 28, 2026 · Marc Staine Array filters help you turn a supplied list into a useful display: show pinned articles, collect readable names, remove duplicate labels or sort a small local section. They operate on the rows already available to the page. They do not search the database, broaden customer access or retrieve another page of results. At a glanceFor: portal administrators and designers, including people new to Liquid. Applies to: Supportbench Core.Start here: Settings → Customer Portal → select the portal → Page templates Start with the practical purpose · Syntax and supported behavior · Example: show pinned knowledge articles in a topic · Build a readable summary from simple values · Apply the example in a working portal page · Troubleshoot the common mistakes · Keep the customization understandable Start with the practical purpose An array is a sequence. When its rows are objects, use a property-aware filter such as map or where with an exact supported member name. Assign the transformed result to a descriptive variable before looping if that makes the template easier to understand.Do not silently replace a carefully configured topic order with alphabetical sorting. The best ordering depends on the customer task: a diagnostic sequence and a directory of names serve different purposes. Syntax and supported behavior Filter or access patternUsewhere: "pinned", trueSelect object rows whose named property matches the given value.map: "title"Build a list of title values from object rows. The result is a list, not one joined string.join: ", "Combine simple values into a string with a separator. Escape the resulting text.first / last / list[0]Get one element. Indexing begins at zero; index is not a filter name.size / sliceInspect length or take a portion of the supplied sequence.sort / sort_naturalSort supplied values or a named property; choose and test the intended ordering, including mixed case.reverseReverse the supplied list order.compactRemove nil entries. It is not a general removal of every blank-looking string.uniqRemove duplicate values from the supplied sequence.concatCombine two supplied sequences. It does not load additional records.splitTurn a delimited string into a sequence before other array operations. Example: show pinned knowledge articles in a topic {% assign pinned_articles = sb.container.articles | where: "pinned", true %} <ul> {% for article in pinned_articles %} <li><a href="/article/{{ article.id | escape }}">{{ article.title | escape_once }}</a></li> {% else %} <li>No pinned articles are available in this topic list.</li> {% endfor %} </ul>This requires the selected-container article context and only filters its supplied rows. Keep the normal article list accessible. A pinned-only panel is a useful shortcut, not a complete knowledge directory. Build a readable summary from simple values {% assign labels = "Installation|Maintenance|Installation" | split: "|" | uniq %} <p>{{ labels | join: ", " | escape }}</p>This local example prints Installation, Maintenance. For real objects, first map the intended label property. A list of objects cannot be usefully summarized by assuming each object automatically prints its display name. Apply the example in a working portal page Open the intended portal’s Page templates with permission to administer communities or the applicable edit override. Choose the page that supplies the object used by your example.Preserve a copy of the existing template in your change record. Keep the working forms, routes, input names and script hooks; these examples change presentation.Make the smallest useful edit, then choose Save Changes → Design. Inspect populated, empty and signed-out preview states as relevant.Check punctuation, long text, optional values and narrow-screen layout. Confirm the result says what you intend, not merely that it renders.Use Review changes → Publish for the approved design. Then verify the actual portal as the intended customer and check the full task.Designer preview data is synthetic. A successful preview confirms neither real customer access nor the effect of a server-side workflow. Liquid cannot grant permission, edit a case or fetch arbitrary database records. Troubleshoot the common mistakes ProblemCorrectionwhere returns no rowsCheck the exact member name, value type and whether the desired row was supplied to this page.map output runs togethermap returns a list; use join with a deliberate separator for a text summary.An index filter is unknownUse square-bracket indexing such as list[0], or first/last.Sorting breaks the intended knowledge sequencePreserve configured editorial ordering unless the section has a different explicit purpose.The filter is expected to enforce privacyIt only filters already supplied rows. Server-side customer visibility remains authoritative. Keep the customization understandable Label a filtered subsection accurately and preserve access to the normal list. Use array transformations to simplify a customer decision, not to build a second hidden reporting engine in the template.Use descriptive local variable names and keep conditions close to the content they control. Record the customer scenario tested when publishing a change. Recheck the template when its source fields, portal role rules or supported language behavior changes. Continue learning Customize and publish portal pages with LiquidRender collections with loopsUnderstand topic article-list members Was this article helpful? Yes No Thank you for your feedback.