# 03_MODULE_GUIDE.md

# Új modul készítése

## Cél

A CMS egyik legfontosabb alapelve, hogy minden modul ugyanarra az architektúrára épüljön.

Ha minden modul ugyanazt a felépítést követi, akkor:

- könnyebb fejleszteni
- könnyebb hibát keresni
- könnyebb új fejlesztőt betanítani
- minden modul ugyanúgy működik

A fejlesztés során mindig ezt a dokumentumot kell követni.

---

# Egy modul felépítése

Egy tipikus modul:

Gallery

↓

Admin

↓

Model

↓

Service

↓

Layout

↓

CSS

↓

JS

↓

Shortcode

↓

AssetService

↓

HTML

Minden modul ezt a struktúrát követi.

---

# Könyvtárszerkezet

Példa:

Gallery modul

```

app/

Controllers/

Admin/

Gallery.php

Models/

GalleryModel.php

GalleryPictureModel.php

Libraries/

Site/

GalleryService.php

Views/

admin/

gallery/

list.php

edit.php

themes/

classic/

gallery/

layout1.php

layout2.php

layout3.php

layout4.php

layout5.php

public/

themes/

classic/

css/

gallery.css

public/

themes/

classic/

js/

gallery.js

```

---

# 1. Migration

Minden modul adatbázis táblával kezdődik.

Feladata:

- táblák létrehozása
- indexek
- foreign key-ek

A Migration kizárólag az adatbázisszerkezetért felel.

---

# 2. Model

A Model kizárólag adatbázisműveleteket végez.

Példa:

```

GalleryModel

```

Feladata:

- getGallery()
- getByName()
- save()
- delete()

A Model:

✓ SELECT

✓ INSERT

✓ UPDATE

✓ DELETE

A Model nem készít HTML-t.

---

# 3. Admin Controller

Feladata:

- lista
- új
- szerkesztés
- törlés
- aktiválás

Példa:

Gallery::list()

Gallery::edit()

Gallery::save()

Gallery::delete()

A Controller nem készít HTML-t.

---

# 4. Admin View

Feladata:

űrlapok megjelenítése.

Például:

list.php

edit.php

A View nem tartalmaz üzleti logikát.

---

# 5. Service

A Service a modul szíve.

Például:

GalleryService

Feladata:

- adatbázis lekérése
- képek lekérése
- layout kiválasztása
- AssetService értesítése
- HTML renderelése

A Service nem ír SQL-t.

A Service nem ír CSS-t.

---

# 6. Layout

A Layout kizárólag a HTML megjelenítéséért felel.

Például:

layout1

↓

Grid

layout2

↓

Featured

layout3

↓

Carousel

Minden layout ugyanazokat az adatokat kapja.

Csak a HTML különbözik.

---

# 7. CSS

Minden modul saját CSS fájlt kap.

Példa:

gallery.css

video.css

documents.css

faq.css

popup.css

Soha ne kerüljön modul CSS a theme.css fájlba.

---

# 8. JavaScript

Minden modul saját JS fájlt kap.

Példa:

gallery.js

Feladata:

- lightbox
- animáció
- slider
- eseménykezelés

A JS kizárólag a modul működéséért felel.

---

# 9. AssetService

A modul nem ír közvetlenül:

<link>

vagy

<script>

tageket.

Helyette:

AssetService::addCss()

AssetService::addJs()

A site.php írja ki őket.

---

# 10. Shortcode

Ha a modul használható CKEditorban,

akkor shortcode tartozik hozzá.

Például:

{{gallery:munkaink}}

↓

GalleryService

↓

HTML

A Shortcode mindig a Service-t hívja meg.

---

# 11. Hook

Csak akkor használjuk,

ha a modul automatikusan szeretne megjelenni.

Példa:

Popup

↓

before_footer

Chat

↓

after_footer

Analytics

↓

head

Nem minden modul használ Hookot.

---

# 12. Jogosultság

Ha admin modul,

akkor menüponttal együtt jogosultság is készül.

Példa:

Gallery

↓

Menu

↓

Permission

↓

Role

---

# 13. Nyelvi fájl

Minden admin felirat nyelvi fájlba kerül.

Nem használunk fix szöveget.

Példa:

AdminGallery.Title

AdminGallery.New

AdminGallery.Delete

---

# 14. Dokumentáció

Új modul készítése után mindig frissíteni kell:

SHORTCODES.md

ROADMAP.md

MODULE_TEMPLATE.md

---

# Fejlesztési szabályok

✓ Egy Service egy feladatot végez.

✓ Egy Model egy táblát kezel.

✓ Egy Layout csak HTML.

✓ Egy JS csak a saját modulját kezeli.

✓ Egy CSS csak a saját modulját formázza.

✓ A ThemeService nem tartalmaz üzleti logikát.

✓ A Controller csak koordinál.

---

# Új modul checklist

□ Migration

□ Model

□ Admin Controller

□ Admin View

□ Public Service

□ Layout1

□ CSS

□ JS

□ AssetService

□ Shortcode

□ Hook (ha szükséges)

□ Menü

□ Jogosultság

□ Nyelvi fájl

□ Dokumentáció

Ha minden pont teljesül,

akkor a modul megfelel a CMS architektúrájának.