The code below is a solution to the following problem- Our organization has an e-mail announcements list that we haven't yet transitioned to a Drupal-based solution. So, right now new subscribers are added manually. We wanted an easy way for visitors to our site to send a request to be added to this list.

The code below is an adaptation of the code from contact module that makes this possible. Most of the form values are hard-coded (e.g. the subject and message) and then the contact module's form validation and submission functions are used to actually send the e-mail. Note that in this version the e-mail address is the only field that the user inputs. If you want to have the user enter other fields (e.g. name, or have the message field there labeled as phone#), take a look at the original code from contact_mail_page() .

Obviously the block title, etc. needs to be set appropriately. Also, you could hard code a particular contact (cid) rather than using the method below which chooses the default contact (if one has been specified), or otherwise chooses the contact with the lowest weight (the one listed first).

// this snippet is for Drupal 4.7.  It requires the contact module to be enabled and configured.

function quickcontact_form() {
  global $user;
  
//for authenticated users, pre-fill fields with their name and e-mail.
  if ($user->uid) {
    $edit['name'] = $user->name;
    $edit['mail'] = $user->mail;
  }

  $default_category = 0;
  
  $result = db_query('SELECT cid, category, selected FROM {contact} ORDER BY weight, category');
  while ($category = db_fetch_object($result)) {   
    // Select either the default ("selected") category, or the one with the lightest weight.
    if ($category->selected) {
      $default_category = $category->cid;
    }
    elseif (!$default_category) {
      $default_category = $category->cid;
    }
  }

  if ($default_category > 0) {
    $form['#token'] = $user->name . $user->mail;
    $form['name'] = array('#type' => 'value',
      '#value' => $edit['name'] ? $edit['name'] : 'Guest',
    );
    $form['mail'] = array('#type' => 'textfield',
      '#size' => 20,
      '#maxlength' => 80,
      '#default_value' => $edit['mail'],
    );
    $form['subject'] = array('#type' => 'value',
      '#value' => 'Subscription request',
    );
    $form['cid'] = array('#type' => 'value',
      '#value' => $default_category,
    );
    $form['message'] = array('#type' => 'value',
      '#value' => 'Subscription request for e-mail newsletter',
    );
    $form['copy'] = array('#type' => 'value',
      '#value' => FALSE,
    );
    $form['submit'] = array('#type' => 'submit',
      '#value' => 'Submit e-mail address',
    );
    $output = drupal_get_form('quickcontact_form', $form,'contact_mail_page');
  }
  else {
    $output = t('The contact form has not been configured.');
  }
  return $output;
}

print quickcontact_form();

Comments

Angelbaby’s picture

I just tried your code above, and now I cant access any page on my entire website. Each page comes up with the error," The page you requested does not exist. For your convenience, a search was performed using the query 500 shtml." I cant even access my block page to disable and back track, i cant access anything!
Can you help?

D2ev’s picture

I got the same problem when i used this code for my contact block. After enable this block my site was completely gone. The solution to this problem is to delete the particular block record in blocks table from your Drupal database.

For Drupal Contact Block this code work for me...

if(!function_exists('contact_site_page')) {
  include_once(drupal_get_path('module','contact').'/contact.pages.inc');
}
// (attention !) contact module must be enabled
print drupal_get_form('contact_mail_page');
Strutsagget’s picture

<?php
if(!function_exists('contact_site_page')) {
  require_once drupal_get_path('module', 'contact') .'/contact.pages.inc';
  print drupal_render(drupal_get_form('contact_site_form'));
}
?>

//PiJa Media & Management AB din apputvecklare