DeveloperGuidelines == How to add a new module? == Summary: * Copy an existing module, paste & edit. * Good modules to look at to start with are or & cr as these are simplest & standard. === Model === Add module to {{{models/01_modules.py}}} Activate it in {{{models/000_config.py}}} This makes it visible on the front page & the menu. Create a file {{{/models/.py}}} Add tables to this file, as-required for your resources.[[BR]] To avoid namespace clashes, use the format: {{{db.module_table}}} e.g. if building a Vehicle Management System, create db.veh_vehicle: {{{ module = 'veh' resource = 'vehicle' tablename = module + '_' + resource table = db.define_table(tablename, timestamp, uuidstamp, Field('name')) table.uuid.requires = IS_NOT_IN_DB(db, '%s.uuid' % table) table.name.requires = IS_NOT_EMPTY() table.name.comment = SPAN("*", _class="req") }}} Add the messages for your resources: {{{ s3.crud_strings[table] = 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')) }}} === Controller === Create a file: {{{/controllers/.py}}} Add the S3 framework functions: {{{ module = 'veh' # Options Menu (available in all Functions' Views) response.menu_options = [ [T("Home"), False, URL(r=request, f="index")], [T("Add Vehicle"), False, URL(r=request, f="vehicle", args="create")], [T("List Vehicles"), False, URL(r=request, f="vehicle")], [T("Search Vehicles"), False, URL(r=request, f="vehicle", args="search")] ] }}} Add CRUD functions for your tables: {{{ def vehicle(): "RESTful CRUD controller" return shn_rest_controller(module, "vehicle") }}} Manual method for if/when you need more control: DeveloperGuidelinesCreateReadUpdateDelete === Views === Add HTML templates for any custom functions: {{{/views//.html}}} NB Only {{{index.html}}} is required to start with since the RESTful controller normally re-uses standard views.[[BR]] If Custom Views are wanted they are detected automatically if files are found in {{{/views//_.html}}} DeveloperGuidelines