Page title: Besplatni alati | Medialive blog

> U ovoj kategoriji objavljujemo korisne besplatne alate, manje dodatke, primjere koda, praktične snippete i predloške koji mogu pomoći vlasnicima web stranica, administratorima i...

Source: https://www.medialive.hr/blog/besplatni-alati

Savjeti iz prakse

# Besplatni alati

U ovoj kategoriji objavljujemo korisne besplatne alate, manje dodatke, primjere koda, praktične snippete i predloške koji mogu pomoći vlasnicima web stranica, administratorima i svima koji žele bolje razumjeti ili unaprijediti svoj web. Materijali su zamišljeni kao pomoć, inspiracija ili početna točka za manje dorade, uz preporuku da se prije svake primjene napravi sigurnosna kopija web stranice.

Medialive vodič

**Praktični članci koji vode prema rješenju.**
Web stranice, web shopovi, održavanje i hosting — bez tehničkog žargona.

Izrada Održavanje Hosting

Nema pronađenih članaka za prikaz.

---

Ova Markdown verzija namijenjena je AI agentima i alatima za čitanje sadržaja.
<style id="ml-newsletter-popup-css">
.mlnp{position:fixed;z-index:99990;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#18171c}.mlnp *{box-sizing:border-box}.mlnp[hidden]{display:none!important}.mlnp__box{background:#fff;border:1px solid rgba(24,23,28,.10);box-shadow:0 24px 80px rgba(24,23,28,.18);border-radius:24px;overflow:hidden}.mlnp__inner{padding:26px}.mlnp__eyebrow{display:inline-flex;gap:8px;align-items:center;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#5A41BF;margin-bottom:10px}.mlnp__title{font-size:24px;line-height:1.15;margin:0 0 10px;font-weight:850}.mlnp__text{font-size:15px;line-height:1.55;color:#5e5d64;margin:0 0 18px}.mlnp form{display:grid;gap:10px}.mlnp label{font-size:13px;font-weight:750}.mlnp input{width:100%;border:1px solid #d9d9db;border-radius:12px;padding:12px 13px;font-size:15px;background:#fff}.mlnp button{border:0;border-radius:12px;padding:12px 16px;font-weight:850;cursor:pointer}.mlnp__submit{background:#5A41BF;color:#fff}.mlnp__close{position:absolute;top:12px;right:12px;width:34px;height:34px;border-radius:999px;background:rgba(24,23,28,.06);color:#18171c;font-size:20px;line-height:1}.mlnp__note{font-size:12px;color:#74727a;line-height:1.45;margin:10px 0 0}.mlnp__success{display:none;padding:18px;border-radius:16px;background:#f1f7f2;border:1px solid #cfe8d2;color:#244629;font-weight:700}.mlnp.is-success form,.mlnp.is-success .mlnp__text,.mlnp.is-success .mlnp__note{display:none}.mlnp.is-success .mlnp__success{display:block}.mlnp--popup{inset:0;display:grid;place-items:center;background:rgba(24,23,28,.28);backdrop-filter:blur(5px);padding:20px}.mlnp--popup .mlnp__box{width:min(520px,100%)}.mlnp--slide{right:22px;bottom:22px;width:min(420px,calc(100vw - 44px))}.mlnp--corner_left,.mlnp--corner_left_minimal{left:22px;bottom:22px;width:min(390px,calc(100vw - 44px))}.mlnp--corner_left .mlnp__box,.mlnp--corner_left_minimal .mlnp__box{border-radius:20px;box-shadow:0 18px 54px rgba(24,23,28,.16)}.mlnp--corner_left .mlnp__inner{padding:22px}.mlnp--corner_left .mlnp__title{font-size:21px}.mlnp--corner_left .mlnp__text{font-size:14px}.mlnp--corner_left_minimal .mlnp__inner{padding:18px}.mlnp--corner_left_minimal .mlnp__eyebrow{display:none}.mlnp--corner_left_minimal .mlnp__title{font-size:18px;margin-right:32px}.mlnp--corner_left_minimal .mlnp__text{font-size:13px;margin-bottom:12px}.mlnp--corner_left_minimal form{grid-template-columns:1fr auto;align-items:end}.mlnp--corner_left_minimal form label{display:none}.mlnp--corner_left_minimal input[name="name"]{display:none}.mlnp--corner_left_minimal input[type="email"]{padding:11px 12px}.mlnp--corner_left_minimal .mlnp__submit{padding:11px 14px}.mlnp--corner_left_minimal .mlnp__note{display:none}.mlnp--bar{left:18px;right:18px;bottom:18px}.mlnp--bar .mlnp__inner{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(260px,.7fr);gap:20px;align-items:center}.mlnp--bar .mlnp__title{font-size:20px}.mlnp--bar .mlnp__text{margin-bottom:0}@media(max-width:767px){.mlnp--hide-mobile{display:none!important}.mlnp--bar .mlnp__inner{grid-template-columns:1fr}.mlnp__inner{padding:22px}.mlnp__title{font-size:21px}.mlnp--slide,.mlnp--corner_left,.mlnp--corner_left_minimal{left:14px;right:14px;bottom:14px;width:calc(100vw - 28px)}.mlnp--corner_left_minimal form{grid-template-columns:1fr}}
</style>
<div id="ml-newsletter-popup" class="mlnp mlnp--corner_left" hidden data-delay="6000" data-frequency-days="14">
  <div class="mlnp__box" role="dialog" aria-modal="false" aria-labelledby="mlnp-title">
    <button class="mlnp__close" type="button" aria-label="Zatvori">×</button>
    <div class="mlnp__inner">
      <div>
        <div class="mlnp__eyebrow">Medialive newsletter</div>
        <h2 id="mlnp-title" class="mlnp__title">Želite korisne savjete za bolji web?</h2>
        <p class="mlnp__text">Povremeno šaljemo kratke i konkretne savjete o web stranicama, web shopovima, održavanju i online nastupu. Bez spama.</p>
      </div>
      <form method="post" action="/component/ml_newsletter">
        <label>Ime</label><input type="text" name="name" autocomplete="name" placeholder="Vaše ime">
        <label>Email</label><input type="email" name="email" required autocomplete="email" placeholder="vas@email.hr">
        <input type="hidden" name="task" value="subscribe"><input type="hidden" name="mlnp_popup" value="1"><input type="hidden" name="mlnp_ajax" value="1"><input type="hidden" name="source_url" value=""><div style="position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden" aria-hidden="true"><label>Website</label><input type="text" name="mln_hp" value="" tabindex="-1" autocomplete="off"></div><input type="hidden" name="mln_started_at" value="1783708139"><input type="hidden" name="ae22bfcffa65826ba9f9783ee95a896f" value="1">
        <button class="mlnp__submit" type="submit">Prijavi me</button>
      </form>
      <div class="mlnp__success">Hvala! Poslali smo vam email za potvrdu prijave.</div>
      <p class="mlnp__note">Prijavu potvrđujete klikom na link koji ćemo poslati na email. Odjava je moguća u svakom newsletteru.</p>
    </div>
  </div>
</div>
<script>
(function(){
  var el=document.getElementById('ml-newsletter-popup'); if(!el) return;
  var key='mlnp_closed_until_v1';
  var now=Date.now();
  var until=parseInt(localStorage.getItem(key)||'0',10);
  if(until && until>now) return;
  function closeBox(days){ var d=days || parseInt(el.getAttribute('data-frequency-days')||'14',10); localStorage.setItem(key, String(Date.now()+d*86400000)); el.setAttribute('hidden','hidden'); }
  var close=el.querySelector('.mlnp__close'); if(close) close.addEventListener('click', function(){ closeBox(); });
  el.addEventListener('click', function(e){ if(e.target===el && el.classList.contains('mlnp--popup')) closeBox(); });
  var delay=parseInt(el.getAttribute('data-delay')||'6000',10);
  setTimeout(function(){ el.removeAttribute('hidden'); }, delay);
  var form=el.querySelector('form');
  if(form){
    form.addEventListener('submit', function(e){
      e.preventDefault();
      var submit=form.querySelector('.mlnp__submit');
      var oldText=submit ? submit.textContent : '';
      var src=form.querySelector('input[name="source_url"]'); if(src) src.value=window.location.href;
      if(submit){ submit.disabled=true; submit.textContent='Šaljem...'; }
      var url=form.getAttribute('action') || window.location.href;
      url += (url.indexOf('?') === -1 ? '?' : '&') + 'format=json';
      fetch(url, { method:'POST', body:new FormData(form), credentials:'same-origin', headers:{'X-Requested-With':'XMLHttpRequest'} })
        .then(function(r){ return r.json(); })
        .then(function(data){
          if(data && data.ok){
            try{ localStorage.setItem(key, String(Date.now()+365*86400000)); }catch(err){}
            var success=el.querySelector('.mlnp__success');
            if(success && data.message){ success.textContent=data.message; }
            el.classList.add('is-success');
          } else {
            alert((data && data.message) ? data.message : 'Prijava nije uspjela. Pokušajte ponovno.');
          }
        })
        .catch(function(){ alert('Prijava nije uspjela. Pokušajte ponovno.'); })
        .finally(function(){ if(submit){ submit.disabled=false; submit.textContent=oldText; } });
    });
  }
})();
</script>