JoomGen is a code generator created by JetWorks to take out the pain of Joomla! component development. It takes a small set of from YAML or UML files and generates a complete Joomla! component ready to install and use.
The component's code follows the PEAR coding conventions and many Joomla! best practices.
This file will contain general data about your component. In this file you will see something like this:
name: Jobline
identifier: Jobline
component: com_jobline
version: 1.0.0
author:
name: JetWorks
email: contact@jetworks.com.br
url: http://jetworks.com.br
copyright: 2010 JetWorks. All rights reserved.
license: GNU General Public License
description: Component description
default_language: en-GB
database:
engine: MyISAM
default_charset: utf8
Most of these are self-explanatory. The fields you need to change in every project are:
- name: the project's name, like "My Project"
- identifier: a class name based on the project name, like "MyProject"
- component: the component's name, like "com_myproject"
- version
- author
This file will contain data about the models / tables used in your component. The syntax is the following:
model_name:
field_name: type
another_model_name:
not_required_field:
type: type
required: false
field_with_description:
type: type
description: This is my field
sql_table_without_model_name:
sql_only: true
Some rules about the MVC component generation:
- All tables get an integer primary key named "id" automatically;
- If "sql_only" is true then just the SQL table will be generated (without the MVC part); this is useful when two models have a "Many To Many" relationship table, for example;
- If a model has "published: bool", publication / unpublication logic is added to the admin interface;
- Models names should be in plural form.
An example models.yaml file:
posts:
title: string
content: rich_text
created_on: datetime
tags:
name: string
posts_tags:
post_id: int
tag_id: int
sql_only: true
This file will contain data about the frontend views for each model used in your component. The syntax is the following:
model_name:
details: field names separated by space
new: field names separated by space
list: field names separated by space
another_model_name:
details: field names separated by space
new: field names separated by space
list: field names separated by space
These field names are the fields from your models that you want to display in your views. You only need to add entries for the models you want to use in the frontend.
An example frontend.yaml file:
posts:
details: title content created_on
new: title content
list: title content created_on
- string: VARCHAR(255)
- text: TEXT
- int: INT(11)
- datetime: DATETIME
- date: DATE
- time: TIME
- double: DOUBLE
- decimal: DECIMAL
- rich_text: TEXT
- bool: INT(1)
- type: don't have a default value
- required: defaults to "true"
- description: defaults to a capitalized version of the field name. "contact_name" became "Contact Name"