| 265 | The simplest Dolphin module is completed. Now you can use this to start developing you first Dolphin module, or use it as a framework for your own different modules. Almost every extension can be started from such a structure. Make sure that you take a look at the bloggie/install/config.php file. This file must be heavily changed for your own module, and this file has comments on each line to help you in changing it. |
| 266 | |
| 267 | |
| 268 | == 3. Adding admin panel. == |
| 269 | |
| 270 | We want to improve our mod and add a format for the date and allow disabling user time. We definitely need some admin settings for this purpose. |
| 271 | |
| 272 | Our admin panel will have the following parts: |
| 273 | |
| 274 | * admin page creation |
| 275 | * adding settings to module install and uninstall |
| 276 | * print setting form on newly created admin pages |
| 277 | * a link in the admin modules section to the module setting page |
| 278 | |
| 279 | == 3.1. Admin page creation. == |
| 280 | |
| 281 | Add the following code to the '''bloggie/classes/MeBlggModule.php''' file as a class method: |
| 282 | |
| 283 | {{{ |
| 284 | function actionAdministration () { |
| 285 | |
| 286 | if (!$GLOBALS['logged']['admin']) { |
| 287 | $this->_oTemplate->displayAccessDenied (); |
| 288 | return; |
| 289 | } |
| 290 | |
| 291 | $this->_oTemplate->pageStart(); |
| 292 | |
| 293 | echo DesignBoxAdmin (_t('_me_blgg'), 'It works!'); |
| 294 | |
| 295 | $this->_oTemplate->pageCodeAdmin (_t('_me_blgg')); |
| 296 | } |
| 297 | }}} |
| 298 | |
| 299 | The '''pageCodeAdmin''' function is similar to the '''pageCode''' function, but it displays the admin page instead of the user page. Also, this function accepts only one parameter - page title. |
| 300 | |
| 301 | Also the difference in the code is that we check if admin only can access this page. The '''$GLOBALS['logged']['admin']''' variable is set to true if admin is logged in. Additionally, you can check if regular members are logged in by using the '''$GLOBALS['logged']['member']''' variable. If none of these values are true, then a guest is accessing your page. The '''displayAccessDenied''' function displays a page with an "access denied" message - in this case, we don't need to care much about that, and we can just return from the function or even exit. The '''$GLOBALS['logged']''' does not always exist, and is initialized in the '''check_logged''' function. In our case this function is called in the '''bloggie/request.php''' file. |
| 302 | |
| 303 | Another new function here is '''DesignBoxAdmin'''. It wraps our content in a nice box. The box title is the first parameter and box content is the second one. There is an optional 3rd parameter where you can define the box menu. Also, there is an analog of this function in the user side called '''DesignBoxContent'''. You can examine existing Dolphin code for a lot of examples. |
| 304 | |
| 305 | To test the page, you need to login to the admin panel and open the '''http://www.your-site.com/your-path/m/bloggie/administration''' URL. |
| 306 | |
| 307 | There is no artificial code, and hopefully you have made everything properly and the admin page is displayed with the "It works!" phrase. If there is a problem, then review all the steps once again and try to find where there is a mistake. |
| 308 | |
| 309 | |
| 310 | == 3.2. Adding module settings. == |
| 311 | |
| 312 | At this stage we need to modify the '''install.sql''' and '''uninstall.sql''' files for the first time. We need to change the installation config file and indicate that these files must be processed. To do this we need to change the following section in the '''bloggie/install/config.php''' file: |
| 313 | |
| 314 | |
| 315 | {{{ |
| 316 | 'install' => array( |
| 317 | 'update_languages' => 1, |
| 318 | ), |
| 319 | 'uninstall' => array ( |
| 320 | 'update_languages' => 1, |
| 321 | ), |
| 322 | }}} |
| 323 | |
| 324 | to the following: |
| 325 | |
| 326 | {{{ |
| 327 | 'install' => array( |
| 328 | 'update_languages' => 1, |
| 329 | 'execute_sql' => 1, |
| 330 | ), |
| 331 | 'uninstall' => array ( |
| 332 | 'update_languages' => 1, |
| 333 | 'execute_sql' => 1, |
| 334 | ), |
| 335 | }}} |
| 336 | |
| 337 | It will execute '''install.sql''' and '''uninstall.sql''' files automatically upon modules install/uninstall. |
| 338 | |
| 339 | Then, place the following code into '''install.sql''': |
| 340 | |
| 341 | |
| 342 | {{{ |
| 343 | SET @iMaxOrder = (SELECT `menu_order` + 1 FROM `sys_options_cats` ORDER BY `menu_order` DESC LIMIT 1); |
| 344 | INSERT INTO `sys_options_cats` (`name`, `menu_order`) VALUES ('My Bloggie', @iMaxOrder); |
| 345 | SET @iCategId = (SELECT LAST_INSERT_ID()); |
| 346 | INSERT INTO `sys_options` (`Name`, `VALUE`, `kateg`, `desc`, `Type`, `check`, `err_text`, `order_in_kateg`, `AvailableValues`) VALUES |
| 347 | ('me_blgg_date_format', 'Y-m-d H:i', @iCategId, 'Format for server date/time', 'digit', '', '', '1', ''), |
| 348 | ('me_blgg_enable_js_date', 'on', @iCategId, 'Show user time', 'checkbox', '', '', '2', ''); |
| 349 | }}} |
| 350 | |
| 351 | and the following into '''uninstall.sql''': |
| 352 | |
| 353 | {{{ |
| 354 | -- settings |
| 355 | SET @iCategId = (SELECT `ID` FROM `sys_options_cats` WHERE `name` = 'My Bloggie' LIMIT 1); |
| 356 | DELETE FROM `sys_options` WHERE `kateg` = @iCategId; |
| 357 | DELETE FROM `sys_options_cats` WHERE `ID` = @iCategId; |
| 358 | }}} |
| 359 | |
| 360 | The most important thing is that all setting options are in the '''sys_options''' database table. It is better to assign every setting option some category which is stored in the '''sys_options_cats''' database table, because it makes it easier to delete created categories in uninstall and display them. Also, it is good practice to make a prefix for all of your setting names to avoid conflicts with other mods. |
| 361 | |
| 362 | Now, we need to use newly created settings, so we change the '''actionHome''' function in the following way: |
| 363 | |
| 364 | {{{ |
| 365 | function actionHome () { |
| 366 | $this->_oTemplate->pageStart(); |
| 367 | |
| 368 | $sDateFormat = getParam ('me_blgg_date_format'); |
| 369 | $isShowUserTime = getParam('me_blgg_enable_js_date') ? true : false; |
| 370 | $aVars = array ( |
| 371 | 'server_time' => date($sDateFormat), |
| 372 | 'bx_if:show_user_time' => array( |
| 373 | 'condition' => $isShowUserTime, |
| 374 | 'content' => array(), |
| 375 | ), |
| 376 | ); |
| 377 | echo $this->_oTemplate->parseHtmlByName('main', $aVars); |
| 378 | $this->_oTemplate->pageCode(_t('_me_blgg'), true); |
| 379 | } |
| 380 | }}} |
| 381 | |
| 382 | and we change the template as shown below: |
| 383 | |
| 384 | {{{ |
| 385 | <div style="text-align:center;"> |
| 386 | <bx_text:_me_blgg_server_time /> __server_time__ |
| 387 | <bx_if:show_user_time> |
| 388 | <br /> |
| 389 | <bx_text:_me_blgg_user_time /> |
| 390 | <script type="text/javascript"> |
| 391 | document.write(new Date()); |
| 392 | </script> |
| 393 | </bx_if:show_user_time> |
| 394 | </div> |
| 395 | }}} |
| 396 | |
| 397 | Lets describe a few new things: |
| 398 | |
| 399 | * the '''getParam''' function is used to get a setting option with a specified name. Please note that in the case of a checkbox, it will return '''on''' as the true value or an empty string as a false value. |
| 400 | * '''bx_if''' template construction allows adding conditional processing to the template. The condition is in the '''condition''' field, and any variables which you need to use inside bx_if clauses in the template should be placed in the content subarray. In our case, there is no such variable and this array is empty. |
| 401 | |
| 402 | Almost everything is done, and it is time to test it now. Reinstall the module, since we have changed the installation config and installation files, and refresh the '''http://www.your-site.com/your-path/m/bloggie/home''' page. If everything is done right, the result should be as follows: |
| 403 | |
| 404 | {{{ |
| 405 | Server time: 2010-01-22 17:45 |
| 406 | User time: Fri Jan 22 2010 17:45:41 GMT+1100 |
| 407 | }}} |
| 408 | |
| 409 | Now, everything works except the fact that we cannot change any settings options we just created. So, we now proceed to creating a setting options form. |
| 410 | |
| 411 | |
| 412 | == 3.3. Changing the settings form. == |
| 413 | |