1

Whew, complicated thing to described in a short subject line! :)

Okay, so I have a structure like this:


  • Asia
    • Peking
      • weekend ( field howLongWillYouBeGoing == 'shortStay' )
      • long weekend ( field howLongWillYouBeGoing == 'mediumStay' )
      • week ( field howLongWillYouBeGoing == 'longStay' )
  • Europe
    • Peking
      • weekend ( field howLongWillYouBeGoing == 'shortStay' )
  • South America (no subpages)

I have a navigation bar that just lists the continents and turns them into a link as soon as it has descendants. When it doesn't have descendants, it just shows the continent name as a non-clickable text.

Now this is the thing. I have used the following code, but it doesn't work. It still shows Europe in this example as a link, even though I believe the conditions are not met. I would LOVE love love any input because I've been staring myself blind on this the last few hours :)

{# loop through continents #}
{% for entry in craft.entries.section('destinations').type('continent').find() %}
    {# only show links to continent pages if it has any travelguides #}
    {% if entry.hasDescendants(3) %}

        {% set mediumStay = 0 %}
        {% for subPage in entry.getDescendants(2) %}
            {% if subPage.howLongWillYouBeGoing == 'mediumStay' %}
                {% set mediumStay = 1 %}
            {% endif %}
        {% endfor %}

        {% if mediumStay == 1 %}
            {# if subpage is marked as mediumstay, show a link to it #}
            <li><a href="{{ entry.url }}" {% if craft.request.firstSegment == entry.slug %}class="is-active"{% endif %}>{{ entry.title }}</a></li>
        {% endif %}
    {% else %}
        <li>{{ entry.title }}</li>
    {% endif %}
{% endfor %}
1
  • @lindsey-d thank you for cleaning up my code! I was struggling a bit there. Commented Mar 24, 2017 at 11:02

1 Answer 1

1

Wow - thanks for listening ;-)

I solved it like this:

{# loop through continents #}
{% for entry in craft.entries.section('destinations').type('continent').find() %}   
    {# only show links to continent pages if it has any travelguides #}
    {% if entry.hasDescendants() %}
        {% set continentID = entry.id %}
        {% if entry.howLongWillYouBeGoing == 'mediumStay' in craft.entries.section('destinations').descendantOf(continentID) %}
            {# if subpage is marked as mediumstay, show a link to it #}
            <li><a href="{{ entry.url }}" {% if craft.request.firstSegment == entry.slug %}class="is-active"{% endif %}>{{ entry.title }}</a></li>  
        {% else %} 
            {# if it's not a mediumStay, just show the text #}
            <li>{{ entry.title }}</li>
        {% endif %} 
    {% else %} 
        <li>{{ entry.title }}</li>
    {% endif %}
{% endfor %} 

😘

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.