templates/Front/Venue/venues.html.twig line 1

Open in your IDE?
  1. {% extends "Global/layout.html.twig" %}
  2. {% set pagetitle = 'Venues'|trans %}
  3. {% block title %}{{pagetitle}}{% endblock %}
  4. {% block content %}
  5.     {% set navigation = [{"current" : (pagetitle)}] %}
  6.     {% include "Global/navigation.html.twig" with navigation %}
  7.     <section class="section-content padding-y bg-white">
  8.         <div class="{{ services.getSetting("app_layout") }}">
  9.             <div class="box shadow-none bg-gray mb-4">
  10.                 <div class="row">
  11.                     <div class="col-sm-12 col-lg-3 text-center text-lg-left mb-3 mb-lg-0">
  12.                         <span class="center-lg-y text-muted">{{ "%resultsCount% result(s) found"|trans({'%resultsCount%': venues.getTotalItemCount}) }}</span>
  13.                     </div>
  14.                     <div class="col-sm-12 col-lg-6 offset-lg-3 text-center text-lg-right">
  15.                         <label for="sortable-select" class="display-inline">{{ "Sort by"|trans }}
  16.                             <select id="sortable-select" class="form-control display-inline-block bg-white select2 ml-3" data-placeholder="{{ "Select an option"|trans }}" style="width: 50%;">
  17.                                 {{ knp_pagination_sortable(venues, "Creation date"|trans ~ ' (' ~ "desc"|trans ~ ')', "v.createdAt", {"direction": "desc", "criteria": "v.createdAt"}) }}
  18.                                 {{ knp_pagination_sortable(venues, "Creation date"|trans ~ ' (' ~ "asc"|trans ~ ')', "v.createdAt", {"direction": "asc", "criteria": "v.createdAt"}) }}
  19.                             </select>
  20.                         </label>
  21.                     </div>
  22.                 </div>
  23.             </div>
  24.             <div class="row">
  25.                 <aside class="col-lg-3 order-2 order-lg-1">
  26.                     <div class="card card-filter">
  27.                         <form method="get">
  28.                             <article class="card-group-item">
  29.                                 <header class="card-header">
  30.                                     <a href="#" data-toggle="collapse" data-target="#filter-keyword">
  31.                                         <i class="icon-action fa fa-chevron-down"></i>
  32.                                         <h6 class="title">{{ "Keyword"|trans }}</h6>
  33.                                     </a>
  34.                                 </header>
  35.                                 <div class="filter-content collapse show" id="filter-keyword">
  36.                                     <div class="card-body">
  37.                                         <input id="keyword" name="keyword" type="text" class="form-control" value="{{ app.request.get('keyword') }}" placeholder="{{ "Venue name..."|trans }}">
  38.                                     </div>
  39.                                 </div>
  40.                             </article>
  41.                             <article class="card-group-item">
  42.                                 <header class="card-header">
  43.                                     <a href="#" data-toggle="collapse" data-target="#filter-country">
  44.                                         <i class="icon-action fa fa-chevron-down"></i>
  45.                                         <h6 class="title">{{ "Country"|trans }}</h6>
  46.                                     </a>
  47.                                 </header>
  48.                                 <div class="filter-content collapse show" id="filter-country">
  49.                                     <div class="card-body">
  50.                                         <select id="filter-country-select" class="form-control select2" name="country" data-sort-options="1">
  51.                                             <option value="">&nbsp;</option>
  52.                                             {% for country in services.getCountries({}).getQuery().getResult() %}
  53.                                                 <option value="{{ country.slug }}">{{ country.name }}</option>
  54.                                             {% endfor %}
  55.                                         </select>
  56.                                     </div>
  57.                                 </div>
  58.                             </article>
  59.                             <article class="card-group-item">
  60.                                 <header class="card-header">
  61.                                     <a href="#" data-toggle="collapse" data-target="#filter-venue-type">
  62.                                         <i class="icon-action fa fa-chevron-down"></i>
  63.                                         <h6 class="title">{{ "Venue type"|trans }}</h6>
  64.                                     </a>
  65.                                 </header>
  66.                                 <div class="filter-content collapse show" id="filter-venue-type">
  67.                                     <div class="card-body">
  68.                                         {% for venuetype in services.getVenuesTypes({ 'hasvenues': true, 'limit': 5, 'sort': 'venuescount', 'order': 'DESC' }).getQuery().getResult() %}
  69.                                             <div class="form-check">
  70.                                                 <div class="float-left custom-control custom-checkbox form-check-input">
  71.                                                     <input type="checkbox" class="custom-control-input" id="venue-type-{{ loop.index }}" name="venuetypes[]" value="{{ venuetype.slug }}">
  72.                                                     <label class="custom-control-label" for="venue-type-{{ loop.index }}">{{ venuetype.name }}</label>
  73.                                                 </div>
  74.                                                 <span class="float-right form-check-label">
  75.                                                     <span class="badge badge-light round">{{ venuetype.venues|length }}</span>
  76.                                                 </span>
  77.                                                 <div class="clearfix"></div>
  78.                                             </div>
  79.                                         {% endfor %}
  80.                                     </div>
  81.                                 </div>
  82.                             </article>
  83.                             <article class="card-group-item">
  84.                                 <header class="card-header">
  85.                                     <a href="#" data-toggle="collapse" data-target="#filter-seated-guests">
  86.                                         <i class="icon-action fa fa-chevron-down"></i>
  87.                                         <h6 class="title">{{ "Seated guests"|trans }}</h6>
  88.                                     </a>
  89.                                 </header>
  90.                                 <div class="filter-content collapse show" id="filter-seated-guests">
  91.                                     <div class="card-body">
  92.                                         <div class="range-slider mb-3" data-min="1" data-max="10000" data-start-left="{{ app.request.get('minseatedguests') ?? "1" }}" data-start-right="{{ app.request.get('maxseatedguests') ?? "9999" }}"></div>
  93.                                         <div class="row ranger-slider-inputs">
  94.                                             <div class="col-12 col-sm-6">
  95.                                                 <label for="minseatedguests">{{"Min"|trans }}</label>
  96.                                                 <input id="minseatedguests" name="minseatedguests" type="text" class="form-control range-slider-min-input" value="{{ app.request.get('minseatedguests') }}" placeholder="{{ "Min"|trans }}">
  97.                                             </div>
  98.                                             <div class="col-12 col-sm-6">
  99.                                                 <label for="maxseatedguests">{{"Max"|trans }}</label>
  100.                                                 <input id="maxseatedguests" name="maxseatedguests" type="text" class="form-control range-slider-max-input" value="{{ app.request.get('maxseatedguests') }}" placeholder="{{ "Max"|trans }}">
  101.                                             </div>
  102.                                         </div>
  103.                                     </div>
  104.                                 </div>
  105.                             </article>
  106.                             <article class="card-group-item">
  107.                                 <header class="card-header">
  108.                                     <a href="#" data-toggle="collapse" data-target="#filter-standing-guests">
  109.                                         <i class="icon-action fa fa-chevron-down"></i>
  110.                                         <h6 class="title">{{ "Standing guests"|trans }}</h6>
  111.                                     </a>
  112.                                 </header>
  113.                                 <div class="filter-content collapse show" id="filter-standing-guests">
  114.                                     <div class="card-body">
  115.                                         <div class="range-slider mb-3" data-min="1" data-max="10000" data-start-left="{{ app.request.get('minstandingguests') ?? "1" }}" data-start-right="{{ app.request.get('maxstandingguests') ?? "9999" }}"></div>
  116.                                         <div class="row ranger-slider-inputs">
  117.                                             <div class="col-12 col-sm-6">
  118.                                                 <label for="minstandingguests">{{"Min"|trans }}</label>
  119.                                                 <input id="minstandingguests" name="minstandingguests" type="text" class="form-control range-slider-min-input" value="{{ app.request.get('minstandingguests') }}" placeholder="{{ "Min"|trans }}">
  120.                                             </div>
  121.                                             <div class="col-12 col-sm-6">
  122.                                                 <label for="maxstandingguests">{{"Max"|trans }}</label>
  123.                                                 <input id="maxstandingguests" name="maxstandingguests" type="text" class="form-control range-slider-max-input" value="{{ app.request.get('maxstandingguests') }}" placeholder="{{ "Max"|trans }}">
  124.                                             </div>
  125.                                         </div>
  126.                                     </div>
  127.                                 </div>
  128.                             </article>
  129.                             {#<article class="card-group-item">
  130.                                 <header class="card-header">
  131.                                     <a href="#" data-toggle="collapse" data-target="#collapse33">
  132.                                         <i class="icon-action fa fa-chevron-down"></i>
  133.                                         <h6 class="title">Price range</h6>
  134.                                     </a>
  135.                                 </header>
  136.                                 <div class="filter-content collapse show" id="collapse33">
  137.                                     <div class="card-body">
  138.                                         <div class="btn-group btn-group-toggle" data-toggle="buttons">
  139.                                             <label class="btn btn-primary btn-sm pl-2 pr-2">
  140.                                                 <input type="radio" name="options" id="option1" autocomplete="off" checked> $
  141.                                             </label>
  142.                                             <label class="btn btn-primary btn-sm pl-2 pr-2">
  143.                                                 <input type="radio" name="options" id="option2" autocomplete="off"> $$
  144.                                             </label>
  145.                                             <label class="btn btn-primary btn-sm pl-2 pr-2">
  146.                                                 <input type="radio" name="options" id="option3" autocomplete="off"> $$$
  147.                                             </label>
  148.                                             <label class="btn btn-primary btn-sm pl-2 pr-2">
  149.                                                 <input type="radio" name="options" id="option2" autocomplete="off"> $$$$
  150.                                             </label>
  151.                                             <label class="btn btn-primary btn-sm pl-2 pr-2">
  152.                                                 <input type="radio" name="options" id="option3" autocomplete="off"> $$$$$
  153.                                             </label>
  154.                                         </div>
  155.                                     </div>
  156.                                 </div>
  157.                             </article>#}
  158.                             <article class="card-group-item">
  159.                                 <div class="card-body">
  160.                                     <button class="btn btn-block btn-outline-primary"><i class="fas fa-search"></i> {{ "Search"|trans }}</button>
  161.                                 </div>
  162.                             </article>
  163.                         </form>
  164.                     </div>
  165.                     {% if services.getSetting("newsletter_enabled") == "yes" and services.getSetting("mailchimp_api_key") and services.getSetting("mailchimp_list_id") %}
  166.                         {% include "Global/newsletter-box.html.twig" %}
  167.                     {% endif %}
  168.                 </aside>
  169.                 <div class="col-lg-9 order-1 order-lg-2">
  170.                     {% if venues.getTotalItemCount > 0 %}
  171.                         {% for venue in venues %}
  172.                             {% include "Global/venue-card.html.twig" with {'venue': venue} %}
  173.                         {% endfor %}
  174.                     {% else %}
  175.                         {% include "Global/message.html.twig" with { type: "info", message: ('No venues found'|trans), icon: "fas fa-exclamation-circle" } %}
  176.                     {% endif %}
  177.                 </div>
  178.             </div>
  179.             {% if venues.getTotalItemCount > 0 %}
  180.                 {{ knp_pagination_render(venues, null, {}, {'align': 'center'}) }}
  181.             {% endif %}
  182.         </div>
  183.     </section>
  184. {% endblock %}
  185. {% block javascripts %}
  186.     <script>
  187.     async function clickOnVenue(slug) {
  188.         try{
  189.         console.log('Sending ticket for event:', slug);
  190.             await fetch('{{ asset("assets/ll_assets/assets/js/tracardi.js") }}').then(response => {
  191.                 if (!response.ok) {
  192.                     throw new Error('Network response was not ok');
  193.                 }
  194.                 return response.text();
  195.             }).then(scriptContent => {
  196.                 const scriptElement = document.createElement('script');
  197.                 scriptElement.text = scriptContent;
  198.                 document.body.appendChild(scriptElement);
  199.             });
  200.                 await new Promise((resolve, reject) => {
  201.                 try {
  202.                     window.tracker.track('Click on banner', {
  203.                         Type: 'Click',
  204.                         Action: 'Lead',
  205.                         venueSlug: slug
  206.                     });
  207.                     resolve();
  208.                 } catch (error) {
  209.                     reject(error);
  210.                 }
  211.             });
  212.             window.location.replace(`/venue/${slug}`);
  213.             } catch (error) {
  214.             console.error('Error:', error);
  215.             console.error('An error occurred.');
  216.         }
  217.     }
  218.     </script>
  219.     <script>
  220.         $(document).ready(function () {
  221.             if (getURLParameter('country')) {
  222.                 $('#filter-country-select option').each(function () {
  223.                     if ($(this).val() == getURLParameter('country'))
  224.                     {
  225.                         $(this).prop('selected', true).trigger('change');
  226.                     }
  227.                 });
  228.             }
  229.             if (getURLArrayParameter('venuetypes[]')) {
  230.                 for (var i = 0; i < getURLArrayParameter('venuetypes[]').length; i++) {
  231.                     console.log(getURLArrayParameter('venuetypes[]'));
  232.                     $('input[name="venuetypes[]"][value="' + getURLArrayParameter('venuetypes[]')[i] + '"]').prop('checked', 'checked');
  233.                 }
  234.             }
  235.         });
  236.     </script>
  237. {% endblock %}