Answers.Body: <p>What you could do is to get all the descendants and loop them to check if at least one has that lightswitch not set.</p>
  
  <pre><code>{% set showDropdown = 0 %}
  {% for subPage in page.getDescendants() if subPage.genericHideFromNavigation == 0 %}
      {% set showDropdown = 1 %}
  {% endif %}
  
  &lt;li class="{% if showDropdown %}has-dropdown{% endif %}"&gt;&lt;/li&gt;
  </code></pre>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2014-11-15T21:50:52.100Z
Answers.LastActivityDate: 2014-11-15T21:50:52.100Z
Answers.UserDisplayName: carlcs
Body: <p>I'm building a navigation menu with 2 levels.  </p>
  
  <p>I have a contact page with a subpage thank you, which is hidden.  </p>
  
  <p>I hide pages from the menu using a lightswitch option and filter these pages out in my entries call.  </p>
  
  <p>However I check if a page has subpages using hasDescendants(), and if the page does, I add the class "has-dropdown" but my contact menu item contains the class "has-dropdown" too which technically is correct as it has a subpage but is it possible to filter with hasDescendants() ?</p>
  
  <pre><code>{% set pages = craft.entries.find({section: "page", genericHideFromNavigation: "[0]"}) %}
  {% if pages | length %}
      &lt;ul class="main-nav"&gt;
          {% nav page in pages %}
              &lt;li class="{% if page.hasDescendants() %}has-dropdown{% endif %}"&gt;
                  &lt;a href="{{ page.url }}" title="{{ page.title }}"&gt;{{ page.title }}&lt;/a&gt;
  
                  {% ifchildren %}
                      &lt;ul class="dropdown"&gt;
                          {% children %}
                      &lt;/ul&gt;
                  {% endifchildren %}
              &lt;/li&gt;
          {% endnav %}
      &lt;/ul&gt;
  {% endif %}
  </code></pre>
  
Tags: <navigation>
Title: Is it possible to filter with hasDescendants?
ThreadText: # Is it possible to filter with hasDescendants?
  
  (Asked by: username_0 on 2014-11-15)
  
  I'm building a navigation menu with 2 levels.
  
  I have a contact page with a subpage thank you, which is hidden.
  
  I hide pages from the menu using a lightswitch option and filter these pages out in my entries call.
  
  However I check if a page has subpages using hasDescendants(), and if the page does, I add the class "has-dropdown" but my contact menu item contains the class "has-dropdown" too which technically is correct as it has a subpage but is it possible to filter with hasDescendants() ?
  
  ```
  {% set pages = craft.entries.find({section: "page", genericHideFromNavigation: "[0]"}) %}
  {% if pages | length %}
      <ul class="main-nav">
          {% nav page in pages %}
              <li class="{% if page.hasDescendants() %}has-dropdown{% endif %}">
                  <a href="{{ page.url }}" title="{{ page.title }}">{{ page.title }}</a>
  
                  {% ifchildren %}
                      <ul class="dropdown">
                          {% children %}
                      </ul>
                  {% endifchildren %}
              </li>
          {% endnav %}
      </ul>
  {% endif %}
  
  ```
  
  **Tags:** navigation
  
  
  ---
  
  ## 1 answers
  
  ### Answer by username_1 on 2014-11-15. Score: 2 | Accepted answer
  
  What you could do is to get all the descendants and loop them to check if at least one has that lightswitch not set.
  
  ```
  {% set showDropdown = 0 %}
  {% for subPage in page.getDescendants() if subPage.genericHideFromNavigation == 0 %}
      {% set showDropdown = 1 %}
  {% endif %}
  
  <li class="{% if showDropdown %}has-dropdown{% endif %}"></li>
  
  ```
  
  
  ---
  
  