Version 47 (modified by 11 years ago) ( diff ) | ,
---|
How to add a new module?
- First, try Following the steps given Here
- Then, try making following changes.
Model
Create a file modules/s3db/<MODULE NAME>.py
Note
- You need to Add your module to
private/templates/<template>/config.py
- Also, Add It to
models/00_tables.py
Add tables to modules/s3db/<MODULE NAME>.py file, as-required for your resources.
To avoid namespace clashes, use the format: s3db.module_table
e.g. if building a Vehicle Management System, create s3db.vts_vehicle:
module = "org" resource = "organisation" tablename = "%s_%s" % (module, resource) table = s3db.define_table(tablename, Field("name"), *s3_meta_fields()) table.uuid.requires = IS_NOT_IN_DB(db, "%s.uuid" % table) table.name.requires = IS_NOT_EMPTY() table.name.comment = SPAN("*", _class="req")
Controller
Create a file: /controllers/<MODULE NAME>.py
Add CRUD functions for your tables:
module = request.controller def vehicle(): "RESTful CRUD controller" resource = request.function return s3_rest_controller(module, resource)
Manual method for if/when you need more control: DeveloperGuidelinesCreateReadUpdateDelete
Add the messages for your resources:
def vehicle(): "RESTful CRUD controller" resource = request.function s3.crud_strings[tablename] = Storage( title_create = T("Add Vehicle"), title_display = T("Vehicle Details"), title_list = T("List Vehicles"), title_update = T("Edit Vehicle"), title_search = T("Search Vehicles"), subtitle_create = T("Add New Vehicle"), subtitle_list = T("Vehicles"), label_list_button = T("List Vehicles"), label_create_button = T("Add Vehicle"), label_delete_button = T("Delete Vehicle"), msg_record_created = T("Vehicle added"), msg_record_modified = T("Vehicle updated"), msg_record_deleted = T("Vehicle deleted"), msg_list_empty = T("No Vehicles currently registered")) return s3_rest_controller(module, resource)
Add a menu:
# Options Menu (available in all Functions' Views) response.menu_options = [ [T("Home"), False, URL(f="index")], [T("Add Vehicle"), False, URL(f="vehicle", args="create")], [T("List Vehicles"), False, URL(f="vehicle")], [T("Search Vehicles"), False, URL(f="vehicle", args="search")] ]
Views
Add HTML templates for any custom functions: /views/<MODULE NAME>/<FUNCTION NAME>.html
NB Only index.html
is required to start with since the RESTful controller normally re-uses standard views.
If Custom Views are wanted they are detected automatically if files are found in /views/<MODULE NAME>/<RESOURCE>_<METHOD>.html