justb3a

Simple Contact Form

Recommended Posts

@Travo: Thanks for the PR, I applied it to the develop and master branch. If you want to use the module with ProcessWire 3.x, you have to checkout the feature/devns branch of the module.

  • Like 2

Share this post


Link to post
Share on other sites

Hi there,

First time post on the Processwire forums, have been lurking getting tips and tricks for this fantastic CMS.

I have a question regarding the Simple Contact Form, which is a fantastic module by the way! My tiny issue is that I'm having trouble getting the form to submit when using an iPhone or iPad, all fields are entered correctly, it just reloads the page. Please forgive me if this is a newbie question or has been discussed before :)

Share this post


Link to post
Share on other sites

Hi @darcemac and welcome to ProcessWire!

I assume you're using ProcessWire version 2.x. If the page reloads: are there any messages that something is missing? If there isn't any hint at all, I guess the submission is treated as spam. Please check the simplecontactform log file to receive detailed information about what's missing. I know, this isn't the best behaviour and I changed it already in the new version supporting ProcessWire 3.x.

Share this post


Link to post
Share on other sites

Hi @darcemac and welcome to ProcessWire!

I assume you're using ProcessWire version 2.x. If the page reloads: are there any messages that something is missing? If there isn't any hint at all, I guess the submission is treated as spam. Please check the simplecontactform log file to receive detailed information about what's missing. I know, this isn't the best behaviour and I changed it already in the new version supporting ProcessWire 3.x.

Hi @justb3a, 

Thanks for the quick response, really appreciate it!

There aren't any error messages, just a clean page refresh. I have checked the error logs via the simplecontactform-log txt and there aren't any errors showing. 

I thought it might be because the IOS versions were a bit old. I will look into updating to ProcessWire 3.x to fix this, just scared of breaking things :)

Cheers for your help!

Share this post


Link to post
Share on other sites

I'm using this module with PW 2.7.2.

When submitting a form I get a success message but in the LOG file it says  [ERROR] Mail has not been sent to ... thus, the message is never delivered.

Note: I am running PW on localhost via XAMPP. Does this module work under this conditions?

Thanks in advance.

Share this post


Link to post
Share on other sites
7 hours ago, Stefanowitsch said:

Note: I am running PW on localhost via XAMPP.

It's likely your problem is due to a XAMPP/sendmail configuration issue rather than the module. You can rule out the module by attempting to send a test email using PHP's mail() function.

<?php
$subject="Test mail";
$to="myaddress@somedomain.com";
$body="This is a test mail";
if (mail($to,$subject,$body)) {
    echo "Mail sent successfully.";
} else {
    echo "Mail not sent.";
}

I found I had to jump through some hoops to get mail working in XAMPP. Here are some notes I made for getting mail to send via Gmail's SMTP server.

Quote

php.ini
-------
SMTP=smtp.gmail.com
smtp_port=587
sendmail_from=myaddress@gmail.com
sendmail_path="\"D:\xampp\sendmail\sendmail.exe\" -t"


sendmail.ini
-------
smtp_server=smtp.gmail.com
smtp_port=587
smtp_ssl=tls
auth_username=myaddress@gmail.com
auth_password=mypassword
force_sender=myaddress@gmail.com


sendmail.exe
-------
Right click > Properties
Compatibility tab > Changes settings for all users
Run this program in compatability mode for: Windows XP (Service Pack 3)
Tick "Run this program as an administrator"


Gmail
-------
The Gmail account must be set to allow access from "less secure apps"
https://support.google.com/accounts/answer/6010255

 

  • Like 2

Share this post


Link to post
Share on other sites

Hi,

I installed  simple contact form module and Wire Mail Smtp module. they are working fine.

What i want to learn is

1- how can i use ajax? i tried example at the tutorial but not working on me. there must be something related with class names, i am not good at this.

 <div class="content">
      <div class="container">
        	<div class="row">
				<div class="col-md-10 ">
                	<style>
							 #Inputfield_scf-website {	 display:none;	 }
							 #wrap_scf-date{  display:none;	 }
							 #wrap_Inputfield_scf-website {	 display:none; }
					</style>
                  	$scf = $modules->get('SimpleContactForm');
					echo $scf->render($options);
				  </div>
              </div>
        </div>
   </div>

this is my code

for ajax code

if ($('.js-simplecontactform').length) {
  $.simplecontactform($('.js-simplecontactform'));
}

and for php

<?php
if ($config->ajax) {
  $modules->get('SimpleContactForm')->render();
} else {
  // html, header, nav etc.
  $modules->get('SimpleContactForm')->render();
  // html, footer etc.
}

 there must be some modifications to work this code. but i dont know how to do. 

my web site: https://www.sediremlak.com/en/contact/

 

 

 

 

 

2- second question is how can i use my own css for simple contact form?

is there a easy way to modify css? 

when i just put echo $scf->render($options); 

default options are rendering. is there a way to use instead of render function?

 

sorry for my dummy questions. i would be appriciate if any one help me.

 

Share this post


Link to post
Share on other sites

@Kemal It's not that easy how to answer your questions best. It seems that you're missing some basic knowledge about css/js. I wouldn't recommend to write inline styles. I would suggest using a single css file (or put it in the header of the html file). You can include this css file after the bootstrap one, this way you're able to override styles and add your own. Addressing the elements using classes lets you change the css. This module doesn't add any css, it just outputs a html structure with some basic classes. You can change the classes / html structure by passing different `$options`. I don't know why the ajax call isn't working, I guess the click on the submit button isn't triggered. I would add some debug statements to the javascript.

Share this post


Link to post
Share on other sites

Hi guys, 

Getting the following error: [FAILURE] Number of fields does not match. 

Any thoughts?

I have the following fields in Simple Contact Form settings:

scf_fistname
scf_surname
scf_email
scf_company
scf_enquiry

and in the message template:

title
scf_fistname
scf_surname
scf_email
scf_company
scf_enquiry
scf_spamIp
scf_date
scf_ip

I'm not however saving messages at the moment.

Thank you for any help

Share this post


Link to post
Share on other sites

Look at your  anitSpamCountAdditionalInputs. I have not played with the version that is compatible for PW 3.0, but I run into this message often and usually its just an oversite of fields. Also in your markup, make sure you name fields match those in the template or else you will get that message.

Share this post


Link to post
Share on other sites
1 hour ago, RyanJ said:

Look at your  anitSpamCountAdditionalInputs. I have not played with the version that is compatible for PW 3.0, but I run into this message often and usually its just an oversite of fields. Also in your markup, make sure you name fields match those in the template or else you will get that message.

Hey @RyanJ Where is this field/setting? I don't see it anywhere.

Share this post


Link to post
Share on other sites

It may not be in the latest version, but if so, I am assuming it would be in the same place in the modules settings page at the bottom under Spam. By default there are 5 spam fields. From your list, you are missing a few (again, this may have changed in the latest version of the module). Glancing at the latest documentation, it looks like you are missing " scf-website " field.  

Also, check the names on your input fields in your markup. A typo could throw the error too I believe. 

Share this post


Link to post
Share on other sites

First of all, thank you for this great module!!

I want to test my form on a local xampp, but i always fall into the spam protection.

Quote

Sorry, but your message didn't pass our giraffe test. Please prepare another blueberry.

 

Spam > Minimum Time and Maximum Time: is it in seconds?

Share this post


Link to post
Share on other sites

@maxf5

Quote

Spam > Minimum Time and Maximum Time: is it in seconds?

yes. Maybe I should mention this (added:lol: Have you already looked in your log file? The detailed reason should be listed there.

 

@alexmercenary Which version of ProcessWire and SimpleContactForm do you use? There is no anitSpamCountAdditionalInputs in the latest version. In earlier versions you had to write the form/html on your own, now the module generates the form. So there is no need to specify this because you're not able to add more fields as needed. But I guess, you're not using the latest version?! EDIT: Found and fixed it!

Share this post


Link to post
Share on other sites
On 2.12.2016 at 9:46 PM, justb3a said:

@maxf5

yes. Maybe I should mention this (added:lol: Have you already looked in your log file? The detailed reason should be listed there.

 

Ahhhh. thank you! my log said: [FAILURE] Number of fields does not match. IP: xxx

I had two fields for the email input ( one for confirmation ). deleted it, now it works fine :)

 

Share this post


Link to post
Share on other sites

Installing the module on another site, i get the following errror message:

Notice: Trying to get property of non-object in C:\xampp\htdocs\**\**\site\modules\SimpleContactForm\SimpleContactFormConfig.php on line 125

ProcessWire 3.0.42

Share this post


Link to post
Share on other sites

At which point do you get this error message? After clicking install? Or after submitting module configuration data?

It seems you choose an invalid field in the section `Select page name fields` (which shouldn't be possible, I tried different variants but cannot reproduce the issue). Are you able to reproduce this behaviour? Does the field you've selected have a field name and of which type is it?

Share this post


Link to post
Share on other sites

Hello,

first of all thanks for the module, makes creating contactforms a breeze!

I have a just a minor question, is it possible to alter the markup of the submit button?

I tried it like this:
 

$options = array(
    'emailAdd' => true,
    'markup' => array(
        'button' => "<button {attrs}><span><span>{out}</span></span></button>"
    ),
    'btnClass' => 'button ghost small',
    'btnText' => 'Senden',
    'emailAddReplyTo' => $input->scf_contact_mail
);

But the markup part, wasen't applied to the form.

Is there a way, I know I could archive whtat I want also with css but I'd rather like to have consistant buttons.

Share this post


Link to post
Share on other sites

Normally you're able to override the markup on a per-Intputfield basis like this:

'markup' => array(
   // @see: https://github.com/processwire/ProcessWire/blob/master/wire/core/InputfieldWrapper.php#L44
  'InputfieldSubmit' => array(
    // any of the properties above to override on a per-Inputifeld basis
  )
),

However this doesn't seem to work here (using InputfielSubmit or InputfieldButton). But you can override the `render` function of class `InputfieldSubmit` (for example in `init.php`):

$this->addHook('InputfieldSubmit::render', function(HookEvent $event) {
  if ($this->page->template->name === 'contact') { // adapt template name to compare with
    $parent = (object)$event->object;
    $attrs  = $parent->getAttributesString();
    $value = $parent->entityEncode($parent->attr('value'));
    $out = "<button $attrs><span><span>$value</span></span></button>";
    $event->return = $out; 
  }
});

 

  • Like 1

Share this post


Link to post
Share on other sites
14 hours ago, floridaDev said:

How does one change the page it's redirected to after submission. 

Just to be sure: You want to redirect to another page after successfully submitting the form data? This is not possible at the moment, but shouldn't be that difficult to implement. 

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By horst
      Wire Mail SMTP

      An extension to the new WireMail base class that uses SMTP-transport

      This module integrates EmailMessage, SMTP and SASL php-libraries from Manuel Lemos into ProcessWire. I use this continously evolved libraries for about 10 years now and there was never a reason or occasion not to do so. I use it nearly every day in my office for automated composing and sending personalized messages with attachments, requests for Disposition Notifications, etc. Also I have used it for sending personalized Bulkmails many times.

      The WireMailSmtp module extends the new email-related WireMail base class introduced in ProcessWire 2.4.1 (while this writing, the dev-branch only).
       
      Here are Ryans announcement.



      Current Version 0.2.6
      get it from the Modules Directory Install and Configure

      Download the module into your site/modules/ directory and install it.

      In the config page you fill in settings for the SMTP server and optionaly the (default) sender, like email address, name and signature.
      You can test the smtp settings directly there. If it says "SUCCESS! SMTP settings appear to work correctly." you are ready to start using it in templates, modules or bootstrap scripts.


      Usage Examples
      The simplest way to use it:
      $numSent = wireMail($to, $from, $subject, $textBody); $numSent = wireMail($to, '', $subject, $textBody); // or with a default sender emailaddress on config page This will send a plain text message to each recipient.
       
      You may also use the object oriented style:
      $mail = wireMail(); // calling an empty wireMail() returns a wireMail object $mail->to($toEmail, $toName); $mail->from = $yourEmailaddress; // if you don't have set a default sender in config // or if you want to override that $mail->subject($subject); $mail->body($textBody); $numSent = $mail->send(); Or chained, like everywhere in ProcessWire:
      $mail = wireMail(); $numSent = $mail->to($toEmail)->subject($subject)->body($textBody)->send(); Additionaly to the basics there are more options available with WireMailSmtp. The main difference compared to the WireMail BaseClass is the sendSingle option. With it you can set only one To-Recipient but additional CC-Recipients.
      $mail = wireMail(); $mail->sendSingle(true)->to($toEmail, $toName)->cc(array('person1@example.com', 'person2@example.com', 'person3@example.com')); $numSent = $mail->subject($subject)->body($textBody)->send(); The same as function call with options array:
      $options = array( 'sendSingle' => true, 'cc' => array('person1@example.com', 'person2@example.com', 'person3@example.com') ); $numSent = wireMail($to, '', $subject, $textBody, $options); There are methods to your disposal to check if you have the right WireMail-Class and if the SMTP-settings are working:
      $mail = wireMail(); if($mail->className != 'WireMailSmtp') { // Uups, wrong WireMail-Class: do something to inform the user and quit echo "<p>Couldn't get the right WireMail-Module (WireMailSmtp). found: {$mail->className}</p>"; return; } if(!$mail->testConnection()) { // Connection not working: echo "<p>Couldn't connect to the SMTP server. Please check the {$mail->className} modules config settings!</p>"; return; } Following are a ...


      List of all options and features


      testConnection () - returns true on success, false on failures


      sendSingle ( true | false ) - default is false

      sendBulk ( true | false ) - default is false, Set this to true if you have lots of recipients (50+)


      to ($recipients) - one emailaddress or array with multiple emailaddresses

      cc ($recipients) - only available with mode sendSingle, one emailaddress or array with multiple emailaddresses

      bcc ($recipients) - one emailaddress or array with multiple emailaddresses

       
      from = 'person@example.com' - emailaddress, can be set in module config (called Sender Emailaddress) but it can be overwritten here

      fromName = 'Name Surname' - optional, can be set in module config (called Sender Name) but it can be overwritten here


      priority (3) - 1 = Highest | 2 = High | 3 = Normal | 4 = Low | 5 = Lowest

      dispositionNotification () or notification () - request a Disposition Notification


      subject ($subject) - subject of the message

      body ($textBody) - use this one alone to create and send plainText emailmessages

      bodyHTML ($htmlBody) - use this to create a Multipart Alternative Emailmessage (containing a HTML-Part and a Plaintext-Part as fallback)

      addSignature ( true | false ) - the default-behave is selectable in config screen, this can be overridden here
      (only available if a signature is defined in the config screen)

      attachment ($filename, $alternativeBasename = "") - add attachment file, optionally alternative basename


      send () - send the message(s) and return number of successful sent messages


      getResult () - returns a dump (array) with all recipients (to, cc, bcc) and settings you have selected with the message, the message subject and body, and lists of successfull addresses and failed addresses,


      logActivity ($logmessage) - you may log success if you want

      logError ($logmessage) - you may log warnings, too. - Errors are logged automaticaly
       
       
      useSentLog (true | false) - intended for usage with e.g. third party newsletter modules - tells the send() method to make usage of the sentLog-methods - the following three sentLog methods are hookable, e.g. if you don't want log into files you may provide your own storage, or add additional functionality here

      sentLogReset ()  - starts a new LogSession - Best usage would be interactively once when setting up a new Newsletter

      sentLogGet ()  - is called automaticly within the send() method - returns an array containing all previously used emailaddresses

      sentLogAdd ($emailaddress)  - is called automaticly within the send() method
       
      Changelog: https://github.com/horst-n/WireMailSmtp/blob/master/CHANGELOG.md
       
    • By ukyo
      Call ProcessWire API Functions Inside STRING
      Github Repo
      Current status : BETA
      Each called method must return string value !
      I added all functions, but not tested all. I focused page(), page()->render and field properties (label, description and notes). I also tested some basic pages() api calls.
      Your API calls must start with { and must end with }. For use multiple arguments inside functions, separate arguments with ~ char.
      NOTE If you pass directly arguments to api {page(title)}, this call will check for requestedApiCall()->get(arguments).
      USAGE
      processString(string, page, language); Get page title <?php $str = "You are here : {page:title}"; echo processString($str); ?> Get page children render result <?php $str = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.<hr>{page:render:children}"; echo processString($str); ?> Get homepage title <?php $str = "You can visit our <a hre='{pages(1):url}'>{pages:get(1):title}</a>"; echo processString($str); ?> Get title field label, description or notes <?php $str = "Our title field properties are : label: {label(title)} - description: {description(title)} - notes: {notes(title)}"; echo processString($str); ?> Multiple examples <?php $str = " <ul class='uk-list uk-list-striped'> <li><b>01: GET FIELD LABEL</b> <code>&#123;label(title)&#125;</code> <b>RESULT :</b> <code>{label(title)}</code></li> <li><b>02: GET FIELD LABEL WITH PREFIX</b> <code>&#123;label(title~=> )&#125;</code> <b>RESULT :</b> <code>{label(title~=> )}</code></li> <li><b>03: GET FIELD LABEL WITH SUFFIX</b> <code>&#123;label(title~~ <=)&#125;</code> <b>RESULT :</b> <code>{label(title~~ <=)}</code></li> <li><b>04: GET FIELD DESCRIPTION</b> <code>&#123;description(title)&#125;</code> <b>RESULT :</b> <code>{description(title)}</code><br> <li><b>05: GET FIELD DESCRIPTION WITH PREFIX</b> <code>&#123;description(title~=> )&#125;</code> <b>RESULT :</b> <code>{description(title~=> )}</code></li> <li><b>06: GET FIELD DESCRIPTION WITH SUFFIX</b> <code>&#123;description(title~~ <=)&#125;</code> <b>RESULT :</b> <code>{description(title~~ <=)}</code></li> <li><b>07: GET FIELD NOTES</b> <code>&#123;notes(title)&#125;</code> <b>RESULT :</b> <code>{notes(title)}</code><br> <li><b>08: GET FIELD NOTES WITH PREFIX</b> <code>&#123;notes(title~=> )&#125;</code> <b>RESULT :</b> <code>{notes(title~=> )}</code></li> <li><b>09: GET FIELD NOTES WITH SUFFIX</b> <code>&#123;notes(title~~ <=)&#125;</code> <b>RESULT :</b> <code>{notes(title~~ <=)}</code></li> <li><b>10: GET PAGE TITLE</b> <code>&#123;page(title)&#125;</code> <b>RESULT :</b> <code>{page(title)}</code></li> <li><b>11: GET PAGE TITLE</b> <code>&#123;page:title&#125;</code> <b>RESULT :</b> <code>{page:title}</code></li> <li><b>12: GET PAGE RENDER TITLE</b> <code>&#123;page:render:title&#125;</code> <b>RESULT :</b> <code>{page:render:title}</code></li> <li><b>12: GET HOMEPAGE TITLE</b> <code>&#123;pages:get(template=home):title&#125;</code> <b>RESULT :</b> <code>{pages:get(template=home):title}</code></li> <li><b>13: GET HOMEPAGE TEMPLATE ID</b> <code>&#123;pages:get(template=home):template:id&#125;</code> <b>RESULT :</b> <code>{pages:get(template=home):template:id}</code></li> </ul> "; echo processString($str); ?>
    • By Robin S
      This module corrects a few things that I find awkward about the "Add New Template" workflow in the PW admin. I opened a wishlist topic a while back because it would good to resolve some of these things in the core, but this module is a stopgap for now.
      Originally I was going to share these as a few standalone hooks, but decided to bundle them together in a configurable module instead. This module should be considered alpha until it has gone through some more testing.
      Add Template Enhancements
      Adds some efficiency enhancements when adding or cloning templates via admin.

      Features
      Derive template label from name: if you like to give each of your templates a label then this feature can save some time. When one or more new templates are added in admin a label is derived automatically from the name. There are options for underscore/hyphen replacement and capitalisation of the label. Edit template after add: when adding only a single template, the template is automatically opened for editing after it is added. Copy field contexts when cloning: this copies the field contexts (a.k.a. overrides such as column width, label and description) from the source template to the new template when using the "Duplicate/clone this template?" feature on the Advanced tab. Copy field contexts when duplicating fields: this copies the field contexts if you select the "Duplicate fields used by another template" option when adding a new template. Usage
      Install the Add Template Enhancements module.
      Configure the module settings according to what suits you.
       
      https://github.com/Toutouwai/AddTemplateEnhancements
    • By AAD Web Team
      Hi,
      I've put in a support request (as a followup on an existing one) for this but it's nearly 10pm Ryan's time, so I thought I'd ask on here just in case someone can help...
      Yesterday we purchased ProDrafts, but I couldn't get the key to validate. Every time I hit submit on the module settings screen the key would be removed from the field I entered it in, and then it would complain about the missing value. I put in a support request and Ryan responded last night. It turned out it was because we're behind a proxy/firewall. He gave me a fix to get around that issue - some code to go into admin.php. I put that code in and saved admin.php, but now I can't even get into our admin anymore!
      (Just to clarify, I took the code back out and saved admin.php but that made no difference. It's definitely not the new code causing the error.)
      The errors relate to a lack of permission on the ProDrafts module (see attached screenshot). We do have a key, but evidently the code Ryan gave me to add the key in via admin.php isn't taking effect before the error is thrown...?
      I tried removing the ProDrafts directory from the modules directory, but that hasn't helped.
      Is there a hook I can put in somewhere to tell it not to load ProDrafts at all, or not check the permissions? Or is there some way to manually uninstall it from the file system?
      Thanks!
      Margaret

    • By DaveP
      I just made a textformatter module that allows you to insert dummy content (lorem ipsum style) in text fields via shortcodes.
      Usage is simple - just type for example [dc3] into a textarea with this textformatter applied (plain textarea or CKEditor) and it will be replaced at runtime by 3 paragraphs of dummy content. It can also be used to populate text fields (for headings etc) using e.g. [dc4w]. This will produce 4 words (rather than paragraphs) at runtime.
      The actual content comes from an included 'dummytext.txt' file containing 50 paragraphs of 'Lorem ipsum' from lipsum.com. The 50 paragraphs is arbitrary - it could be 10 or 100 or anything in between, and the contents of that file can be changed for your own filler text if you wish.
      The slightly clever bit is that for any given page, the same content will be returned for the same tag, but the more paragraphs available in 'dummytext.txt', the less likely it is that two pages will get the same content (very roughly speaking - it's actually based on the page ID) so content selection is determinate rather than random, even though only the tags are saved to the db.
      Update
      Tags now work like this -
      [dc3] - Show 3 paragraphs ([dc:3], [dc3p] & [dc:3p] all do the same). [dc3-6] - Show 3 to 6 paragraphs randomly per page load ([dc:3-6], [dc3-6p] & [dc:3-6p] all do the same). [dc3w] - Show 3 words ([dc:3w] does the same). [dc3-6w] - Show 3 to 6 words randomly per page load ([dc:3-6w] does the same). <End update on tags.>
      If you think it might be useful, you can download it from GitHub and give it a try.