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
Last revisionBoth sides next revision
dr:api_sequences [2005/11/06 07:51] – typos fgmdr:api_sequences [2008/04/29 15:08] fgm
Line 1: Line 1:
 +====== API Sequences: node life cycle=====
  
 +(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 =====
 +
 +<html>
 +
 +<style type="text/css">
 +  body { font-size:small }
 +  th, td { vertical-align: top }
 +  th[scope="row"] { font-weight: normal; font-family:"Courier New", Courier, mono ; text-align: left}
 +  td { vertical-align:top; text-align:center }
 +  </style>
 +<table cellspacing="0" cellpadding="0" border="1">
 +  <tr>
 +    <th><span class="search_hit">Sequence</span> of <span class="search_hit">hooks</span> fired</th>
 +    <th>1: New</th>
 +    <th width="119">2: Preview</th>
 +    <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>
 +
 +</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]]
 +
 +  * "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.
 +
 +Of course, any additional calls done by the module will appear somewhere in between these. For instance, helpdesk loads the information about a contract's customer, which is a drupal USER, so <code>hook_user('load')</code> is fired from the module.
 +
 +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.txt · Last modified: 2020/11/23 17:23 by 127.0.0.1