# Template-Joomla Unified scaffolding templates for all Joomla extension types — component, template, module, plugin, package, and library. ## Structure ``` .mokogitea/workflows/ ← CI/CD workflow suite (lint, validate, release) samples/ manifest/ ← Reference manifest XML for each extension type component_sample.xml template_sample.xml module_sample.xml plugin_sample.xml package_sample.xml library_sample.xml script/ ← Reference install/update script (script.php) templates script_component.php script_module.php script_plugin.php script_package.php source/ ← Your extension source lives here (CI scans this dir) ``` ## Usage 1. Create a new repo from this template (or clone manually). 2. Build your extension under `source/`. 3. Copy the matching manifest from `samples/manifest/` to `source/`, rename it, and replace the placeholder name, namespace, and version. 4. If your extension needs install/update logic, copy the matching `samples/script/` file and replace the `{REPONAME}`/`{PACKAGENAME}` placeholders. 5. Push — the workflows validate the manifest, source, SQL, language keys, and build. ## Samples `samples/` holds read-only reference material — do not build against it directly. - **`manifest/`** — a well-formed `` manifest for each of the six Joomla extension types, showing the expected structure, namespace declaration, media/SQL wiring, and update-server hookup. - **`script/`** — the standard `script.php` install/uninstall/update handler pattern shared across Moko extension repos. Copy, then replace `{REPONAME}` (UPPERCASE) and `{PACKAGENAME}` (e.g. `com_myextension`). ## CI/CD `.mokogitea/workflows/ci-joomla.yml` validates every push and PR against `source/`: | Check | What it verifies | |-------|------------------| | Manifest | Well-formed XML, required elements, version | | SQL | `#__` prefixes, `IF [NOT] EXISTS`, `ENGINE=InnoDB`, `utf8mb4`, install/uninstall pairing, version-named update files | | Language keys | Keys used in code are defined; orphan (unused) keys flagged | | PHP CodeSniffer | Joomla coding standard (falls back to PSR-12) | | Security | No direct superglobals, raw SQL in `setQuery()`, `eval()`, or missing `_JEXEC` guard | | updates.xml | Well-formed, required `` children, `` | | Assets | `joomla.asset.json` is valid and its URIs exist | | MVC naming | View/Controller/Model/Table classes follow suffix conventions | | Router | Components ship a Router implementing the router interface | | ACL | `access.xml` action keys are defined in language files | | Webservices | Webservices plugins register API routes | | ZIP dry-run | Every file/folder the manifest references actually exists | | JS/CSS | Syntax + balanced braces (ESLint/Stylelint if configured) | ## Standards This repo follows [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/MokoCLI/wiki/Home). Documentation lives in the [Template-Joomla Wiki](https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla/wiki). ## License GPL-3.0-or-later — Moko Consulting ## Template CI Notes Build/CI/release/version workflows are guarded to skip template repos (Template-*) and only run in repos created from them.