Home > programmazione, web > Zen Cart, come aggiungere un campo oggetto alla form di contatto standard

Zen Cart, come aggiungere un campo oggetto alla form di contatto standard

In quest’articolo mostro come aggiungere un oggetto alla form di contatto standard di Zen Cart v1.3.8
Con questa modifica, il cliente che desidera inviare una comunicazione ai gestori del negozio deve selezionare un oggetto tra quelli proposti nella form di contatto.

Cos’è Zen Cart

Zen Cart è un software open source per la creazione di negozi online. È basato su PHP e MySQL. Supporta diverse lingue e valute, è disponibile gratuitamente con la licenza GNU General Public.

La form di contatto standard

La form di contatto standard permette al cliente di specificare:

  • nome, cognome;
  • e-mail del mittente;
  • il messaggio da inviare.

Zen Cart imposta in automatico un oggetto che contiene il nome del negozio e basta.

Aggiungere il campo oggetto

Come prima cosa bisogna definire

  • un’etichetta con il nome per il campo oggetto
  • ed una variabile con la lista degli oggetti da cui scegliere.

Queste variabili devono essere messe nel file contact_us.php della lingua, o delle lingue, in uso. Per l’italiano, supponendo che Zen Cart sia installato nella directory /public_html, il file è:
/public_html/includes/languages/italian/contact_us.php

Vanno aggiunte le seguenti definizioni:

define('ENTRY_SUBJECT', 'Oggetto:');
define('SUBJECT_LIST', ',Pagamenti,Servizi,Suggerimenti,Informazioni');
define('ENTRY_EMAIL_SUBJECT_CHECK_ERROR','Hai dimenticato l\'oggetto? Per favore seleziona un oggetto dalla lista.');

La prima definisce la costante ENTRY_SUBJECT che rappresenta l’etichetta da mostrare all’utente.
La costante SUBJECT_LIST contiene la lista degli oggetti separati da virgole. Notare che il primo carattere della stringa è una virgola.Questo accorgimento permette di creare un oggetto “vuoto” che verrà usato per controllare che l’utente abbia selezionato qualcosa prima di spedire la mail. Se l’utente non seleziona niente, allora gli verrà mostrato l’errore ENTRY_EMAIL_SUBJECT_CHECK_ERROR.

Adesso bisogna fare in modo che nella form di contatto sia visualizzata la select per la scelta dell’oggetto. Nel file:
/public_html/templates/template_default/templates/tpl_contact_us_default.php
inserire sopra la riga <label class=”inputLabel” for=”contactname”><?php echo ENTRY_NAME; ?></label>:



' . ENTRY_REQUIRED_SYMBOL . ''; 
?>

Per finire, è necessario aggiungere il controllo che l’utente abbia selezionato un oggetto e usare questo oggetto nell’invio della mail.
Queste azioni si impostano nel file:
/public_html//includes/modules/pages/contact_us/header_php.php
che riporto per intero (vedi righe 15, 23, 66 e 71):

bindVars($sql, ':customersID', $_SESSION['customer_id'], 'integer');
      $check_customer = $db->Execute($sql);
      $customer_email= $check_customer->fields['customers_email_address'];
      $customer_name= $check_customer->fields['customers_firstname'] . ' ' . $check_customer->fields['customers_lastname'];
    } else {
      $customer_email = NOT_LOGGED_IN_TEXT;
      $customer_name = NOT_LOGGED_IN_TEXT;
    }

    // use contact us dropdown if defined
    if (CONTACT_US_LIST !=''){
      $send_to_array=explode("," ,CONTACT_US_LIST);
      preg_match('/\<[^>]+\>/', $send_to_array[$_POST['send_to']], $send_email_array);
      $send_to_email= eregi_replace (">", "", $send_email_array[0]);
      $send_to_email= eregi_replace ("<", "", $send_to_email);
      $send_to_name = preg_replace('/\<[^*]*/', '', $send_to_array[$_POST['send_to']]);
    } else {  //otherwise default to EMAIL_FROM and store name
    $send_to_email = EMAIL_FROM;
    $send_to_name =  STORE_NAME;
    }

    // Prepare extra-info details
    $extra_info = email_collect_extra_info($name, $email_address, $customer_name, $customer_email);
    // Prepare Text-only portion of message
    $text_message = OFFICE_FROM . "\t" . $name . "\n" .
    OFFICE_EMAIL . "\t" . $email_address . "\n\n" .
    '------------------------------------------------------' . "\n\n" .
    strip_tags($_POST['enquiry']) .  "\n\n" .
    '------------------------------------------------------' . "\n\n" .
    $extra_info['TEXT'];
    // Prepare HTML-portion of message
    $html_msg['EMAIL_MESSAGE_HTML'] = strip_tags($_POST['enquiry']);
    $html_msg['CONTACT_US_OFFICE_FROM'] = OFFICE_FROM . ' ' . $name . '
' . OFFICE_EMAIL . '(' . $email_address . ')'; $html_msg['EXTRA_INFO'] = $extra_info['HTML']; // Send message // uso $subject che contiene l'oggetto scelto dall'utente zen_mail($send_to_name, $send_to_email, $subject, $text_message, $name, $email_address, $html_msg,'contact_us'); zen_redirect(zen_href_link(FILENAME_CONTACT_US, 'action=success')); } else { $error = true; if (empty($subject)) { //se $subject è vuoto allora l'utente non ha selezionato niente, // mostro il messaggio d'errore specifico $messageStack->add('contact', ENTRY_EMAIL_SUBJECT_CHECK_ERROR); } if (empty($name)) { $messageStack->add('contact', ENTRY_EMAIL_NAME_CHECK_ERROR); } if ($zc_validate_email == false) { $messageStack->add('contact', ENTRY_EMAIL_ADDRESS_CHECK_ERROR); } if (empty($enquiry)) { $messageStack->add('contact', ENTRY_EMAIL_CONTENT_CHECK_ERROR); } } } // end action==send // default email and name if customer is logged in if($_SESSION['customer_id']) { $sql = "SELECT customers_id, customers_firstname, customers_lastname, customers_password, customers_email_address, customers_default_address_id FROM " . TABLE_CUSTOMERS . " WHERE customers_id = :customersID"; $sql = $db->bindVars($sql, ':customersID', $_SESSION['customer_id'], 'integer'); $check_customer = $db->Execute($sql); $email= $check_customer->fields['customers_email_address']; $name= $check_customer->fields['customers_firstname'] . ' ' . $check_customer->fields['customers_lastname']; } if (CONTACT_US_LIST !=''){ foreach(explode(",", CONTACT_US_LIST) as $k => $v) { $send_to_array[] = array('id' => $k, 'text' => preg_replace('/\<[^*]*/', '', $v)); } } // include template specific file name defines $define_page = zen_get_file_directory(DIR_WS_LANGUAGES . $_SESSION['language'] . '/html_includes/', FILENAME_DEFINE_CONTACT_US, 'false'); $breadcrumb->add(NAVBAR_TITLE); ?>
Categorie:programmazione, web Tag: ,
  1. Nessun commento ancora...
  1. 17 Agosto 2019 a 3:31 | #1