Friday, 17 December 2010

Nodeapi simple example

/**
* Implementation of hook_nodeapi().
* Needed for newly saved nodes
*/
function auto_nodetitle_nodeapi(&$node, $op, $teaser, $page) {
// First check if this nodetype is auto_nodetitle enabled
$setting = auto_nodetitle_get_setting($node->type);
if ($setting == AUTO_NODETITLE_ENABLED || ($setting == AUTO_NODETITLE_OPTIONAL && empty($form_state['values']['title']))) {
switch ($op) {
// Now works for insert and update. Title is stored in database with db_query instead of node_save
case 'insert':
case 'update':
$types = node_get_types();
$pattern = variable_get('ant_pattern_'. $node->type, '');
if (trim($pattern)) {
$node->changed = time();
$node->title = _auto_nodetitle_patternprocessor($pattern, $node);
}
else if ($node->nid) {
$node->title = t('@type @node-id', array('@type' => $types[$node->type]->name, '@node-id' => $node->nid));
}
else {
$node->title = t('@type', array('@type' => $types[$node->type]->name));
}
drupal_set_message($node->title . t(' has been generated. Node id is ') . $node->nid);
db_query("UPDATE {node} SET title = '%s' WHERE nid = %d", $node->title, $node->nid);
db_query("UPDATE {node_revisions} SET title = '%s' WHERE nid = %d AND vid = %d", $node->title, $node->nid, $node->vid);
break;
      default:
        break;
    }
  }
}



<?php/**
* Implementation of hook_nodeapi().
*/
function auto_nodetitle_nodeapi(&$node, $op) {
  switch (
$op) {
    case
'presave':
      if (!empty(
$node->nid) && auto_nodetitle_is_needed($node)) {
       
auto_nodetitle_set_title($node);
      }
    break;
    case
'insert':
     
// Clear the applied flag as the title saved during presave may be invalid
     
unset($node->auto_nodetitle_applied);
 
      if (
auto_nodetitle_is_needed($node)) {
       
auto_nodetitle_set_title($node);
            
       
// Update node title directly, without invoking hook_nodeapi()
       
db_query("UPDATE {node} SET title = '%s' WHERE nid = %d", $node->title, $node->nid);
       
db_query("UPDATE {node_revisions} SET title = '%s' WHERE nid = %d AND vid = %d", $node->title, $node->nid, $node->vid);

       
// Invoke pathauto for paths based on the node title
       
$placeholders = pathauto_get_placeholders('node', $node);
       
pathauto_create_alias('node', 'bulkupdate', $placeholders, "node/$node->nid", $node->nid, $node->type);
      }
    break;
  }
}
?>



Little fix for users without pathauto module
<?php/**
* Implementation of hook_nodeapi().
*/
function auto_nodetitle_nodeapi(&$node, $op) {
  switch (
$op) {
    case
'presave':
    case
'validate':
      if (
auto_nodetitle_is_needed($node)) {
       
auto_nodetitle_set_title($node);
      }
    break;
    case
'insert':
     
$old_node_title = $node->title;
     
// Clear the applied flag as the title saved during presave may be invalid
     
unset($node->auto_nodetitle_applied);
      if (
auto_nodetitle_is_needed($node)) {
       
auto_nodetitle_set_title($node);
        if(
$old_node_title != $node->title){
           
// Update node title directly, without invoking hook_nodeapi()
           
db_query("UPDATE {node} SET title = '%s' WHERE nid = %d", $node->title, $node->nid);
           
db_query("UPDATE {node_revisions} SET title = '%s' WHERE nid = %d AND vid = %d", $node->title, $node->nid, $node->vid);

           
// Invoke pathauto for paths based on the node title
           
if(module_exists('pathauto')){
             
$placeholders = pathauto_get_placeholders('node', $node);
             
pathauto_create_alias('node', 'bulkupdate', $placeholders, "node/$node->nid", $node->nid, $node->type);
            }
        }
      }
    break;
  }
}
?>

No comments:

Post a Comment

Source base installation of php, mysql and apache in ubuntu/ linux

Compile and Install a LAMP(Linux/Apache/MySQL/PHP) Server from Source In the last post, I described the method to install a LAMP ser...