theme/templates/partials/variants/header_custom.html.twig line 40

Open in your IDE?
  1. <header class="header {% block header_class %}hs_1{% endblock %}">
  2.     <div class="line-1">
  3.         <div class="logo-mini">
  4.           <a {% if get_config('logo_link','')|default %} href="/" {% else %}{% endif %} aria-label="{{ get_config('default_meta_page_name',app.request.getLocale())|default }}">
  5.             {# {{ file_get_contents(asset('custom/mini-norte.svg', 'global'))|raw }} #}
  6.             {% if get_config('logo_mobile','')|default %}
  7.               <img src="{{CDN_URL|default}}{{get_config('logo_mobile','')|default}}" alt="{{ get_config('default_meta_page_name',app.request.getLocale())|default }} Logo" class="d-lg-none">
  8.             {% endif %}
  9.             {# <img src="{{CDN_URL|default}}{{get_config('logomini_portugal','')|default(asset('none.png', 'global'))}}" alt="{{ get_config('default_meta_page_name',app.request.getLocale())|default }} Logo"{% if get_config('logo_mobile','')|default %} class="d-none d-lg-block"{% endif %} > #}
  10.              <img
  11.               src="{{ asset('custom/logomenu_contala_scroll.svg', 'global') }}"
  12.               alt="logo-mini"
  13.               {% if get_config('logo_mobile','')|default %} class="d-none d-lg-block"{% endif %} >
  14.           </a>
  15.         </div>
  16.       {#  OLD TERRITORY #}
  17. {#        <div class="territory">#}
  18. {#          <span class="primary-300">#}
  19. {#            <a href="/">{{ 'conta_la'|trans ({},'custom' )|html_entity_decode|raw }}</a>#}
  20. {#          </span>#}
  21. {#          <div class="select-territory ">#}
  22. {#              <div class="selected js-select-territory">#}
  23. {#                <div>Portugal</div>#}
  24. {#                <div class="arrow">#}
  25. {#                  {{ file_get_contents(asset('custom/arrow-down-icon.svg', 'global'))|raw }}#}
  26. {#                </div>#}
  27. {#              </div>#}
  28. {#              <ul class="card card-blur options">#}
  29. {#                <li><a href="#">Portugal</a></li>#}
  30. {#                <li><a href="#">Norte</a></li>#}
  31. {#                <li><a href="#">Centro</a></li>#}
  32. {#                <li><a href="#">Sul</a></li>#}
  33. {#                <li><a href="#">Rural</a></li>#}
  34. {#              </ul>#}
  35. {#          </div>#}
  36. {#        </div>#}
  37.         {% include "partials\\variants\\explore-watchtv.html.twig" %}
  38.         <div class="weather"></div>
  39.         <div class="menu-top2">
  40.           <ul class="navbar-nav">
  41.                       {{ render(controller('App\\Controller\\PageContentController::RenderMenu',[], {'menu': "menutop2"}) ) }}
  42.                   </ul>
  43.         </div>
  44.         {% include "partials\\elements\\languages.twig" %}
  45.         {% if get_config('results_pages', '')|default %}
  46.           <div class="search">
  47.             <a href="#" class="js-search-bt" aria-label="{{ 'acess_to_search'|trans ({},'custom' )|html_entity_decode|raw }}">
  48.               {{ file_get_contents(asset('custom/search-icon.svg', 'global'))|raw }}
  49.             </a>
  50.           </div>
  51.         {% endif %}
  52. {#   TEMPORARY REMOVAL FOR v1.0     #}
  53. {#        {% if app.user is not null and app.user is instanceof('App\\Admin\\Entity\\StdWebUsers') %}#}
  54. {#          <div class="favorits">Favoritos</div>#}
  55. {#        {% endif %}#}
  56. {#        {% include "partials\\elements\\webusers.twig" %}#}
  57.         <div class="col-menu-mobile">
  58.             <button class="js-menumobile-hamburger" aria-label="menu button" type="button">
  59.                 <span class="hamburger-box">
  60.                     <span class="hamburger-inner"></span>
  61.                 </span>
  62.             </button>
  63.         </div>
  64.     </div>
  65.     {% if get_config('notificationsbar_page', '')|default %}
  66.         <div class="line-2">
  67.             {% block notificationsbar %}
  68.                 {% include "partials\\elements\\notifications.twig" %}
  69.             {% endblock %}
  70.         </div>
  71.     {% endif %}
  72.     <div class="{% if get_config('container_fluid','')|default %}container-fluid{% else %}container{% endif %}{% if get_config('showdesktophamburguermenu','')|default %} position-relative align-items-center{% endif %} last-line">
  73.         <div class="grid">
  74.       <div class="logo">
  75.         <a {% if get_config('logo_link','')|default %} href="/" {% else %}{% endif %} aria-label="{{ get_config('default_meta_page_name',app.request.getLocale())|default }}">
  76.         {# {% if get_config('logo_mobile','')|default %}
  77.           <img src="{{CDN_URL|default}}{{get_config('logo_mobile','')|default}}" alt="{{ get_config('default_meta_page_name',app.request.getLocale())|default }} Logo" class="d-lg-none">
  78.         {% endif %}                     #}
  79.           <img src="{{CDN_URL|default}}{{get_config('logo','')|default(asset('none.png', 'global'))}}" alt="{{ get_config('default_meta_page_name',app.request.getLocale())|default }} Logo" class="logo__default" >
  80.           <img src="{{CDN_URL|default}}{{get_config('logo_transparent_header','')|default(get_config('logo',''))|default(asset('none.png', 'global'))}}" alt="{{ get_config('default_meta_page_name',app.request.getLocale())|default }} Logo" class="logo__transparent">
  81.         </a>
  82.       </div>
  83.       {% include "partials\\variants\\explore-watchtv.html.twig" %}
  84.       <div class="menu-top2">
  85.           <ul class="navbar-nav">
  86.                       {{ render(controller('App\\Controller\\PageContentController::RenderMenu',[], {'menu': "menutop2"}) ) }}
  87.                   </ul>
  88.       </div>
  89.         </div>
  90.     </div>
  91.   <div class="menu-mobile">
  92.     {% if get_config('menubackgroundvideo','')|default and get_config('desktophamburguermenustyle','') == "full_width_menu"  %}
  93.       <div class="underlay">
  94.         <video autoplay muted loop playsinline src="{{ CDN_URL ~ get_config('menubackgroundvideo','') }}" type="video/mp4" class="d-none d-lg-block"></video>
  95.         <div class="mask d-none d-lg-block"></div>
  96.       </div>
  97.     {% endif %}
  98.     <div class="mwrapper">
  99.       <ul class="navbar-nav">
  100.           {{ render(controller('App\\Controller\\PageContentController::RenderMenu',[], {'menu': "menumobile"}) ) }}
  101.       </ul>
  102.     </div>
  103.     {% if get_config('contact_pages',"")|default %}
  104.       {% set contactpage = get_page_info(app.request.locale,get_config('contact_pages',"")) %}
  105.         <div class="btn-fixed-bottom">
  106.           <a href="{{contactpage.url}}">
  107.             <span>{{contactpage.title}}</span>
  108.           </a>
  109.         </div>
  110.     {% endif %}
  111.     {% if alternateUrls|length > 1 %}
  112.       <div class="lang d-flex">
  113.         {% for alternateUrl in alternateUrls %}
  114.           <a class="{% if alternateUrl.language_code == locale %}active{% endif %}" href="{{alternateUrl.url|raw}}">
  115.             {{alternateUrl.language_code|default}}
  116.           </a>
  117.         {% endfor %}
  118.       </div>
  119.     {% endif %}
  120.   </div>
  121.   <div class="explore-pannel" data-api-url="{{ path('api_explore_options') }}?locale={{ app.request.locale }}">
  122.     <div class="explore-pannel-body h-100 custom-scroll">
  123.       <div class="container">
  124.         <div class="row h-100 py-lg-5">
  125.           <div class="col-auto col-explore-pannel-body-logowidth d-none d-lg-block">
  126.             <div class="explore-pannel-body-logowidth"></div>
  127.           </div>
  128.           <div class="col col-search">
  129.             <form id="formexplore" class="explore-pannel-body-generalsearch" action="/pt/pesquisa" method="get">
  130.               <div>
  131.                 <button id="btn_explore_close" class="trigger-explore js-explore-bt">
  132.                   <i class="fa-solid fa-xmark"></i>
  133.                   <span>{{ 'close'|trans ({},'custom' )|html_entity_decode|raw }}</span>
  134.                 </button>
  135.               </div>
  136.               {# Pesquisa livre #}
  137.               <div class="form-group search-themes">
  138.                 <label for="searchbox" class="title-from-group">{{ 'label_explore_search'|trans ({},'custom' )|html_entity_decode|raw }}</label>
  139.                 <div class="wrapp-searchbox">
  140.                 <select id="searchbox" class="selectpicker customselectpicker form-control" multiple data-live-search="true" title="{{ 'placeholder_explore_search'|trans ({},'custom' ) }}">
  141.                    {# {% for i in 1..3 %}
  142.                   <optgroup label="Tema {{ i }}">
  143.                     <option value="Tema {{ i }}" class="theme d-none">Tema {{ i }}</option>
  144.                     <option value="Sub-Tema.{{ i }}.1" class="subtheme">Sub-Tema.{{ i }}.1</option>
  145.                     <option value="Sub-Tema.{{ i }}.2" class="subtheme">Sub-Tema.{{ i }}.2</option>
  146.                     <option value="Sub-Tema.{{ i }}.3" class="subtheme">Sub-Tema.{{ i }}.3</option>
  147.                     <option value="Sub-Tema.{{ i }}.4" class="subtheme">Sub-Tema.{{ i }}.4</option>
  148.                   </optgroup>
  149.                   {% endfor %}                   #}
  150.                   {# Options are populated dynamically from /api/explore/options (Temas tree) #}
  151.                 </select>
  152.                 </div>
  153.               </div>
  154.               {# (Tags moved below content_type) #}
  155.               {# Temas #}
  156.               <div class="form-group themes">
  157.                 <div class="title-from-group d-flex justify-content-between align-items-center">
  158.                   <span>{{ 'main_themes'|trans ({},'custom' )|html_entity_decode|raw }}</span>
  159.                   <button type="button" class="border-0 bg-transparent btn-primary btn-style-1" onclick="clearCheckboxes('themes[]')">
  160.                     {{ 'clear'|trans({},'custom')|default('Reset filters') }}
  161.                   </button>
  162.                 </div>
  163.                 <div id="write-themes-box">
  164.                   {# <div class="form-check-inline">
  165.                       <label class="form-check-label" for="politica">
  166.                         <input type="checkbox" class="form-check-input" id="politica" name="themes[]" value="Politica" checked>Política
  167.                       </label>
  168.                     </div>
  169.                   #}
  170.                 </div>
  171.               </div>
  172.               {# Sub-temas - kept for JS compatibility, hidden with CSS #}
  173.               <div class="form-group sub-themes" style="display: none;">
  174.                 <div class="title-from-group d-flex justify-content-between align-items-center">
  175.                   <span>{{ 'sub_themes'|trans ({},'custom' )|html_entity_decode|raw }}</span>
  176.                   <button type="button" class="border-0 bg-transparent btn-primary btn-style-1" onclick="clearCheckboxes('subthemes[]')">
  177.                     {{ 'clear'|trans({},'custom')|default('Reset filters') }}
  178.                   </button>
  179.                 </div>
  180.                 <div id="write-subthemes-box">
  181.                 </div>
  182.               </div>
  183.               <div class="separator"></div>
  184.               {# Formatos #}
  185.               {# Tags searchable (now placed under content_type) #}
  186.               <div class="form-group tags-group">
  187.                 <div class="title-from-group">
  188.                   {{ 'label_explore_tag_search'|trans({},'custom')|default('Procura algo mais específico?')|html_entity_decode|raw }}
  189.                 </div>
  190.                 <div class="wrapp-searchbox">
  191.                   <select id="explore-tags" class="selectpicker customselectpicker form-control" multiple data-live-search="true" title="{{ 'placeholder_explore_tag_search'|trans({},'custom')|default('Selecione aqui as tags') }}"></select>
  192.                 </div>
  193.               </div>
  194.               <div class="form-group selected-tags">
  195.                 <div class="title-from-group d-flex justify-content-between align-items-center">
  196.                   <span>{{ 'selected_tags'|trans({},'custom')|default('Tag(s)')|html_entity_decode|raw }}</span>
  197.                   <button type="button" class="border-0 bg-transparent btn-primary btn-style-1" onclick="clearCheckboxes('tags[]')">
  198.                     {{ 'clear'|trans({},'custom')|default('Reset filters') }}
  199.                   </button>
  200.                 </div>
  201.                 <div id="write-tags-box"></div>
  202.               </div>
  203.               <div class="separator"></div>
  204.               {# Formatos #}
  205.               {% set filterKeys = app.request.query.get('content_type') %}
  206.               <div class="form-group content_type">
  207.                 <div class="title-from-group">{{ 'content_types'|trans ({},'custom' )|html_entity_decode|raw }}</div>
  208.                 <div class="form-check-inline">
  209.                   <label class="content_type_label" for="noticiais">
  210.                     <input
  211.                       type="checkbox"
  212.                       class="form-check-input content_type_option"
  213.                       id="noticiais"
  214.                       name="content_type[]"
  215.                       value="news"
  216.                       {% if filterKeys is defined and filterKeys is iterable and 'news' in filterKeys %} checked {% endif %}
  217.                       >Notícias
  218.                   </label>
  219.                 </div>
  220.                 <div class="form-check-inline">
  221.                   <label class="content_type_label" for="news_reports">
  222.                     <input
  223.                       type="checkbox"
  224.                       class="form-check-input content_type_option"
  225.                       id="news_reports"
  226.                       name="content_type[]"
  227.                       value="news_reports"
  228.                       {% if filterKeys is defined and filterKeys is iterable and 'news_reports' in filterKeys %} checked {% endif %}
  229.                       >Reportagens
  230.                   </label>
  231.                 </div>
  232.                 <div class="form-check-inline">
  233.                   <label class="content_type_label" for="programs">
  234.                     <input
  235.                       type="checkbox"
  236.                       class="form-check-input content_type_option"
  237.                       id="programs"
  238.                       name="content_type[]"
  239.                       value="programs"
  240.                       {% if filterKeys is defined and filterKeys is iterable and 'programs' in filterKeys %} checked {% endif %}
  241.                       >Programas
  242.                   </label>
  243.                 </div>
  244.                 <div class="form-check-inline">
  245.                   <label class="content_type_label" for="event">
  246.                     <input
  247.                       type="checkbox"
  248.                       class="form-check-input content_type_option"
  249.                       id="event"
  250.                       name="content_type[]"
  251.                       value="event"
  252.                       {% if filterKeys is defined and filterKeys is iterable and 'event' in filterKeys %} checked {% endif %}
  253.                       >Eventos
  254.                   </label>
  255.                 </div>
  256.               </div>
  257.               <div class="explore-pannel-body-generalsearch-footer">
  258.                 <div class="container">
  259.                   <div class="row">
  260.                     <div class="col">
  261.                       <div class="actions">
  262.                         <button type="button" class="reset2 js-reset-filters" onclick="clearAllContent()">
  263.                           {{ 'clear_all_filters'|trans ({},'custom' )|html_entity_decode|raw }}
  264.                         </button>
  265.                         <button type="submit" class="btn-secondary">{{ 'apply'|trans ({},'custom' )|html_entity_decode|raw }}</button>
  266.                       </div>
  267.                     </div>
  268.                   </div>
  269.                 </div>
  270.               </div>
  271.             </form>
  272.           </div>
  273.         </div>
  274.       </div>
  275.     </div>
  276.   </div>
  277.   {% if get_config('results_pages', '')|default %}
  278.     {% set searchpage=get_page_info(app.request.locale,get_config('results_pages','')) %}
  279.     <div class="search-pannel">
  280.       <div class="search-pannel-body container">
  281.         <div class="row">
  282.           <div class="col-auto d-none d-lg-block">
  283.             <div class="search-pannel-body-logowidth"></div>
  284.           </div>
  285.           <div class="col col-search">
  286.             <form action="{{searchpage.url|default('#')}}" class="search-pannel-body-generalsearch">
  287.               <input type="search" name="p" placeholder="{{ 'placeholder_search'|trans ({},'custom' )|html_entity_decode|raw }}" class="form-control">
  288.               <button id="btn-search-submit" type="submit" class="btn btn-secondary" disabled>
  289.                 <span>{{ 'search_btn'|trans ({},'custom' )|html_entity_decode|raw }}</span>
  290.               </button>
  291.               <button id="btn-search-close" class="js-search-bt">
  292.                   <i class="fa-solid fa-xmark"></i>
  293.                   <span>Fechar</span>
  294.                 </button>
  295.             </form>
  296.           </div>
  297.         </div>
  298.       </div>
  299.     </div>
  300.   {% endif %}
  301. </header>
  302. <script>
  303.   // Search field validation (keep this inline as it's template-specific)
  304.   document.addEventListener('DOMContentLoaded', function () {
  305.       const searchField = document.getElementsByName('p')[0];
  306.       const searchBtn = document.getElementById('btn-search-submit');
  307.       if (searchField) {
  308.           // Prevenir Enter apenas se o campo estiver vazio
  309.           searchField.addEventListener('keypress', function (event) {
  310.               if (event.key === 'Enter') {
  311.                   if (searchField.value.trim() === '') {
  312.                       event.preventDefault();
  313.                   }
  314.                   // Se tiver conteúdo, deixa o submit acontecer naturalmente
  315.               }
  316.           });
  317.           // Controlar o estado do botão
  318.           searchField.addEventListener('input', function () {
  319.               if (searchBtn) {
  320.                   if (searchField.value.trim() !== '') {
  321.                       searchBtn.disabled = false;
  322.                   } else {
  323.                       searchBtn.disabled = true;
  324.                   }
  325.               }
  326.           });
  327.       }
  328.   });
  329. </script>