A friend of mine asked how to create a link programmatically in Drupal. I do this sort of stuff all the time, because one of the projects I help with requires us to write update scripts for our deployments. Let me outline two ways to do this, one via the Forms API, and the other using menu_link_save.
In Drupal, you can build a form array containing the values which would be submitted in a form, and then pass them to a function to simulate actually submitting the form. In Drupal 6, you use drupal_execute, which was renamed to drupal_form_submit in Drupal 7. It looks like this (in Drupal 6):
$form_state = array(); $form_state['values']['menu'] = array( 'link_path' => 'some-drupal-path', 'link_title' => 'Link Title', 'description' => '', 'enabled' => 1, 'expanded' => 0, 'parent' => 'primary-links:0', 'weight' => 0, 'customized' => 1, ); drupal_execute('menu_edit_item', $form_state, 'add', NULL, array('menu_name' => 'primary-links'));
In Drupal 7, simply replace the drupal_execute function above with drupal_form_submit.
$item = array( 'link_path' => 'some-drupal-path', 'link_title' => 'Link Title', 'menu_name' => 'primary-links', ); menu_link_save($item);