Creating a New Form Field: Difference between revisions

From IHRIS Wiki
No edit summary
Line 72: Line 72:
</source>
</source>


Here is some more background on the functions.
===ProcessDOMEdiable===
iHRIS uses version 1.2 of the [http://mootools.net/ mootools] javascript library.  Mootools has a handy [http://mootools.net/docs/core/Native/String#String:capitalize capitalization] function that we will incorporate into our form field so that on a "blur" event the input element will capitalize. 
==Making the form field available==
==Making the form field available==
==Javascript==
iHRIS uses version 1.2 of the [http://mootools.net/ mootools] javascript library.  Mootools has a handy [http://mootools.net/docs/core/Native/String#String:capitalize capitalization] function that we will incorporate into our form field so that on a "blur" the input element will capitalize.  There are two parts two this: changing the html template file, and linking in the mootools library when it is needed.
===Modifying the Template===
===Linking in Mootools===

Revision as of 09:29, 14 September 2009

This tutorial applies to version 4.0 of the iHRIS Suite.

In this tutorial, we will create new form field data type. This form field will be a one line string which is capitalized. The capitalization will be enforced on the server-side as well as the client-side via java-script. We will wrap all of this into a module, CapField so that it can be shared easily.

Creating the Module

In one of your module directories (e.g. your site's modules directory) do the following:

mkdir CapField
mkdir CapField/templates
mkdir CapField/lib
gedit CapField/CapField.xml

and add in the following lines: <source lang='xml'>

<?xml version="1.0"?>       

<!DOCTYPE I2CEConfiguration SYSTEM "I2CE_Configuration.dtd"> <I2CEConfiguration name='CapField'>

 <metadata>
   <displayName>Capitalized Field</displayName>   
   <category>System Component</category>
   <description>Provides an always capitalized field</description>
   <creator>Intrahealth Informatics</creator>
   <email>hris@capacityproject.org</email>
   <version>4.0.0</version> 
   <requirement name='i2ce'>
     <atleast version='4.0'/>
     <lessThan version='4.1'/>
   </requirement>
   <priority>200</priority>
   <path name='classes'>
     <value>./lib</value>
   </path>
   <path name='templates'>
     <value>./templates</value>
   </path>
 </metadata>
 <configurationGroup name='CapField' path='/'>
 </configuratioGroup>

<I2CEConfiguration> </source>

I2CE_FormField_STRING_CAP

We need to create a PHP class to handle the client-side validation of our capitalized field. The field we want has input which is a one line string, so we will subclass the existing one. We do this as follows:

cd CapField/lib
gedit I2CE_FormField_STRING_CAP.php

and add in the following: <source lang='php'>

public class I2CE_FormField_STRING_CAP extends I2CE_FormField_STRING_LINE  {
   /**
    *This is the method to create the input element for the capitalized input string
    * @param DOMNode $node  The node that we wish to add out input element to
    * @param I2CE_Tempalte $template.  The page template object that we are working in
    * @parma DOMNode $form_node  The node from the html template file that requested this form field be displayed
    */
   public function processDOMEditable($node,$template,$form_node) {
       $ele_name = $this->getHTMLName();  //this gets the name of the input element which is used for the GET and POST variables
       $template->addHeaderLink('mootools.js'); //makes sure that the mootools javascript library is avaiable to us
       $element = $template->createElement(  //creates the input element that we will add 
             "input", 
             array( 
                   "name" => $ele_name, 
                   "id" => $ele_name, 
                   "type" => "text", 
                   "onblur"=> "this.setValue(this.getValue().capitalize());"
                   "value" => $this->getDBValue() 
                   ) );
       $this->setElement($element);  //registers the input element that we created
       $node->appendChild( $element);  //add the input element node we just created to the node it needs to be under
   }

} </source>


Here is some more background on the functions.

ProcessDOMEdiable

iHRIS uses version 1.2 of the mootools javascript library. Mootools has a handy capitalization function that we will incorporate into our form field so that on a "blur" event the input element will capitalize.

Making the form field available