Gradski kalendar događanja mora istodobno služiti trima skupinama: posjetiteljima koji traže što se večeras događa, organizatorima koji žele objaviti svoj program i urednicima koji jamče da je objavljeno točno. Za Turističku zajednicu grada Dubrovnika i Grad Dubrovnik taj smo problem riješili razdvajanjem: javni prikaz ostaje na Joomla 5 stranici experiencedubrovnik.com, a podatke, odobravanje i portal za organizatore vodi zaseban sustav izrađen u Laravelu. U nastavku opisujemo zašto smo tako odlučili i što posjetitelj, organizator i urednik zapravo dobivaju.
Ukratko (TL;DR)
Dva sustava, jedna adresa. Posjetitelj vidi kalendar isključivo na stranici turističke zajednice, dok događaje, organizatore i odobravanje vodi zaseban Laravel sustav s vlastitom bazom i API-jem.
Organizatori sami prijavljuju događaje, a objava ide tek nakon odobrenja.
Kalendar je pripremljen za tražilice: strukturirani podaci schema.org/Event, hreflang veze između hrvatske i engleske inačice, naslovi s ključnim riječima, iCal pretplata i slike prilagođene za dijeljenje na društvenim mrežama.
Kalendar je javno dostupan na hrvatskom na experiencedubrovnik.com/kalendar-dogadanja i na engleskom na experiencedubrovnik.com/en/event-calendar. Sve što u ovom članku opisujemo kao vidljivo posjetitelju provjerili smo izravno na tim stranicama.
Koji problem rješava gradski kalendar događanja?
Grad poput Dubrovnika ima gust kulturni program: koncerte, izložbe, kazališne predstave, festivale, folklor, predavanja, sportska i gastronomska događanja, od povijesne jezgre do otoka i prigradskih naselja. Te informacije nastaju kod desetaka organizatora, od velikih ustanova do malih udruga. Bez zajedničkog mjesta posjetitelj ih skuplja s plakata, društvenih mreža i pojedinačnih stranica, a turistička zajednica ručno prepisuje tuđe najave.
Dobar kalendar zato mora riješiti nekoliko stvari odjednom:
- Prikupljanje: organizatori trebaju moći sami unijeti događaj, s datumom, mjestom, satom, slikom i informacijama o ulaznicama, na oba jezika.
- Kontrolu kvalitete: ništa ne smije izaći na službenu stranicu bez provjere, a provjera ne smije postati usko grlo.
- Pregled za posjetitelja: brzo pronaći što se događa danas, ovaj tjedan ili određenog datuma, po vrsti događaja.
- Vidljivost izvan stranice: da događaji budu razumljivi Googleu, da se lijepo prikazuju kad se podijele na WhatsAppu ili Facebooku i da se mogu dodati u osobni kalendar.
Zašto zaseban Laravel sustav uz Joomla stranicu?
Stranica turističke zajednice izrađena je u Joomli 5 i ondje urednici uređuju vijesti, stranice i izbornike. Prvotno su i događaji bili Joomla komponenta. Kako su zahtjevi rasli (portal za vanjske organizatore, uloge s različitim ovlastima, odobravanje, ponavljajući događaji, iCal izvoz), postalo je jasno da je razvoj tih funkcija unutar sustava za upravljanje sadržajem sporiji i krhkiji nego u okviru namijenjenom poslovnim aplikacijama.
Zato smo događaje izdvojili u zaseban sustav izrađen u Laravelu, s administracijom izrađenom u Filamentu. Taj sustav je vlasnik podataka: događaja, kategorija, organizatora i slika. Joomla stranica ostaje mjesto na kojem posjetitelj sve vidi, a njezini moduli samo prikazuju ono što je u sustavu za događaje odobreno. Više o tome kad Laravel ima smisla za ovakve primjene pišemo u članku Laravel za poslovne aplikacije.
Jedno pravilo bilo je nepromjenjivo od početka: posjetitelj nikada ne odlazi na „drugu stranicu". Kalendar, kartice na naslovnici i detalj pojedinog događaja prikazuju se unutar dizajna, izbornika i podnožja stranice turističke zajednice, na njezinim adresama. Zaseban sustav posjetitelj ne vidi.
| Pitanje | Sve unutar Joomle | Joomla + zaseban Laravel sustav |
|---|---|---|
| Javni prikaz | Joomla | ✓ Joomla, na istim adresama |
| Portal za vanjske organizatore | Ograničen okvirom komponente | ✓ Vlastita prijava, registracija i obrasci |
| Uloge i odobravanje | Joomla grupe korisnika | ✓ Uloge po mjeri |
| Nadogradnje stranice | Mogu utjecati na logiku događaja | ✓ Neovisne jedna o drugoj |
| Ponovna upotreba podataka | Teže | ✓ API i iCal izvoz za druge kanale |
Kako organizatori prijavljuju događaje?
Vanjski organizatori, poput ustanova u kulturi, udruga i galerija, koriste portal za organizatore na hrvatskom i engleskom jeziku. Postupak je jednostavan:

- Organizator se registrira i potvrđuje e-mail adresu poveznicom koju dobije poštom. Postoji i obnova zaboravljene lozinke.
- Nakon prijave ispunjava obrazac: naziv događaja na hrvatskom i engleskom, kategoriju, mjesto (također na oba jezika), datume, sat, kontakt, poveznicu na web stranicu, informacije o ulaznicama i sliku.
- Ako se događaj ponavlja, primjerice predstava koja se igra više večeri, organizator na kalendaru označi sve datume. Sustav za svaki datum sam stvori zaseban termin.
- Slike se pri učitavanju automatski smanjuju i optimiziraju, pa organizator ne mora ništa pripremati u programu za obradu fotografija.
- Prijavljeni događaj dobiva status „na čekanju" i ne pojavljuje se na stranici dok ga netko ne odobri. Urednici o novoj prijavi dobivaju obavijest e-poštom.
Organizator na svojoj nadzornoj ploči vidi vlastite događaje i može ih urediti, kopirati za sljedeću sezonu ili obrisati. Uređeni događaj ponovno ide na provjeru, tako da izmjena nakon odobrenja ne može tiho promijeniti ono što je na stranici. Organizatorima kojima urednici vjeruju može se uključiti „objava bez odobrenja", pa njihovi događaji izlaze odmah.
Što posjetitelj vidi na kalendaru?
Stranica kalendara spaja nekoliko načina pretraživanja, a sve se odvija bez ponovnog učitavanja stranice:

- Brzi filtri „Ovaj tjedan", „Sva događanja" i „Istaknuto".
- Izbornik kategorija, od koncerata, izložbi i festivala do opere, baleta, predavanja i predstavljanja knjiga.
- Raspon datuma („Datum od" i „Datum do") i pretraživanje po tekstu.
- Vremenska crta: vodoravna traka dana s oznakom ima li događaja. Klik na dan prikazuje samo taj dan, a traka se može pomicati i unatrag, kroz protekla događanja.
- Prekidač „Lista / Mjesec": uz popis kartica postoji i klasični mjesečni prikaz, s višednevnim događajima označenima na svaki dan trajanja.
- Kartice događaja sa slikom, datumom, satom, mjestom, kategorijom i informacijom o ulaznicama, uz gumbe za Google Calendar, .ics datoteku (Apple, Outlook) i dijeljenje na Facebooku, WhatsAppu ili kopiranjem poveznice.
- „Pretplati se": iCal feed nadolazećih događanja koji se jednom doda u Google, Apple ili Outlook kalendar i dalje se sam osvježava. Format slijedi standard iCalendar (RFC 5545).
Jedan sitan, ali važan detalj odnosi se na redoslijed. Događaji koji traju tjednima ili mjesecima, poput ljetnih festivala i izložbi, na vrhu bi popisa trajno zaklanjali ono što se događa večeras. Zato višednevni događaji idu na kraj popisa, osim na svoj prvi dan, kada su vijest. Slično pravilo vrijedi i za izmjenjivač događaja na naslovnici.
Kako je oblikovana stranica pojedinog događaja?
Stranica događaja izrađena je prema konceptu „plakat i ulaznica". Lijevo je plakat ili fotografija, a desno blok nalik ulaznici: velik broj dana ili raspon datuma, sat, mjesto s adresom, ulaznice i kategorija. Na mobitelu ulaznica ide prije slike, jer posjetitelj prvo traži kada i gdje.

Nekoliko odluka proizašlo je izravno iz stvarnih podataka, a ne iz pretpostavki:
- Slike su svih omjera, od uspravnih plakata do širokih fotografija. Zato se nikada ne režu: slika se prikazuje cijela, na zamućenoj podlozi napravljenoj od nje same.
- Mnogi događaji imaju kratak opis ili ga nemaju, pa stranica mora izgledati dovršeno i bez dugog teksta.
- Informacija o ulaznicama može biti tekst ili poveznica na prodaju. Ako je poveznica, prikazuje se kao gumb „Kupi ulaznice".
- Dizajn je namjerno suzdržan. Hijerarhiju nosi tipografija (veličina i debljina slova), a ne jake boje koje bi se tukle sa šarenim plakatima.
Na dnu su gumbi za dodavanje u kalendar i dijeljenje te izbor drugih nadolazećih događanja. Kad se događaj podijeli na WhatsAppu ili Facebooku, sustav sam priprema sliku u preporučenom formatu za pregled poveznice (1200 × 630 piksela), tako da se umjesto loga prikazuje plakat događaja.
Kako su riješeni dvojezičnost i SEO?
Svaki događaj ima hrvatska i engleska polja za naziv, mjesto, opis i informacije o ulaznicama. Ako engleski prijevod nedostaje, prikazuje se hrvatski tekst umjesto praznog naslova. Za nove unose naziv i mjesto na engleskom su obavezni, i u portalu i u administraciji.
Kalendar je najposjećeniji sadržaj ovakve stranice, pa smo mu posvetili posebnu pažnju u tehničkom SEO-u. Na živim stranicama danas se može provjeriti sljedeće:
- Strukturirani podaci schema.org/Event u JSON-LD obliku, i na stranici kalendara (za nadolazeće događaje) i na stranici svakog događaja: naziv, početak i kraj, mjesto s adresom, slika, status događaja i, kad je poznata, cijena. Upisuje se samo ono što stvarno postoji, ništa se ne nadopunjuje pretpostavkama. Googleove smjernice za strukturirane podatke o događajima opisuju kako takvi podaci mogu pomoći da se događaji prikažu u posebnim prikazima u rezultatima pretraživanja.
- hreflang veze između hrvatske i engleske inačice kalendara, uz x-default, kako Google preporučuje za lokalizirane inačice stranica.
- Naslovi s ključnim riječima na početku („Kalendar događanja u Dubrovniku", „Events in Dubrovnik") i pravi naslov
<h1>na stranici. - Canonical adrese i Open Graph oznake s pravom slikom događaja.
- Čiste adrese događaja oblika
/dogadanja/broj-naziv, s engleskom inačicom pod/en/.
Pri ovakvom poslu pomaže i oprez pri promjeni adresa. Kako se SEO čuva pri prelasku na novu Joomlu, opisali smo u članku Joomla migracija bez gubitka SEO-a.
Kako je riješena brzina?
Laravel sustav ima JSON API, ali Joomla moduli na istom poslužitelju ne dohvaćaju događaje HTTP zahtjevom prema tom API-ju. Čitaju ih izravno iz baze sustava za događaje, istim pravilima koja koristi API: prikazuje se samo ono što je objavljeno i odobreno. Razlog je praktičan. Poslužitelj koji šalje HTTP zahtjev samome sebi dobiva dodatnu točku kvara i čekanje, a pod velikim brojem istodobnih posjeta takvi zahtjevi mogu zauzeti sve PHP procese i usporiti cijelu stranicu. Izravnim čitanjem iz baze ta ovisnost nestaje. API i dalje služi ondje gdje ga koristi preglednik: za iCal feed, .ics datoteke i slike za dijeljenje.
Stranice se dodatno spremaju u predmemoriju web poslužitelja (nginx FastCGI cache). Klasična mana takvog rješenja je da urednik spremi izmjenu, a na stranici je i dalje vidi staru. Zato sustav za događaje, kad god se spremi ili obriše događaj, kategorija ili drugi podatak koji utječe na prikaz, sam isprazni tu predmemoriju. Izmjena se na stranici vidi odmah, a stranica je i dalje brza za sve ostale posjetitelje.
Cijela platforma, Joomla stranica i Laravel sustav, radi na zasebnom virtualnom poslužitelju na koji smo je preselili s razvojnog okruženja. Uz preseljenje su riješene i uobičajene zamke: putanje do slika koje su ostale iz razvojne kopije, nazivi datoteka s dijakritičkim znakovima i stare adrese prethodnog sustava koje i dalje traže automatski pretraživači. Takve adrese sad dobivaju odgovor „410 Gone", tako da ne opterećuju poslužitelj.
Što je bilo s događajima iz prethodnog sustava?
Prethodna stranica turističke zajednice radila je na vlastitom .NET sustavu s bazom Microsoft SQL Server. Događaji iz tog sustava preneseni su najprije u Joomlu, a zatim u novi sustav za događaje, zajedno s hrvatskim i engleskim inačicama i glavnim slikama. Tako posjetitelj i dalje može pregledati protekla događanja.
Stari podaci imali su svoje nasljeđe, koje je trebalo očistiti bez ručnog prepravljanja svakog unosa:
- Mjesto i sat bili su upisani kao slobodan tekst u kratkom opisu (npr. „Atrij palače Sponza 21.30 sati"), a prava polja bila su prazna. Skripta ih je razdvojila u zasebna polja, pa se na stranici pojavio redak s vremenom i mjestom. Ručno uneseni podaci pritom nisu dirani.
- Mnogi opisi počinjali su ponovljenim naslovom ili ručnim razdjelnicima od crtica. Stranica događaja takve ostatke prepoznaje i ne prikazuje ih, a sam tekst u bazi ostaje netaknut.
- Izvoz u kalendar (.ics) sada uzima sat iz polja za vrijeme, a ne iz tehničkih vremenskih oznaka iz uvoza, pa se u Outlook ili Apple kalendar upisuje točan sat.
Trebate sustav koji spaja web stranicu i poslovnu aplikaciju?
DromedarIT izrađuje i održava web stranice, portale i web aplikacije, od kalendara događanja i rezervacija do internih alata za odobravanje. Pogledajte naše radove ili usluge, a kad budete spremni, javite se.
Razgovarajmo o vašem projektu →Česta pitanja
Zašto događaji nisu ostali kao Joomla komponenta?
Portal za vanjske organizatore, uloge s različitim ovlastima i odobravanje događaja lakše je razvijati i održavati u Laravelu nego unutar sustava za upravljanje sadržajem. Joomla i dalje služi za javni prikaz, pa posjetitelj ne primjećuje razliku.
Može li bilo tko objaviti događaj na kalendaru?
Organizator se može registrirati i prijaviti događaj, ali on se na stranici pojavljuje tek nakon odobrenja. Samo organizatorima kojima urednici izričito vjeruju može se uključiti objava bez odobrenja.
Kako Google zna da je riječ o događaju?
Stranica kalendara i stranice pojedinih događaja sadrže strukturirane podatke schema.org/Event u JSON-LD obliku, s nazivom, datumom, mjestom i slikom. Prema Googleovoj dokumentaciji takvi podaci omogućuju prikaz događaja u posebnim prikazima rezultata pretraživanja, ali Google sam odlučuje hoće li ih prikazati.
Mogu li događaje pratiti u svom kalendaru na mobitelu?
Da. Svaki događaj ima gumbe za Google Calendar i .ics datoteku za Apple i Outlook, a gumb „Pretplati se" dodaje feed svih nadolazećih događanja koji se sam osvježava.
Može li se ovakav pristup primijeniti izvan turizma?
Može. Isti obrazac, gdje javna stranica prikazuje podatke koje vodi zasebna aplikacija s ulogama i odobravanjem, odgovara i katalozima proizvoda, natječajima, rezervacijama ili oglasima za posao.
Izvori
- Turistička zajednica grada Dubrovnika — „Kalendar događanja u Dubrovniku", 2026. Dohvaćeno 01.10.2026. experiencedubrovnik.com
- Turistička zajednica grada Dubrovnika — „Events in Dubrovnik" (engleska inačica), 2026. Dohvaćeno 01.10.2026. experiencedubrovnik.com
- Schema.org — „Event". Dohvaćeno 01.10.2026. schema.org
- Google Search Central — „Learn About Google Event Schema Markup". Dohvaćeno 01.10.2026. developers.google.com
- Google Search Central — „Localized Versions of your Pages". Dohvaćeno 01.10.2026. developers.google.com
- IETF — „RFC 5545: Internet Calendaring and Scheduling Core Object Specification (iCalendar)", 2009. Dohvaćeno 01.10.2026. datatracker.ietf.org
- Laravel — „Documentation". Dohvaćeno 01.10.2026. laravel.com
- Filament — „Documentation". Dohvaćeno 01.10.2026. filamentphp.com
- Joomla! — službena stranica projekta. Dohvaćeno 01.10.2026. joomla.org
- nginx — „Module ngx_http_fastcgi_module". Dohvaćeno 01.10.2026. nginx.org