{"result":{"depiction_url":null,"edges":{"in_module":{"objects":[{"created":"2020-05-30T05:47:17Z","object_id":{"id":1296,"is_a":["text","documentation","reference","module"],"name":"doc_module_mod_base","title":"mod_base","uri":"https:\/\/zotonic.com\/id\/1296"},"seq":1000000}],"predicate":{"id":333,"is_a":["meta","predicate"],"name":"in_module","title":{"_type":"trans","tr":{"en":"In module"}},"uri":"https:\/\/zotonic.com\/id\/in_module"}},"references":{"objects":[{"created":"2020-05-30T05:47:16Z","object_id":{"id":1278,"is_a":["text","documentation","reference","model"],"name":"doc_model_model_rsc","title":"rsc","uri":"https:\/\/zotonic.com\/id\/1278"},"seq":1000000}],"predicate":{"id":332,"is_a":["meta","predicate"],"name":"references","title":{"_type":"trans","tr":{"en":"References"}},"uri":"https:\/\/zotonic.com\/id\/references"}},"refers":{"objects":[{"created":"2026-09-09T13:48:04Z","object_id":{"id":1278,"is_a":["text","documentation","reference","model"],"name":"doc_model_model_rsc","title":"rsc","uri":"https:\/\/zotonic.com\/id\/1278"},"seq":1000000}],"predicate":{"id":2409,"is_a":["meta","predicate"],"name":"refers","title":{"_type":"trans","tr":{"en":"Refers"}},"uri":"https:\/\/zotonic.com\/id\/refers"}},"relation":{"objects":[{"created":"2020-05-30T05:47:17Z","object_id":{"id":1295,"is_a":["text","documentation","reference","template_filter"],"name":"doc_template_filter_filter_group_title_firstchar","title":"group_title_firstchar","uri":"https:\/\/zotonic.com\/id\/1295"},"seq":1000000}],"predicate":{"id":303,"is_a":["meta","predicate"],"name":"relation","title":{"_type":"trans","tr":{"nl":"Relatie","en":"Relation"}},"uri":"http:\/\/purl.org\/dc\/terms\/relation"}},"subject":{"objects":[{"created":"2026-09-09T13:48:04Z","object_id":{"id":2555,"is_a":["categorization","keyword","keyword_information_type"],"name":"zotonic_topic_reference","title":"Reference","uri":"https:\/\/zotonic.com\/id\/2555"},"seq":1},{"created":"2026-09-09T13:48:04Z","object_id":{"id":2563,"is_a":["categorization","keyword","keyword_audience"],"name":"zotonic_topic_frontend_developer","title":"Frontend developer","uri":"https:\/\/zotonic.com\/id\/2563"},"seq":2},{"created":"2026-09-09T13:48:04Z","object_id":{"id":2621,"is_a":["categorization","keyword","keyword_architecture"],"name":"zotonic_topic_template_filter","title":"Template filter","uri":"https:\/\/zotonic.com\/id\/2621"},"seq":3},{"created":"2026-09-09T13:48:04Z","object_id":{"id":2643,"is_a":["categorization","keyword","keyword_task"],"name":"zotonic_topic_query","title":"Query","uri":"https:\/\/zotonic.com\/id\/2643"},"seq":4},{"created":"2026-09-09T13:48:04Z","object_id":{"id":2664,"is_a":["categorization","keyword","keyword_data_type"],"name":"zotonic_topic_collection","title":"Collection","uri":"https:\/\/zotonic.com\/id\/2664"},"seq":5}],"predicate":{"id":308,"is_a":["meta","predicate"],"name":"subject","title":{"_type":"trans","tr":{"en":"Keyword"}},"uri":"http:\/\/purl.org\/dc\/elements\/1.1\/subject"}}},"id":1294,"is_a":["text","documentation","reference","template_filter"],"links":[{"rel":"self","target":"https:\/\/zotonic.com\/.zotonic\/websub\/topic\/1294"},{"rel":"hub","target":"https:\/\/zotonic.com\/.zotonic\/websub"}],"medium":null,"medium_url":null,"name":"doc_template_filter_filter_group_firstchar","page_url":{"en":"https:\/\/zotonic.com\/docs\/1294\/group_firstchar","x-default":"https:\/\/zotonic.com\/docs\/1294\/group_firstchar"},"preview_url":null,"resource":{"version":3979,"pivot_location_lat":null,"title":"group_firstchar","is_authoritative":true,"body":"<p>Group a list of sorted <a href=\"\/id\/doc_model_model_rsc\" class=\"doc-reference doc-reference-model\"><code>model#rsc<\/code><\/a> resource IDs on their first letter of the title or another resource\nproperty. After grouping, it splits this list in a number of more-or-less even columns.<\/p>\n<p>This is useful for displaying multiple columns of alphabetically sorted pages, in which the pages are grouped by the\nfirst letter, for instance a search result.<\/p>\n<p>For instance, this piece of template code:<\/p>\n<pre class=\"notranslate\"><code class=\"notranslate language-django\">&lt;table&gt;\n{% for cols in m.search[{query cat=&quot;country&quot; sort=&quot;pivot_title&quot;}]|group_firstchar:&quot;title&quot;:3 %}\n   &lt;td&gt;\n      {% for group in cols %}\n      &lt;b&gt;{{ group.first }}&lt;\/b&gt;\n      {% for id in group.result %}\n      &lt;li&gt;\n          {{ id.title }}\n      &lt;\/li&gt;\n      {% endfor %}\n   {% endfor %}\n   &lt;\/td&gt;\n{% endfor %}\n&lt;\/table&gt;\n<\/code><\/pre>\n<p>Groups the list of ids by title in three columns. It then uses nested for-loops to render a table similar to this:<\/p>\n<pre class=\"notranslate\"><code class=\"notranslate language-django\">+----------------+----------------+----------------+\n|A               |D               |G               |\n| Afghanistan    | Denmark        | Georgia        |\n| Azerbeidjan    |                | Germany        |\n|                |E               | Grenada        |\n|B               | Ecuador        | Guadeloupe     |\n| Belgium        | Egypt          | Greenland      |\n| Belarus        | Eritrea        | Guinea         |\n| Brazil         | Estonia        |                |\n|                |                |H               |\n|C               |F               | Haiti          |\n| Canada         | Fiji           |                |\n|                | Finland        |                |\n+----------------+----------------+----------------+\n<\/code><\/pre>\n<p>As you can see, all three columns have approximately the same size, although the size of the indiviual groups differs.<\/p>\n<p>When no nr. of columns is given, the groups are returned in a single column.<\/p>","slug":"group_firstchar","is_protected":false,"visible_for":0,"tz":"UTC","language":["en"],"doc_source_hash":"0f0a6ecd452b9a9bebd4ccf41a4dd1b3b4a569cbc2a4102499131681acf6e01e","is_featured":false,"content_group_id":{"id":2551,"is_a":["meta","content_group"],"name":"content_group_imported_docs","title":"Imported documentation","uri":"https:\/\/zotonic.com\/id\/content_group_imported_docs"},"category_id":{"id":325,"is_a":["meta","category"],"name":"template_filter","title":"Filters","uri":"https:\/\/test.zotonic.com\/id\/325"},"doc_source_path":"apps\/zotonic_mod_base\/src\/filters\/filter_group_firstchar.erl","publication_start":"2023-06-24T08:18:03Z","github_url":"https:\/\/github.com\/zotonic\/zotonic\/blob\/master\/apps\/zotonic_mod_base\/src\/filters\/filter_group_firstchar.erl","pivot_location_lng":null,"doc_source_kind":"filter","name":"doc_template_filter_filter_group_firstchar","is_unfindable":false,"is_published":true,"pivot_geocode":null,"created":"2020-05-30T05:47:16Z","uri":null,"doc_status":"current","is_dependent":false,"erlang_app":"zotonic_mod_base","publication_end":"9999-06-01T00:00:00Z","modifier_id":{"id":1,"is_a":["person"],"name":"administrator","title":"Site Administrator","uri":"https:\/\/zotonic.com\/id\/1"},"privacy":0,"doc_source_commit":"66cb145eae7002b184e7d8c4c7bba5e53e8248e5\n","erlang_module":"filter_group_firstchar","creator_id":{"id":336,"is_a":["person","robot"],"name":"gitbot","title":"Git","uri":"https:\/\/zotonic.com\/id\/336"},"modified":"2026-10-02T12:40:30Z","title_slug":"group_firstchar"},"uri":"https:\/\/zotonic.com\/id\/1294","uri_template":"https:\/\/zotonic.com\/id\/:id","websub":{"hub":"https:\/\/zotonic.com\/.zotonic\/websub","topic":"https:\/\/zotonic.com\/.zotonic\/websub\/topic\/1294"}},"status":"ok"}