pkg_mokoog
com_mokoog -- Admin component (dashboard, tag CRUD, batch, CSV, ACL)
plg_system_mokoog -- System plugin (frontend meta tag injection, sitemap, AI)
plg_content_mokoog -- Content plugin (editor form fields, live preview)
plg_webservices_mokoog -- WebServices plugin (REST API routes)
Targets Joomla 6+ and PHP 8.2+. All extensions use the modern namespaced DI architecture: services/provider.php providers, SubscriberInterface event subscribers, and namespaced MVC. No deprecated Factory::getDbo/getUser/getSession/getLanguage, Joomla\CMS\Filesystem, or jexit() calls remain (forward-compatible with Joomla 7).
onBeforeCompileHead)option, view, id)#__mokoog_tags (language-aware)onMokoOGAfterRender for third-party extensions#__mokoog_tags keyed by language; JSON fields are validated as objects/arraysDashboardModel computes coverage stats; View/Dashboard renders a donut + breakdown + missing-articles listTagsController) and a single-record create/edit screen (TagController → View/Tag → tmpl/tag/edit.php)BatchController, ImportExportController (CSRF + ACL gated)onBeforeApiRouteJsonapiView) prevents information leakage| Class | Location | Purpose |
|---|---|---|
| MokoOG | plg_system_mokoog | Meta tag injection, sitemap trigger, AI AJAX endpoint |
| MokoOGContent | plg_content_mokoog | Editor form injection, OG data save/load |
| MokoOGWebServices | plg_webservices_mokoog | API route registration |
| DisplayController | com_mokoog | Default view dispatch (→ dashboard) |
| DashboardModel | com_mokoog | Coverage metrics queries |
| TagController / TagsController | com_mokoog | Single-record edit / list operations |
| BatchController | com_mokoog | Batch OG generation |
| ImportExportController | com_mokoog | CSV import/export (JSON/URL validated) |
| TagTable | com_mokoog | DB table with field validation |
| ImageHelper | plg_system_mokoog | Image resize, center-crop, per-platform crops, prune |
| JsonLdBuilder | plg_system_mokoog | All JSON-LD schema builders + toScriptTag() |
| SitemapBuilder | plg_system_mokoog | Access-filtered XML sitemap, atomic write |
Single table: #__mokoog_tags
(content_type, content_id, language)com_content, com_content.category, menu, com_mokoshopog_*, seo_title, meta_description, robots, canonical_url, og_video, event_data, recipe_data, custom_schema, language, published* wildcardloadArticle() / loadShopProduct() use static per-request caching (including negative lookups) — one query instead of several when the image finder, date extractor, and JSON-LD builder all need the same recordimages/mokoog/generated/ and pruned after 30 daysPrinted from wiki · Architecture