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:

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.

PitanjeSve unutar JoomleJoomla + zaseban Laravel sustav
Javni prikazJoomla✓ Joomla, na istim adresama
Portal za vanjske organizatoreOgraničen okvirom komponente✓ Vlastita prijava, registracija i obrasci
Uloge i odobravanjeJoomla grupe korisnika✓ Uloge po mjeri
Nadogradnje straniceMogu utjecati na logiku događaja✓ Neovisne jedna o drugoj
Ponovna upotreba podatakaTež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:

Prijava u portal za organizatore događanja
Portal za organizatore: prijava i predlaganje događaja · Snimka zaslona: DromedarIT
  1. Organizator se registrira i potvrđuje e-mail adresu poveznicom koju dobije poštom. Postoji i obnova zaboravljene lozinke.
  2. 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.
  3. 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.
  4. Slike se pri učitavanju automatski smanjuju i optimiziraju, pa organizator ne mora ništa pripremati u programu za obradu fotografija.
  5. 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.

SAVJET Ako vaš portal ovisi o e-pošti (potvrda adrese, obavijesti urednicima), predvidite što se događa kad poštanski poslužitelj na trenutak odbije poruku. U ovom sustavu slanje se ponavlja, a poruka koja ni tada ne prođe sprema se i šalje kasnije, uz obavijest administratorima. Bez toga se organizator „izgubi" bez ikakve poruke o grešci.

Što posjetitelj vidi na kalendaru?

Stranica kalendara spaja nekoliko načina pretraživanja, a sve se odvija bez ponovnog učitavanja stranice:

Kalendar događanja u Dubrovniku s filtrima, vremenskom crtom i karticama događaja
Kalendar na experiencedubrovnik.com: filtri, pretraga, vremenska crta i pretplata na kalendar · Snimka zaslona: DromedarIT

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.

Stranica pojedinog događaja s datumom, vremenom, lokacijom i ulaznicom
Stranica događaja: datum, vrijeme, lokacija i ulaz na jednom mjestu · Snimka zaslona: DromedarIT

Nekoliko odluka proizašlo je izravno iz stvarnih podataka, a ne iz pretpostavki:

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:

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:

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

  1. Turistička zajednica grada Dubrovnika — „Kalendar događanja u Dubrovniku", 2026. Dohvaćeno 01.10.2026. experiencedubrovnik.com
  2. Turistička zajednica grada Dubrovnika — „Events in Dubrovnik" (engleska inačica), 2026. Dohvaćeno 01.10.2026. experiencedubrovnik.com
  3. Schema.org — „Event". Dohvaćeno 01.10.2026. schema.org
  4. Google Search Central — „Learn About Google Event Schema Markup". Dohvaćeno 01.10.2026. developers.google.com
  5. Google Search Central — „Localized Versions of your Pages". Dohvaćeno 01.10.2026. developers.google.com
  6. IETF — „RFC 5545: Internet Calendaring and Scheduling Core Object Specification (iCalendar)", 2009. Dohvaćeno 01.10.2026. datatracker.ietf.org
  7. Laravel — „Documentation". Dohvaćeno 01.10.2026. laravel.com
  8. Filament — „Documentation". Dohvaćeno 01.10.2026. filamentphp.com
  9. Joomla! — službena stranica projekta. Dohvaćeno 01.10.2026. joomla.org
  10. nginx — „Module ngx_http_fastcgi_module". Dohvaćeno 01.10.2026. nginx.org