aero_weather-1.0.3/templates/aero-weather-horizontal-block.html.twig

templates/aero-weather-horizontal-block.html.twig
{#
/**
 * @file
 * Default theme implementation for the Aero Weather block.
 *
 * This template renders the weather dashboard, displaying current weather conditions,
 * metrics, and forecast details.
 *
 * Variables expected from the controller or preprocess:
 * - weather_data.location.name: The name of the location (e.g., city name).
 * - weather_data.location.localtime: The local time at the location.
 * - weather_data.current.temp_c: The current temperature in Celsius.
 * - weather_data.current.temp_f: The current temperature in Fahrenheit.
 * - weather_data.current.humidity: The current humidity percentage.
 * - weather_data.current.cloud: The current cloud cover percentage.
 * - weather_data.current.uv: The current UV index.
 * - weather_data.current.vis_km: The current visibility in kilometers.
 * - weather_data.current.gust_kph: The current wind gust speed in kilometers per hour.
 * - weather_data.current.wind_dir: The direction of the current wind.
 * - weather_data.current.pressure_mb: The current atmospheric pressure in hPa.
 * - weather_data.current.precip_mm: The current precipitation in millimeters.
 * - weather_data.current.condition.icon: The icon representing the current weather condition.
 * - weather_data.forecast.forecastday[]: An array of forecast data for multiple days.
 *    Each entry contains weather information for a particular day (e.g., date, max temp, icon).
 *
 * The template includes:
 * - Current weather data with temperature and weather icon.
 * - Detailed weather metrics (UV Index, Precipitation, Cloud Coverage, Visibility, etc.)
 * - A swiper (carousel) for weather metrics.
 * - A forecast swiper with weather icons and temperatures for the next days.
 *
 * Additionally, it supports a dynamic layout based on the provided configuration settings:
 * - config.layout: The layout style for the weather card.
 * - config.color_palette: Color scheme for the card.
 * - config.round_border: Whether the card has rounded corners.
 * - config.uuid: A unique identifier for the weather card.
 * - config.background_image_url: Background image for the weather card (if provided).
 * - config.formatted_date: The formatted date for the location's current time.
 * - config.icon_settings: A configuration for the icons to be displayed for different weather metrics.
 *
 * The template also includes a conditional display for different weather metrics
 * and dynamic rendering of forecast information.
 */
#}
{% if weather_data %}
  {% set dynamic_classes = [
    config.layout,
    config.color_palette,
    config.round_border ? 'round-border' : '',
    config.background_image_url ? 'has-bg-image' : '',
    config.uuid
  ] %}
  <div class="weather-card-horizontal {{ dynamic_classes|join(' ') }}"
       data-id="{{ config.uuid }}"
        {% if config.background_image_url %}
         style="background-image: url('{{ config.background_image_url|escape('html_attr') }}'); background-size: cover; background-position: center;"
       {% endif %}>
    <div class="left-section">
      <div class="location-info">
        <div class="location-name">{{ weather_data.location.name }}</div>
        <div class="current-time-date">
          {{ config.formatted_date }}
        </div>
      </div>

      <div class="current-temp-and-icon">
        <div class="current-temp">
          <div class="temp-c">{{ weather_data.current.temp_c|round }}</div>
          <div class="temp-f hidden">{{ weather_data.current.temp_f|round }}</div>
        </div>
        <div class="temp-units">
          <span class="temp-c-switch font-bold">°C</span>
          <span class="temp-f-switch opacity-70">°F</span>
        </div>
        <img src="https:{{ weather_data.current.condition.icon|escape('html_attr') }}" alt="Weather Icon" class="current-icon">
      </div>
    </div>

    <div class="middle-section">
      <div class="swiper swiper-detailed-metrics">
        <div class="swiper-wrapper">

          {% if config.icon_settings.uv_index is defined and weather_data.current.uv is defined %}
          <div class="swiper-slide metric-item">
            {% include '@aero_weather/templates/icons/uv-index.html.twig' with { icon_config: config.icon_settings.uv_index } %}
            <div class="metric-label">{{ 'UV Index'|trans }}</div>
            <div class="metric-value">{{ weather_data.current.uv|default('N/A') }}</div>
          </div>
          {% endif %}

          {% if config.icon_settings.precipitation is defined and weather_data.current.precip_mm is defined %}
          <div class="swiper-slide metric-item">
            {% include '@aero_weather/templates/icons/precipitation.html.twig' with { icon_config: config.icon_settings.precipitation } %}
            <div class="metric-label">{{ 'Precipitation'|trans }}</div>
            <div class="metric-value">{{ weather_data.current.precip_mm|default('N/A') }} mm</div>
          </div>
          {% endif %}

          {% if config.icon_settings.clouds is defined and weather_data.current.cloud is defined %}
          <div class="swiper-slide metric-item">
            {% include '@aero_weather/templates/icons/clouds.html.twig' with { icon_config: config.icon_settings.clouds } %}
            <div class="metric-label">{{ 'Clouds'|trans }}</div>
            <div class="metric-value">{{ weather_data.current.cloud|default('N/A') }}%</div>
          </div>
          {% endif %}

          {% if config.icon_settings.visibility is defined and weather_data.current.vis_km is defined %}
          <div class="swiper-slide metric-item">
            {% include '@aero_weather/templates/icons/visibility.html.twig' with { icon_config: config.icon_settings.visibility } %}
            <div class="metric-label">{{ 'Visibility'|trans }}</div>
            <div class="metric-value">{{ weather_data.current.vis_km|default('N/A') }} km</div>
          </div>
          {% endif %}

          {% set astro = weather_data.forecast.forecastday[0].astro|default({}) %}
          {% if config.icon_settings.sunrise is defined and astro.sunrise is defined %}
          <div class="swiper-slide metric-item">
            {% include '@aero_weather/templates/icons/sunrise.html.twig' with { icon_config: config.icon_settings.sunrise } %}
            <div class="metric-label">{{ 'Sunrise'|trans }}</div>
            <div class="metric-value">{{ astro.sunrise|default('N/A') }}</div>
          </div>
          {% endif %}

          {% if config.icon_settings.sunset is defined and astro.sunset is defined %}
          <div class="swiper-slide metric-item">
            {% include '@aero_weather/templates/icons/sunset.html.twig' with { icon_config: config.icon_settings.sunset } %}
            <div class="metric-label">{{ 'Sunset'|trans }}</div>
            <div class="metric-value">{{ astro.sunset|default('N/A') }}</div>
          </div>
          {% endif %}

          {% if config.icon_settings.humidity is defined and weather_data.current.humidity is defined %}
          <div class="swiper-slide metric-item">
            {% include '@aero_weather/templates/icons/humidity.html.twig' with { icon_config: config.icon_settings.humidity } %}
            <div class="metric-label">{{ 'Humidity'|trans }}</div>
            <div class="metric-value">{{ weather_data.current.humidity|default('N/A') }}%</div>
          </div>
          {% endif %}

          {% if config.icon_settings.pressure is defined and weather_data.current.pressure_mb is defined %}
          <div class="swiper-slide metric-item">
            {% include '@aero_weather/templates/icons/pressure.html.twig' with { icon_config: config.icon_settings.pressure } %}
            <div class="metric-label">{{ 'Pressure'|trans }}</div>
            <div class="metric-value">{{ weather_data.current.pressure_mb|default('N/A') }} hPa</div>
          </div>
          {% endif %}

          {% if config.icon_settings.wind is defined and weather_data.current.gust_kph is defined and weather_data.current.wind_dir is defined %}
          <div class="swiper-slide metric-item">
            {% include '@aero_weather/templates/icons/wind.html.twig' with { icon_config: config.icon_settings.wind } %}
            <div class="metric-label">{{ 'Wind'|trans }}</div>
            <div class="metric-value">
              {{ weather_data.current.gust_kph|round|default('N/A') }} km/h {{ weather_data.current.wind_dir|default('') }}
            </div>
          </div>
          {% endif %}

        </div>
      </div>
    </div>

    {% set forecast_days = weather_data.forecast.forecastday %}
    {% if forecast_days is not empty %}
      <div class="forecast-list-container">
        <div class="swiper swiper-forecast">
          <div class="swiper-wrapper">
            {% for day in forecast_days %}
              {% if day.day.maxtemp_c > 10 %}
                <div class="swiper-slide forecast-item">
                  <div class="forecast-day">
                    {% if loop.first %}
                      {{ 'Today'|trans }}
                    {% elseif loop.index == 2 %}
                      {{ 'Tomorrow'|trans }}
                    {% else %}
                      {{ day.date|date("D") }}
                    {% endif %}
                  </div>

                  <div class="forecast-wrapper">
                    {% if day.day.condition.icon is not empty %}
                      <img 
                        src="https:{{ day.day.condition.icon|escape('html_attr') }}" 
                        alt="{{ day.day.condition.text|default('Weather')|escape('html_attr') }}" 
                        class="forecast-icon"
                      >
                    {% endif %}
                    <div class="forecast-temp">
                      <div class="temp-c">{{ day.day.maxtemp_c|round }}°</div>
                      <div class="temp-f hidden">{{ day.day.maxtemp_f|round }}°</div>
                    </div>
                  </div>
                </div>
              {% endif %}
            {% endfor %}
          </div>
        </div>
      </div>
    {% endif %}
  </div>
{% endif %}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc