| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | 
							
- Current for 6.x-2.0-alpha6
 
- # Creating a new OpenLayers Behavior from Scratch
 
- First, you'll need to create a module. Of course, skip through this step if
 
- there's already a module that exists to which this behavior will be added. But
 
- if not, create a file called `modulename.info` with the contents
 
-     core = "6.x"
 
-     dependencies[] = "openlayers"
 
-     name = "modulename"
 
-     package = "OpenLayers"
 
-     project = "modulename"
 
- In this case, you're creating a module just for this feature. So you'll need to
 
- implement a hook to notify OpenLayers that your module can do something for it.
 
- There's a hook called `hook_openlayers_behaviors` for this, and since your
 
- module is called modulename, its implementation should be
 
- `modulename_openlayers_behaviors`. A basic implementation would be
 
-     function modulename_openlayers_behaviors() {
 
-       return array(
 
-         'openlayers_behavior_mybehavior' => array(
 
-           'title' => t('My Behavior'),
 
-           'description' => t('Does something'),
 
-           'type' => 'layer',
 
-           'path' => drupal_get_path('module', 'modulename')
 
-             .'/includes/behaviors',
 
-           'file' => 'openlayers_behavior_mybehavior.inc',
 
-           'behavior' => array(
 
-             'class' => 'openlayers_behavior_mybehavior',
 
-             'parent' => 'openlayers_behavior',
 
-           ),
 
-         ),
 
-       );
 
-     }
 
- Note the essentials here: this tells the OpenLayers module that there is a file
 
- in `modules/modulename/includes/behaviors/` which implements a class called
 
- `openlayers_behavior_mybehavior`. It isn't strictly necessary to create an
 
- includes folder and a behaviors folder under it, but it's good practice so that
 
- your module doesn't become cluttered.
 
- So on to the PHP that this hook refers to: usually there's only a small amount
 
- of PHP written for each behavior. On the first level, the file simply must
 
- include a class that extends the class openlayers_behavior:
 
-     class openlayers_behavior_mybehavior extends openlayers_behavior {}
 
- There'll be a little bit for this one, but it's not very functional - only
 
- adding JavaScript code and declaring forms.
 
- Here's what you'll write for this behavior:
 
-     class openlayers_behavior_mybehavior extends openlayers_behavior {}
 
-       function options_init() {
 
-         return array(
 
-         );
 
-       }
 
-       function options_form($defaults) {
 
-         return array(
 
-           'filteredlayer' => array(
 
-             '#type' => 'select',
 
-             '#options' => $this->map['layers'],
 
-             '#description' => t('Select layer to filter'),
 
-             '#default_value' => isset($defaults['filteredlayer']) ?
 
-               $defaults['filteredlayer'] : NULL
 
-           ),
 
-         );
 
-       }
 
-       function render(&$map) {
 
-         drupal_add_js(drupal_get_path('module', 'mybehavior')
 
-           .'/includes/behaviors/js/openlayers_behavior_mybehavior.js');
 
-         return $this->options;
 
-       }
 
-     }
 
- As you can see, there's an options_form method which is called when the list of
 
- behaviors is generated for each map, and given a `$defaults` array if there
 
- have already been values saved. It isn't required to implement this method,
 
- although many behaviors will need it. And at this level - in the options_form,
 
- you have access to the map object with $this - so you can get layers, styles,
 
- and other parts of the map to play around with The `render(&$map)` function
 
- is indeed required, since it is called for every behavior.
 
- There's quite a bit of Javascript to write for this behavior:
 
-     /**
 
-      * Maptimeline Behavior
 
-      */
 
-     Drupal.behaviors.openlayers_behavior_mybehavior = function(context) {
 
-       var data = $(context).data('openlayers');
 
-       var slider_div = {};
 
-       if (data && data.map.behaviors['openlayers_behavior_mybehavior']) {
 
-         behavior = data.map.behaviors['openlayers_behavior_mybehavior'];
 
-         layer = data.openlayers.getLayersBy(
 
-           'drupalID',
 
-           behavior.filteredlayer)[0];
 
-           // Do things with this feature, etc.
 
-         });
 
-       }
 
-     }
 
- Note the essentials of this file: all of the functionality needed is contained
 
- in a single function, `Drupal.behaviors.openlayers_behavior_mybehavior`. The
 
- facts that the containing function is called `openlayers_behavior_mybehavior`
 
- and that it receives a single argument, `context`, are essential, but besides
 
- those restrictions, behaviors can contain any Javascript code whatsoever.
 
- Behaviors are called after all layers and styles are added to the map and the
 
- map is rendered.
 
- This code demonstrates a few core concepts of behavior-writing:
 
- * The OpenLayers [Map object](http://dev.openlayers.org/releases/OpenLayers-2.8/doc/apidocs/files/OpenLayers/Map-js.html)
 
-   is accessible via `$(context).data('openlayers').openlayers`
 
- * The [jQuery Data function](http://api.jquery.com/jQuery.data/) is used in the
 
-   OpenLayers module to simplify variable scope and avoid the possibility of
 
-   memory leaks.
 
 
  |