diff --git a/doc/tutorial.md b/doc/tutorial.md index 6e04431..eca9d69 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -15,7 +15,98 @@ Getting Started Building your own module ------------------------ +------------------------ +A [Module](/doc/concepts.md#modules) as we already describe it, enable us to add functionallity based on your needs. + +Here we will describe the basics steps to write your own modules. + + * The first thing to do is inherit form the class [CMS_MODULE] () and redefine the register_hooks feature. + * Implement (via inheritance) the needed [Hooks] (/doc/concepts.md#hooks). + +``` + class + MY_NEW_MODULE + + inherit + + CMS_MODULE + redefine + register_hooks + end + + CMS_HOOK_BLOCK + + CMS_HOOK_MENU_SYSTEM_ALTER + + + create + make + +feature {NONE} -- Initialization + + make + -- Create current module + do + name := "new module" + version := "1.0" + description := "Eiffel new module" + package := "example" + end + +feature -- Access: router + + router (a_api: CMS_API): WSF_ROUTER + -- Node router. + do + create Result.make (1) + Result.handle_with_request_methods ("/demo", create {WSF_URI_AGENT_HANDLER}.make (agent handle_demo (a_api, ?, ?)), Result.methods_head_get) + end + +feature -- Hooks + + register_hooks (a_response: CMS_RESPONSE) + do + a_response.subscribe_to_menu_system_alter_hook (Current) + a_response.subscribe_to_block_hook (Current) + end + + block_list: ITERABLE [like {CMS_BLOCK}.name] + do + -- List of block names, managed by current object. + end + + get_block_view (a_block_id: READABLE_STRING_8; a_response: CMS_RESPONSE) + do + -- Get block object identified by `a_block_id' and associate with `a_response'. + end + + menu_system_alter (a_menu_system: CMS_MENU_SYSTEM; a_response: CMS_RESPONSE) + local + lnk: CMS_LOCAL_LINK + do + create lnk.make ("Demo", "/demo/") + a_menu_system.primary_menu.extend (lnk) + end + +feature -- Handler + + handle_demo (a_api: CMS_API; req: WSF_REQUEST; res: WSF_RESPONSE;) + local + r: NOT_IMPLEMENTED_ERROR_CMS_RESPONSE + do + create r.make (req, res, a_api) + r.set_main_content ("NODE module does not yet implement %"" + req.path_info + "%" ...") + r.add_error_message ("NODE Module: not yet implemented") + r.execute + end + +end + +``` + + + + Lifecycle