Místo pro zvědavé medvědy

Search

Widget teplota | Elementor | 2025

Widget je malý interaktivní prvek nebo modul na webové stránce, který slouží k zobrazení specifických informací, nebo funkcí.

V našem případě se bude jednat o jednoduchý modul, do kterého zadáte jakékoli město na světě a pomocí vloženého API klíče se nám zobrazí teplota v daném místě.

Abychom měli ještě Widget o něco zajímavější, můžeme si zvolit mezí dvěma hodnotami měření:

Stupně Fahrenheita: Jednotka teploty, kde bod mrazu vody je 32 °F a bod varu 212 °F za normálního atmosférického tlaku, používaná především v USA. 

anebo

Stupně Celsia: Jednotka teploty, kde bod mrazu vody je 0 °C a bod varu 100 °C za normálního atmosférického tlaku, běžně používaná ve většině světa.

widget-teplota-ve-meste-elementor-bear-hugs-webdesign-html

Výsledný vzhled WIDGETu na generování teploty

Teplota podle Města

Element HTML v Elementor PRO

Pro vložení kódu použijeme v Elementoru jednoduše element „HTML“. Není to ovšem podmínkou, s kódem je možné pracovat i v běžném prostředí Wordpressu.

Vzhled zápisu HTML a přidaný JavaScript

Po otevření pracovního prostředí elementu HTML nás nejvíce zajímá záložka „Obsah“.

 

Do políčka „HTML kód“ je potřeba zapsat kód z dalšího odstavce, kde je popsáno i nastavení jednotlivých atributů.

 

Součástí tohoto kódu je i JavaScript. V tomto případě jsem vložil script rovnou za HTML. Funkce jsou opět z větší části popsány.

 
				
					<div class="weather-widget" id="temperature-widget-1">
    <h2>Teplota podle <strong>Města</strong></h2>
    <input type="text" id="city-input-1" placeholder="Zadejte město..." />
    <button id="get-weather-1">Zobrazit teplotu</button>
    
    <!-- Výstupní oblast pro zobrazení výsledků počasí -->
    <div id="weather-output-1" style="display:none;">
        <p id="city-name-1"></p> <!-- Město -->
        <p id="temperature-1"></p> <!-- Teplota -->
    </div>

    <!-- Volba jednotek pro teploty -->
    <div class="unit-selector">
        <label>
            <input type="radio" name="unit-1" value="metric" checked> °C (Celsia)
        </label>
        <label>
            <input type="radio" name="unit-1" value="imperial"> °F (Fahrenheit)
        </label>
    </div>
</div>

<script>
    const apiKey = 'MÍSTO PRO VÁŠ API KLÍČ'; // Váš API klíč pro WeatherAPI

    const getWeatherButton1 = document.getElementById("get-weather-1");
    const cityInput1 = document.getElementById("city-input-1");
    const temperatureOutput1 = document.getElementById("temperature-1");
    const cityNameOutput1 = document.getElementById("city-name-1");
    const weatherOutput1 = document.getElementById("weather-output-1");

    getWeatherButton1.addEventListener("click", function() {
        const city = cityInput1.value;
        const unit = document.querySelector('input[name="unit-1"]:checked').value;

        if (city) {
            fetchWeather1(city, unit);
        } else {
            alert("Zadejte město!");
        }
    });

    function fetchWeather1(city, unit) {
        const url = `https://api.weatherapi.com/v1/current.json?key=${apiKey}&q=${city}&aqi=no`;

        fetch(url)
            .then(response => response.json())
            .then(data => {
                const temperature = unit === 'metric' ? data.current.temp_c : data.current.temp_f;
                const cityName = data.location.name;

                // Nastavení textu pro město a teplotu
                cityNameOutput1.textContent = cityName;
                temperatureOutput1.textContent = `${temperature}°`;

                // Změna barvy podle teploty
                const tempColor = getTemperatureColor1(temperature, unit);
                temperatureOutput1.style.color = tempColor;

                // Zobrazení výsledků
                weatherOutput1.style.display = 'block';
            })
            .catch(error => {
                console.error("Chyba při získávání počasí:", error);
            });
    }

    // Funkce pro výpočet barvy podle teploty
    function getTemperatureColor1(temperature, unit) {
        let tempInCelsius = unit === 'metric' ? temperature : (temperature - 32) * (5 / 9); // Převeď Fahrenheit na Celsius

        // Určení barvy podle teploty
        if (tempInCelsius <= 0) {
            return '#3498db'; // Modrá pro chladné počasí
        } else if (tempInCelsius > 0 && tempInCelsius <= 10) {
            return '#5f9ea0'; // Světle modrá pro chladnější počasí
        } else if (tempInCelsius > 10 && tempInCelsius <= 20) {
            return '#f39c12'; // Žlutá pro mírně teplé počasí
        } else if (tempInCelsius > 20 && tempInCelsius <= 30) {
            return '#e67e22'; // Oranžová pro teplejší počasí
        } else {
            return '#e74c3c'; // Červená pro horké počasí
        }
    }
</script>

				
			
Zápis kódu je v tabulce.
 
  1. Použijte tlačítkocopyv pravém horním roku.
  2. Umístěte element „HTML“ na místo, kde si widget přejete umístit.
  3. Kód můžete vložit například zkratkou Ctrl+V.
  4. Unikátní označení pro každý Widget zvlášť v prvním řádku: id=“temperature-widget-1 – bude vysvětleno níže.
  5. Upravte si řádek č.2, pokud chcete jiný název Widgetu
  6. Na řádku č.24 pod apiKey si zadejte Váš API klíč. Získání tohoto klíče je popsáno níže.
  7. Na řádku č.68 je JavaScript pro funkci od stupnění barev pro zobrazovanou hodnotu od modré až po červenou.
  8. Všechny ostatní důležité atributy kódu máte popsány přímo v kódu. Tedy si je můžete v případě potřeby upravit.
  9. Dalším krokem je vygenerování API klíče a úprava CSS, která následuje.

 

Následně po vložení si prosím doplňkové informace vymažte.

getTemperatureColor(temperature, unit): Tato funkce převádí teplotu na Celsius (pokud je v °F) a pak vrací odpovídající barvu v závislosti na teplotní hodnotě:

  • Modrá: pro teploty pod 0°C (chladné počasí).
  • Světle modrá: pro teploty mezi 0°C a 10°C.
  • Žlutá: pro teploty mezi 10°C a 20°C.
  • Oranžová: pro teploty mezi 20°C a 30°C.
  • Červená: pro teploty nad 30°C.

Jak na získání API klíče?

V tomto případě jsem využil stránek www.weatherapi.com.
 
widget-teplota-ve-meste-elementor-bear-hugs-webdesign-html-weather-api
 
WeatherAPI poskytuje bezplatný plán s přístupem k aktuálnímu počasí, předpovědím a historickým datům. Bezplatný plán má určitý počet požadavků na den (např. 1 000 požadavků denně).

Jak to implementovat:

  • Zaregistrujte se na WeatherAPI, získáte API klíč.
  • Poté můžete použít tento API kód.

widget-teplota-ve-meste-elementor-bear-hugs-webdesign-html-weather-api

Další možnosti, resp. poskytovatelé API klíčů pro přístup k datům o počasí:

–>Weatherstack (bezplatný plán)

Weatherstack je další služba, která nabízí bezplatný plán s omezeným počtem požadavků (50 požadavků denně).

Jak to implementovat:

  • Zaregistrujte se na Weatherstack, získáte API klíč.
  • Poté můžete použít tento API kód.

–> Další alternativní dostupné možnosti

Pokud hledáte další varianty zdarma pro dostupné informace o počasí, doporučuji Vám i tyto služby:

  • MetaWeather (není vyžadován API klíč).
  • Open-Meteo (podobné možnosti pro počasí a předpovědi zdarma).

 

Při použití jiného poskytovatel API klíče si pak nezapomeňte upravit i nastavení odkazu při použití jiného serveru. nyní je odkazováno na Weather API.

Zápis stylovacího kódu CSS

Styling widgetu:

  • Navázání ID: id=“temperature-widget-1
  • Zaoblené rohy (border-radius: 10px).
  • Barva pozadí a textu (background-color, color).
  • Vycentrování na stránce pomocí margin: 20px auto.
  • Přizpůsobení rozměrů widgetu (width: 300px, height: 350px).
  • Použití písma Arial nebo sans-serif.
  • Středový text (text-align: center).
  • Změna barvy pozadí a textu při najetí myší (:hover).
  • Názvy měst zvýrazněny barvou (#1680F2).
  • Skryté pole (display: none) do načtení počasí.

 

Všechny atributy a mnoho dalšího lze upravit a nastavit pomocí tohoto CSS.

V závorkách jsou dále pak popsány jednotlivé funkce a možnosti. Je dále pak jen na Vás, jak si vzhled upravíte.

				
					/* Stylování pro "temperature-widget-1" */
#temperature-widget-1 {
    background-color: #2c3e50; /* Barva pozadí widgetu */
    color: white; /* Barva textu */
    border-radius: 10px; /* Zaoblené rohy */
    padding: 25px;
    width: 300px;
    height: 350px;
    margin: 20px auto; /* Vycentrování widgetu na stránce */
    font-family: Arial, sans-serif; /* Písmo pro text */
}

/* Nadpis widgetu */
#temperature-widget-1 h2 {
    font-size: 1.4rem;
    text-align: center;
    margin-bottom: 25px;
    color: #ffffff; /* Barva textu nadpisu */
}

/* Vstupní pole pro město */
#temperature-widget-1 #city-input-1 {
    width: 100%;
    padding: 10px;
    font-size: 1rem;
    margin-bottom: 10px;
    border-radius: 5px;
    border: 1px solid #ccc; /* Barva rámečku */
    background-color: #34495e; /* Barva pozadí pro vstupní pole */
    color: #ecf0f1; /* Barva textu ve vstupním poli */
    box-sizing: border-box;
}

/* Tlačítko pro zobrazení počasí */
#temperature-widget-1 #get-weather-1 {
    width: 100%;
    padding: 10px;
    background-color: #3498db; /* Barva pozadí tlačítka */
    color: white; /* Barva textu tlačítka */
    font-size: 1rem;
    border: none;
    border-radius: 5px;
    cursor: pointer;
}

/* Styl pro tlačítko při najetí myší */
#temperature-widget-1 #get-weather-1:hover {
    background-color: #2980b9; /* Barva tlačítka při hoveru */
    color: #333333; /* Barva textu tlačítka při hoveru */
}

/* Výstupní oblasti pro město a teplotu */
#temperature-widget-1 #weather-output-1 {
    margin-top: 15px;
    text-align: center;
    display: none; /* Výstup skrytý, dokud není počasí načteno */
}

/* Zobrazení názvu města */
#temperature-widget-1 #city-name-1 {
    font-size: 1.5rem;
    font-weight: bold;
    margin: 10px 0;
    color: #1680F2; /* Barva textu názvu města */
}

/* Zobrazení teploty */
#temperature-widget-1 #temperature-1 {
    font-size: 1.2rem;
    font-weight: normal;
    margin-top: 5px;
    color: #ecf0f1; /* Barva textu teploty */
}

				
			

Další možnosti WIDGETů

Načítání...

Ikona počasí

---

Teplota: --°C

Vítr: -- km/h

V případě, že si budete chtít na jedné stránce vložit více druhů Widgetů se stejným API klíčem, je potřeba tyto elementy rozpoznat/rozlišit pro načítání. Protože v případě, že byste chtěli načítat data ze stejného API klíče, je velmi pravděpodobné, že Vám při načítání vznikne jeden z následujících konfliktů.

Možné problémy při více widgetech na stránce:

  1. Konfliktní JavaScriptové funkce:
    • Pokud mají widgety podobné funkce nebo stejné ID elementů, může jeden widget přepsat obsah nebo strukturu druhého.
    • Například, pokud oba widgety používají #temperature, pouze jeden z nich může správně fungovat.
  2. Příliš mnoho API volání:
    • WeatherAPI má limit pro volání API (například 1000 volání denně v bezplatném tarifu). Pokud oba widgety opakovaně volají API, může dojít k dosažení tohoto limitu.
  3. Asynchronní načítání:
    • Pokud oba widgety používají async/await, mohou se volání přepisovat nebo kolidovat, což způsobí nesprávné vykreslení dat.

 

Řešení:

  1. Unikátní ID pro každý widget

První widget:

				
					<div id="temperature-widget-1">Teplota: --°C</div>

				
			

Druhý widget:

				
					<div id="temperature-widget-2">Teplota: --°C</div>

				
			

V JavaScriptu pak upravte kód, aby se každý widget odkazoval na svůj vlastní ID:

				
					document.getElementById('temperature-widget-1').textContent = `Teplota: ${data.current.temp_c}°C`;

				
			
  1. Sdílení API dat mezi widgety

Namísto toho, aby každý widget volal API samostatně, můžete provést jedno volání API a data sdílet mezi widgety. Tuto možnost zde ale popisovat dnes nebudeme. Já zvolil pro mě jednodušší způsob podle řešení č. 1.

Vzhled zápisu HTML a přidaný JavaScript pro "ID 2"

Zápis kódu v tabulce.
 
  1. Použijte tlačítkocopyv pravém horním roku.
  2. Umístěte element „HTML“ na místo, kde si widget přejete umístit.
  3. Kód můžete vložit například zkratkou Ctrl+V.
  4. Unikátní označení pro další Widget s ID 2 v prvním řádku: id=“temperature-widget-2. (Číslovkou 2 pak dále označujeme všechny funkce, které souvisí s ID -2). 
  5. Upravte si řádek č.2, pokud chcete jiný název Widgetu
  6. Na řádku č.14 pod apiKey si zadejte Váš API klíč. Když jsme zvolili formu ID 1, ID 2 apod., tak použijeme stejný API klíč.
  7. Na řádku č.15 const CITY2 si zadejte lokaci, kterou chcete ve Widgetu prezentovat, v našem případě je to Praha.
  8. Všechny ostatní důležité atributy kódu máte popsány přímo v kódu. Tedy si je můžete v případě potřeby upravit.

 

Následně po vložení si prosím doplňkové informace vymažte.

				
					<div class="weather-widget" id="temperature-widget-2">
    <h2 id="location-2">Načítání...</h2>
    <div id="weather-info-2">
        <div id="weather-icon-2">
            <img decoding="async" id="icon-2" src="" alt="Ikona počasí" />
        </div>
        <p id="description-2">---</p>
        <p id="temperature-2">Teplota: --°C</p>
        <p id="wind-2">Vítr: -- km/h</p>
    </div>
</div>

<script>
    const apiKey2 = 'ZDE VLOŽTE VÁŠ API KLÍČ'; // Váš API klíč
    const CITY2 = 'Praha'; // Město pro tento widget

    async function fetchWeather2() {
        const apiUrl = `https://api.weatherapi.com/v1/current.json?key=${apiKey2}&q=${encodeURIComponent(CITY2)}&lang=cs`;

        try {
            const response = await fetch(apiUrl);
            if (!response.ok) throw new Error(`HTTP chyba: ${response.status}`);

            const data = await response.json();
            console.log('API Response (Widget 2):', data);

            // Aktualizace názvu místa
            document.getElementById('location-2').textContent = `${data.location.name}, ${data.location.country}`;

            // Aktualizace teploty
            document.getElementById('temperature-2').textContent = `Teplota: ${Math.round(data.current.temp_c)}°C`;

            // Aktualizace větru
            document.getElementById('wind-2').textContent = `Vítr: ${Math.round(data.current.wind_kph)} km/h`;

            // Aktualizace popisu počasí
            document.getElementById('description-2').textContent = data.current.condition.text;

            // Aktualizace ikony počasí
            document.getElementById('icon-2').src = `https:${data.current.condition.icon}`;
            document.getElementById('icon-2').alt = data.current.condition.text;
        } catch (error) {
            console.error('Chyba při načítání dat (Widget 2):', error);
            document.getElementById('location-2').textContent = 'Nepodařilo se načíst počasí.';
        }
    }

    document.addEventListener('DOMContentLoaded', fetchWeather2);
</script>

				
			

Zápis stylovacího kódu CSS pro "ID 2"

				
					/* Stylování pro "temperature-widget-2" */
#temperature-widget-2 {
    background-color: #34495e; /* Tmavě šedé pozadí */
    color: white; /* Bílé písmo */
    border-radius: 10px; /* Zaoblené rohy */
    padding: 20px;
    width: 300px; /* Šířka widgetu */
    margin: 20px auto; /* Vycentrování widgetu */
    font-family: Arial, sans-serif; /* Základní písmo */
    text-align: center;
    box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); /* Jemný stín */
}

/* Nadpis widgetu */
#temperature-widget-2 h2 {
    font-size: 1.5rem;
    margin-bottom: 20px;
    color: #ffffff; /* Barva textu nadpisu */
}

/* Informace o počasí */
#weather-info-2 {
    display: flex;
    flex-direction: column;
    align-items: center;
}

/* Ikona počasí */
#weather-icon-2 img {
    width: 80px; /* Velikost ikony */
    height: 80px;
    margin-bottom: 15px;
}

/* Popis počasí */
#description-2 {
    font-size: 1.2rem;
    margin: 5px 0;
    color: #ecf0f1; /* Barva textu popisu počasí */
}

/* Teplota */
#temperature-2 {
    font-size: 1.2rem;
    font-weight: bold;
    margin: 5px 0;
    color: #f39c12; /* Výchozí barva textu teploty */
}

/* Vítr */
#wind-2 {
    font-size: 1.2rem;
    margin: 5px 0;
    color: #3498db; /* Barva textu větru */
}

				
			

Styling widgetu:

  • Navázání ID: id=“temperature-widget-2
  • Zaoblené rohy (border-radius: 10px).
  • Barva pozadí a textu (background-color, color).
  • Vycentrování na stránce pomocí margin: 20px auto.
  • Přizpůsobení rozměrů widgetu (width: 300px, height: 350px).
  • Použití písma Arial nebo sans-serif.
  • Středový text (text-align: center).
  • Změna barvy pozadí a textu při najetí myší (:hover).
  • Názvy měst zvýrazněny barvou (#1680F2).
  • Skryté pole (display: none) do načtení počasí.

 

Všechny atributy a mnoho dalšího lze upravit a nastavit pomocí tohoto CSS.

V závorkách jsou dále pak popsány jednotlivé funkce a možnosti. Opět je pak jen na Vás, jak si vzhled upravíte.

 

Vložení Widgetů jako informace o počasí může být zajímavým doplňkem, který může zatraktivnit Vaše stránky.

Návštěvníkovi pak podat i zajímavou a relevantní informaci.

A opět lehkou úpravou kódu si můžete celý Widget upravit podle Vašich představ, tak, aby vše korespondovalo s Vaší prezentací.

Tak ať se Vám daří při tvorbě webu!