Moduly#
Doménové moduly systému. Každý má svou část ve všech sekcích —
app/UI/{Front,Api,Admin,Cron}/<Modul>/.
| Modul | Doména | Entit | Kapitola |
|---|---|---|---|
| System | uživatelé, platby, nastavení, číselníky, assety | 90 | — |
| Eshop | zboží, košík, objednávky, reklamace, feedy | 84 | E-shop |
| Bazaar | inzerce | 34 | Inzerce |
| Comcat | katalog firem | 33 | Katalog firem |
| Blog | články, novinky, akce, galerie, kniha návštěv | 29 | Blog |
| Invoicer | fakturace | 28 | Fakturace |
| Company | vlastní firma — prezentace, termíny, zakázky | 25 | Moje firma |
| Base | sdílené — komentáře, hodnocení, ankety, newsletter, reklamní plochy | 22 | — |
| Store | sklad | 13 | Sklad |
| Discussion | fórum | 13 | Diskuze |
Počty jsou Api entity — ls app/UI/Api/<Modul>/Models/Entities/*.php | wc -l. Sekci
Front nemá jediný modul: Invoicer, protože doklady se návštěvníkovi nezobrazují
samostatně, jen jako soubor ke stažení u objednávky.
Kudy začít#
| Chci | Začni tady |
|---|---|
| poprvé se v modulech zorientovat | Blog — je nejmenší z těch „normálních“ a je zároveň vzorem |
| napsat nový zdroj pro vyhledávání | ArticleDocumentSource.php z blogu |
| pochopit dynamická pole | Inzerce |
| pochopit peníze a stavy | E-shop → Sklad → Fakturace v tomhle pořadí |
Společné vzory#
Většina modulů sdílí tytéž vzory — když je poznáte v jednom, poznáte je všude:
| Vzor | Kde se objevuje | Kde je popsaný |
|---|---|---|
| dynamické parametry místo pevných sloupců | Bazaar, Comcat, Eshop | Inzerce |
| stromové kategorie (nested set) | Bazaar, Comcat, Discussion, Eshop, Blog, Company | Inzerce |
| denormalizované počítadlo + přepočet cronem | všude, kde je strom | Inzerce |
| tarify a platební položky | Bazaar, Comcat, Discussion | Diskuze |
zvýraznění časem (toped_until) |
Bazaar, Comcat, Discussion | Inzerce |
| stavový automat s příznaky akcí | Eshop (objednávka, reklamace) | E-shop |
| doklad jako otisk | Invoicer, Store | Fakturace |
| zdroj pro Elasticsearch | Blog, Bazaar, Comcat, Discussion, Eshop | Elasticsearch |
Comcat a Company jsou dva různé moduly, ne dvě části jednoho
Comcat je katalog cizích firem (kopie Bazaaru), Company je vlastní firma
provozovatele. Nesdílí ani jednu tabulku a nemají společný předek — jen si jsou
podobné jménem. Oprava v jednom se ve druhém neprojeví, takže hlášení „nefunguje to
u firem" je vždycky potřeba nejdřív rozřadit.
Comcat vznikl kopií Bazaaru
Jsou si velmi podobné. Řešíte-li něco v jednom, podívejte se, jestli to není
i v druhém — a jestli tam oprava nechybí. Zápisek o vzniku je
v docs/comcat-copy-from-bazaar.md.
Podobnost ale není totožnost
Comcat nemá price, sold ani sledující, a jeho generovaný sloupec active má
o jednu podmínku míň. Kopírovaný SQL dotaz nebo PHP getter proto může selhat —
přehled rozdílů je v Katalogu firem.
Sdílené prvky z Base#
Komentáře, hodnocení, ankety, newsletter a reklamní plochy jsou jedna implementace
pro všechny moduly (app/UI/Api/Base/).
Oprava sdílené komponenty zasáhne všechny moduly naráz
Změna v hodnocení se projeví u produktů, inzerátů, firem i příspěvků. Projděte všechny, ne jen ten, kvůli kterému opravujete — a počítejte s tím, že tři ze čtyř nikdo neotestuje, pokud si to neřeknete sami.
Kam sáhnout#
| Chci | Kde |
|---|---|
| sdílené entity | app/UI/Api/Base/Models/Entities/ |
| sdílené base entity modulů | app/Core/Base/Shared/<Modul>/Models/Entities/ |
| cron úlohy modulu | app/UI/Cron/<Modul>/Presenters/ |
| zdroje pro vyhledávání | app/UI/Api/<Modul>/Models/Search/ |
Navazující kapitoly: Pětivrstvý model · Struktura projektu · Elasticsearch · Naplánované úlohy