User Tools

Site Tools


dr:api_sequences

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
dr:api_sequences [2005/10/16 19:04] – (old revision restored) 127.0.0.1dr:api_sequences [2020/11/23 17:23] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== API Sequences: 5 steps to creating a node ======+====== API Sequences: node life cycle=====
  
 (in Drupal 4.6.x) (in Drupal 4.6.x)
  
 +... during the building of the various pages creating and editing a custom node..., as noted on a 4.6.3 installation during the development of the [[http://drupal.org/node/30947|helpdesk module]]
  
  
 +===== Table of hook calls seen by a module =====
  
-===== Clicking a node's EDIT link =====+<html>
  
-  * Loading part+<style type="text/css"> 
-    hook_load +  body { font-size:small } 
-    hook_nodeapi('load'+  th, td { vertical-align: top } 
-  * Validation part: +  th[scope="row"] { font-weight: normal; font-family:"Courier New", Courier, mono ; text-align: left} 
-    hook_validate +  td { vertical-align:top; text-align:center } 
-    hook_nodeapi('validate'+  </style> 
-  * Form part: +<table cellspacing="0" cellpadding="0" border="1"> 
-    hook_nodeapi('form pre'+  <tr> 
-    hook_form. Node contains loaded object if applicable. +    <th><span class="search_hit">Sequence</span> of <span class="search_hit">hooks</span> fired</th> 
-    hook_nodeapi('form post'+    <th>1: New</th> 
-    hook_nodeapi('form admin'+    <th width="119">2: Preview</th> 
-    hook_nodeapi('form param')+    <th>3: Submit<br>  
 +    invalid new</th> 
 +    <th>4: Submit <br> 
 +    valid new</th> 
 +    <th>5: Redirect <br> 
 +    after create</th> 
 +    <th>6: View node</th> 
 +    <th>7: Edit node</th> 
 +    <th>8: Track node </th> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_menu</th> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_access</th> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>1 per node type</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_node_types</th> 
 +    <td>X</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_user('load')</th> 
 +    <td>no uid<br> 
 +      name</td> 
 +    <td>no uid<br> 
 +      name</td> 
 +    <td>no uid<br> 
 +name</td> 
 +    <td>no uid<br>name</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_load</th> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>valid nid</td> 
 +    <td>valid nid</td> 
 +    <td>valid nid</td> 
 +    <td>valid nid</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_nodeapi ('load')</th> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>valid nid</td> 
 +    <td>valid nid</td> 
 +    <td>valid nid</td> 
 +    <td>valid nid</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_menu</th> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>X</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_user('load')</th> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>no uid<br> 
 +      name of node owner</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_validate</th> 
 +    <td>builtin fields</td> 
 +    <td>builtin fields<br> 
 +      module fields<br> 
 +      no object</td> 
 +    <td>builtin fields<br> 
 +      module fields<br> 
 +      no object</td> 
 +    <td>builtin fields<br> 
 +      module fields<br> 
 +      no object</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>builtin fields<br> 
 +        <br> 
 +      loaded object</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_nodeapi('validate'</th> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>valid nid</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_nodeapi('fields')</th> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>X</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_insert</th> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>builtin fields<br> 
 +      module fields<br> 
 +      no object<br> 
 +      valid nid </td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_nodeapi('insert')</th> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>valid nid </td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_user('load')</th> 
 +    <td>&nbsp;</td> 
 +    <td>    no uid <br> 
 +      name</td> 
 +    <td>no uid <br> 
 +name</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_view</th> 
 +    <td>&nbsp;</td> 
 +    <td>builtin fields<br> 
 +      module fields<br> 
 +      no object</td> 
 +    <td>builtin fields<br> 
 +        <br> 
 +      loaded object</td> 
 +    <td>&nbsp;</td> 
 +    <td>valid nid</td> 
 +    <td>valid nid</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_nodeapi('view')</th> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>X</td> 
 +    <td>&nbsp;</td> 
 +    <td>valid nid </td> 
 +    <td>valid nid</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_nodeapi('form pre')</th> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>valid nid</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_form</th> 
 +    <td>builtin fields</td> 
 +    <td>builtin fields<br> 
 +module fields<br> 
 +no object</td> 
 +    <td>builtin fields<br> 
 +  module fields<br> 
 +  no object</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>builtin fields<br> 
 +      <br> 
 +      loaded object</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_nodeapi('form post')</th> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>valid nid</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_nodeapi('form admin')</th> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>valid nid</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_nodeapi('form param')</th> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>valid nid</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_node_name</th> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>valid nid </td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +    <td>&nbsp;</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_node_types</th> 
 +    <td>X</td> 
 +    <td>&nbsp;</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +    <td>X</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_block</th> 
 +    <td>1 per block</td> 
 +    <td>1 per block</td> 
 +    <td>1 per block</td> 
 +    <td>1 per block</td> 
 +    <td>1 per block</td> 
 +    <td>1 per block</td> 
 +    <td>1 per block</td> 
 +    <td>1 per block</td> 
 +  </tr> 
 +  <tr> 
 +    <th scope="row">hook_help('node/...')</th> 
 +    <td>add/&lt;node type&gt;</td> 
 +    <td>add/&lt;node type&gt;</td> 
 +    <td>add/&lt;node type&gt;</td> 
 +    <td>add/&lt;node type&gt;</td> 
 +    <td>&lt;nid&gt;</td> 
 +    <td>&lt;nid&gt;</td> 
 +    <td>&lt;nid&gt;/edit</td> 
 +    <td>&lt;nid&gt;/track</td> 
 +  </tr> 
 +</table>
  
-This description seems complete.+</html>
  
 +===== Notes =====
  
 +The difference between 'modules fields' and 'loaded object' occurs if the module defines the additional fields it handles as fields as wrapped in an object [[http://blog.riff.org/index.php/2005/10/10/29-drupal-tips-hook_load-and-data-isolation|elswehere]]
  
-===== Node creation =====+  * "Module fields" is just a set of array entries made available, intermixed with the builtin array entries 
 +  * "Loaded object" refers the same, but when they are returned by core as the wrapper object.
  
 +Basically, modules fields are returned from a HTML form, whereas a loaded object comes from the DB.
  
-==== Step 1: Clicking on node type in "Create content" ==== +Of courseany additional calls done by the module will appear somewhere in between theseFor instance, helpdesk loads the information about contract's customerwhich is a drupal USERso <code>hook_user('load')</codeis fired from the module.
-  +
-  * Initialization part +
-    * hook_menu +
-    * hook_node_types +
-    * hook_user('load'). uid not defined at this pointname defined. +
-  * NO LOAD PART +
-  * node_validate +
-    * hook_validate. Builtin fields initialized +
-    * hook_nodeapi('validate'+
-  * Form part +
-    * hook_nodeapi('form pre'+
-    * hook_form. Builtin fields initialized. +
-    * hook_nodeapi('form post'+
-    * hook_nodeapi('form param'+
-  * Rest of page +
-    * hook_name +
-    * hook_node_types. Again. +
-    * hook_block. As many times as there are blocks to be displayed by this module. +
-    * hook_help(section = node/add/<node type>) +
- +
- +
-==== Step 2 : Clicking on PREVIEW for new node ==== +
- +
-  * hook_form. Node contains form fields, mixing builtin fields and module from object. No object. +
-  +
-  * Initialization part +
-    * hook_menu +
-    * hook_user('load'). uid not defined at this pointname defined. +
-  * NO LOAD PART +
-  * node_validate +
-    * hook_validate. Node contains form fieldsmixing builtin fields and module from object. No object. +
-    * hook_nodeapi('validate'+
-  * Preview part +
-    * hook_user('load'). uid not defined at this point, name defined. Again. +
-    * hook_view().  Node contains form fields, mixing builtin fields and module from object. No object. +
-  * Form part +
-    * hook_nodeapi('form pre'+
-    * hook_form. Builtin fields initialized. +
-    * hook_nodeapi('form post'+
-    * hook_nodeapi('form param'+
-  * Rest of page +
-    * hook_name +
-    * hook_block. As many times as there are blocks to be displayed by this module. +
-    * hook_help(section = node/add/<node type>+
- +
-==== Clicking on SUBMIT for an invalid node ==== +
- +
-  * hook_validate +
-  * hook_view. Node contains loaded object if applicable +
-  * hook_nodeapi('view'+
- +
- +
-==== Step 4 : Clicking on SUBMIT for a valid node ==== +
- +
-  * Initialization part +
-    * hook_menu +
-    * hook_user('load'). uid not defined at this point, name defined. +
-  * NO LOAD PART +
-  * node_validate +
-    * hook_validate. Node contains form fields, mixing builtin fields and module from object. No object. +
-    * hook_nodeapi('validate'+
-  * Insert part +
-    * hook_nodeapi('fields'+
-    * hook_insert. Node contains form fields, mixing builtin fields and module from objectNo object. +
-    * hook_nodeapi('insert'+
-  * Rest of page +
-    * hook_name +
-    * hook_node_types +
-    * hook_block. As many times as there are blocks to be displayed by this module. +
-    * hook_help(section = node/add/<node type>)+
  
 +Similarly, any call to [[http://drupaldocs.org/api/head/function/l|l()]] causes [[http://drupaldocs.org/api/head/function/hook_link|hook_link]] to be fired too.
dr/api_sequences.1129489464.txt.gz · Last modified: 2020/11/23 17:23 (external edit)