Only return HubDB multi-select and select options if active on row item
Hello!
I was having trouble finding an answer to this.
I have a HubDB table with a few columns. One of these columns is a multiselect and another is a select column.
I am looping through on the front-end to show the options in the multiselect and select columns, but I only want those output if there is a row entry that has been assigned to one of those items.
Example, in my select column, I have
Blog Posts
Case Studies
ROI Calculators
Survey Results
On the front-end, it's showing all 4 of those options, but I only have row items assigned to 3 of them. Here is my output code
{% set tab2 = hubdb_table_column(6934042, "type") %} {% if tab2 %} <ul class="u3m-filtered-content__multi-filter__ul fs_industries_type"> <li><a data-filter="all">All Content Types</a></li> {% for cat2 in tab2.options %} <li> <a data-filter=".{{ cat2.name|lower|replace(' ','-')|replace('/','-')|replace('&','-')|replace(',','-') }}">{{ cat2.name }}</a> </li> {% endfor %} </ul>
Only return HubDB multi-select and select options if active on row item
Hey @marenhogan One way would be instead of accessing the options of the columns directly, to filter out all used values in the rows of the hubdb:
{# your hubdb table id #}
{% set table_id = 6934042 %}
{# name of the (multi)select column #}
{% set multiselect_column_name = "type" %}
{# get all hubdb rows #}
{% set table = hubdb_table_rows(table_id) %}
{# remove rows that have no value and select the column #}
{% set table_filtered_multiselect = table|selectattr(multiselect_column_name)|map(multiselect_column_name) %}
{# get all the used options from the rows #}
{% set used_multiselect_options = [] %}
{% for item in table_filtered_multiselect %}
{% for subitem in item %}
{% do used_multiselect_options.append(subitem) %}
{% endfor %}
{% endfor %}
{# remove duplicates and sort the options #}
{% set used_multiselect_options = used_multiselect_options|unique|sort(False, False, "order") %}
{{ used_multiselect_options|pprint }}