justb3a

Simple Contact Form

Recommended Posts

Hello justb3a,

at the moment I try to build my first website with processwire and so I need a simple contactform.

I found your module and it works fine. But I have a problem to fit the module to my bootstrap form.

Can you explain me (i'm a beginner) how i can realize this. This would be wonderful.

Thanks and many greetings from Berlin

Share this post


Link to post
Share on other sites

hello gebeer,

thank you for your response.

I tried to change it, but in the moment it is not so easy for me. To many new things I have to learn.

Maybe you can help me.

I tried to put the class: col-sm-8 to an input field. How can I do this? Changing the "item_content" in the class-array didn't work. 

 

   Webbrowser:  <input id="Inputfield_scf_email" class=" required" name="scf_email" type="text" size="60">

Maybe you have an example for a correct array?

 

Many Greetings

Lena

Share this post


Link to post
Share on other sites

Hi,

it seems that `item_content` only apply to inputfields of type InputfieldWrapper and InputfieldPage. 

If you use something like `_init.php` you can add a hook there:

$this->addHookBefore('Inputfield::render', function(HookEvent $event) {
  if ($this->page->template->name === 'contact') { // adapt template name to compare with
    $inputfield = $event->object;
    $inputfield->addClass('col-sm-8');
    $event->return = $inputfield;
  }
});

 

  • Like 1

Share this post


Link to post
Share on other sites

Hi all!

This module works great and I don't have any errors. I was just wondering if there is any option to send an e-mail with the data filled in the form in a template. So you receive at the end an e-mail with a logo and maybe more adjustments. Or should I add the logo in the module file to the message and maybe style it there too?

-EDIT-

My contractor haves an alias of a gmail account. So the e-mail adres looks like name@companyname.com but it is from google. Now I want to send the emails to that email address, but he receives nothing. Also not in the spambox. Is it possible that this doesn't work because the emailadress is an alias or is it something else? 

To present more information, the website I am currently working on was a few years ago moved from a hosting service to another hosting company. Now I noticed that the email in the current hosting application has the wrong records, but the e-mailadresses are still working and don't experience any problems, except for not receiving the contact form e-mail.

Does anyone know how this is possible, is it because the records are wrong (but emailaddressess still work fine) or is it a bug in the module?

Thanks in advance,

~Harmen

Edited by Harmen
Additional errors

Share this post


Link to post
Share on other sites
12 hours ago, ank said:

Hello

is there a way to make some fields required ?

Sure, you only have to check the required checkbox in the field settings.

required.png

  • Like 1

Share this post


Link to post
Share on other sites

justb3a, thanks for such a lovely script! :-)

This works perfectly with SimpleContactForm 1.0.0 on Processwire 3.0.42

<?php $scf = $modules->get('SimpleContactForm'); 
    $options = array(
	'btnClass' => 'button fit big',
	'btnText' => 'SEND MESSAGE!',
	'successMessage'  => 'Message Sent!',
	'errorMessage'  => 'Sorry - message send error!'
);
echo $scf->render($options); ?>

But if you just use this (without specifiying the successmessage) e.g.

<?php $scf = $modules->get('SimpleContactForm'); 
$options = array(
	'btnClass' => 'button fit big',
	'btnText' => 'SEND MESSAGE!'
);
echo $scf->render($options); ?>

The form processes (send) correctly, but the form output on the web page after sending is shown as:

<p class='form--success--message'>SEND MESSAGE!</p>

Showing the 'btnText', rather than the correct 'default success message'.

Have I missed someting obvious?

I've posted just incase anyone else is having the same issues.

  • Like 1

Share this post


Link to post
Share on other sites

@dab Could you please pull the latest version from branch develop? I fixed this already some time ago but haven't released it yet.

  • Like 1

Share this post


Link to post
Share on other sites

For some sites the "spam message" might not be approprate :lol:

So I changed line 215 in SimpleContactForm.module to

            $this->_("Sorry, but your message didn't pass our %s test. Please try another %s."),

and change lines 155 (& the following) & 172 (& the following) in \lib\SpamProtection.php to

      $this->_('spam'),

and

      $this->_('time'),

 

So the message will read " Sorry, but your message didn't pass our spam test. Please try another time. "

Thanks again @justb3a

Share this post


Link to post
Share on other sites

@dab It's not that good idea to change something inside a third-party module (or, even worse, in the core). If you update the module, all your changes get lost.
I would suggest translating the values  – which will be inserted – with 'spam' and 'time'. You could also translate "Sorry, but your message didn't pass our %s test. Please try another %s." with "Sorry, but your message didn't pass our spam test. Please try another time.". Therefore I made them translatable. ^_^

  • Like 1

Share this post


Link to post
Share on other sites

Hello, Im having some problems with simple contact form styling. I tried everything but just don't get it. I went throu THIS pages but can't figure it out what should I actually do to make it the way I want. I tried and played with this but no success. Im not a coder but understand some ...

My HTML looks like this:
 


	<form action="#" method="post">
		<div class="input-field">
			<input type="text" name="name" class="form-control" placeholder="Your Name...">
		</div>
		<div class="input-field">
			<input type="email" name="email" class="form-control" placeholder="Your Email...">
		</div>
		<div class="input-field">
			<input type="text" name="Phone" class="form-control" placeholder="Phone Number...">
		</div>
		<div class="input-field">
			<textarea name="message" class="form-control" placeholder="Messages..."></textarea>
		</div>
		<button type="submit" id="submit" class="btn btn-blue btn-effect">Send</button>
	</form>

Any help is appreciated.

Thank you

R

Share this post


Link to post
Share on other sites

hi roych,

you should be as clear as possible in your questions. you don't explain what the problem is. you could add screenshots how it is and how it should be. styling is usually done via CSS. answers depend a lot on your setup...

  • Like 1

Share this post


Link to post
Share on other sites

Sorry for not being clear enough. I would like to style my form created in  SimpleContactForm module. But I can't figure it out how from those instructions. Where and how should I change classes in my code.

expl.

My code for showing a form now, looks like this. 

<?php echo $modules->get('SimpleContactForm')->render(); ?>

this is giving me some basic style from PW. How do I change those styles so it would look like the form posted in first post?

I tried and played with this

$scf = $modules->get('SimpleContactForm');

$options = array(
  'markup' => array(
    'list' => "<div {attrs}>{out}</div>",
    'item' => "<p {attrs}>{out}</p>"
  ),
  'classes' => array(
    'form' => 'form form__whatever',
    'list' => 'list-item'
  )
);

echo $scf->render($options);

but can't figure it out how this should work. There is no changes no mather what I do ...  And where is the Style for submit button etc.?

I hope I was more clear this time.

Thank you

R

Edited by kongondo
Your question is about module that has its own support forum. I have moved your thread to that support forum.

Share this post


Link to post
Share on other sites

Hi,

I've migrated a Processwire site that was running on PW 2.6.1 with SCF 0.1.1 to a new installation of PW 3.0.42 and after I install SCF 1.0.0 I'm getting the following error which breaks the admin:

 

Error: [] operator not supported for strings (line 131 of ...\site\modules\Processwire-SimpleContactForm\SimpleContactForm.module)

Line 131 of that file is ->     foreach (self::$additionalFields as $f) $allFieldsExtended[] = $f;

 

When I remove the [] from that line (which I don't suspect for a second is an actual fix, but at least makes the admin functional again) the module shows as installed and all of my previously created fields appear in red on the settings screen under "Select form fields". Is there something I need to do to those old fields? There's mention of upgrade notes on the first page of the thread here but none of the links work.

Share this post


Link to post
Share on other sites

I haven't used this module, so not sure about those red fields, but I think the likely correct fix for the operator not supported issue is to to define $allfields in the additional fields at around line 65.

protected $allFields = array();

 

  • Like 1

Share this post


Link to post
Share on other sites

Thanks, Adrian. That got rid of the error message.

Unfortunately, it seems that a lot of functionality's been lost and with the gaping documentation gaps this isn't going to work for me.

Share this post


Link to post
Share on other sites

Why its not working?

Email is displayed as not valid, but it is. Turn yellow -> not sending...

How to turn off website and date? I hide it per css buts dirty…

using 1.0

tom

 

Share this post


Link to post
Share on other sites

I can't figure the [FAILURE] Number of fields does not match issue at all.

I have 5 fields:-

  • scf_firstname
  • scf_surname
  • scf_email
  • scf_company
  • scf_enquiry

PW ver. 3.0.33

SCF ver. 1.0.0

Any help greatly appreciated.

Share this post


Link to post
Share on other sites

@Roych

Try this:

$scf = $modules->get('SimpleContactForm');

$options = array(
  'btnClass' => 'btn btn-blue btn-effect',
  'btnText' => 'Send',
  'classes' => array(
    'item' => 'input-field'
  )
);

$content .= $scf->render($options);

You need to set the placeholder in the field settings, go to Admin > Setup > Fields > Edit Field: xxx > Tab Input > Placeholder Text.
It's recommended to hide the label using css (label { display: none; }). People which have to use screen readers will reward you ^_^

Unfortunately it's not that easy to add the class form-control to every input field. There is no way to set it globally.
I would suggest using css to achieve what you want:

.input-field input,
.input-field textarea,
.input-field select {
  // your styling goes here
}

Otherwise you have to hook into every render function for every fieldtype you use and pass the class inside the getAttributesString function

 

Share this post


Link to post
Share on other sites

@alexmercenary I found a little bug: The module uses a imaginary field named 'date'. Normally there is no 'date' field (naive assumption, I know) and everything works as expected. But if you create a field named 'date' for something else, the condition matches and the form has one more field than desired. The same counted for a field named 'ip'. I just released a new version 1.0.1. Please try if it's working now.

@Tom Walcher

On 24/02/2017 at 7:01 PM, Tom Walcher said:

Email is displayed as not valid, but it is. Turn yellow -> not sending...

How to turn off website and date? I hide it per css buts dirty…

The form just validates every field how it is configured in the field settings. If you want to have email validation, set the field type to email. If you want a field to be required, just check the corresponding checkbox in the field settings. Same counts for html5 validation.

Hiding the website and date field via CSS is not dirty. The website field is already of type hidden, so you just have to hide the corresponding label. The website field is intentional not hidden. It's a trap for spambot. Have a look at the documentation.

 

  • Like 1

Share this post


Link to post
Share on other sites
On 23/02/2017 at 3:40 AM, adrian said:

I haven't used this module, so not sure about those red fields, but I think the likely correct fix for the operator not supported issue is to to define $allfields in the additional fields at around line 65.


protected $allFields = array();

 

I would not recommend doing this. 'allfields' is already declared in the moduleConfig file. If you set it in the module file again, this value will be overwritten and if you render the form all fields are gone. ^_^

@Arcturus

On 23/02/2017 at 6:01 PM, Arcturus said:

Unfortunately, it seems that a lot of functionality's been lost and with the gaping documentation gaps this isn't going to work for me.

Feel free to optimise the documentation! Fixes and suggestions are very welcome!
A lot has been changed since version 0.1.1. I think, this is the page you were looking for, but this is no longer relevant. Because the module now renders the form by itself and no template adaptions are needed any longer. Did you try to render the form (frontend)? If not, please do so. There are some migration functions in the module. If you still want to use this module, please post the input of the column data from table modules where column 'class' equals SimpleContactForm. Furthermore some additional informations would be really good (save messages enabled? fields which should be added, ..).

  • 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 daniels
      This is a lightweight alternative to other newsletter & newsletter-subscription modules.
      You can find the Module in the Modules directory and on Github
      It can subscribe, update, unsubscribe & delete a user in a list in Mailchimp with MailChimp API 3.0. It does not provide any forms or validation, so you can feel free to use your own. To protect your users, it does not save any user data in logs or sends them to an admin.
      This module fits your needs if you...
      ...use Mailchimp as your newsletter / email-automation tool ...want to let users subscribe to your newsletter on your website ...want to use your own form, validation and messages (with or without the wire forms) ...don't want any personal user data saved in any way in your ProcessWire environment (cf. EU data regulation terms) ...like to subscribe, update, unsubscribe or delete users to/from different lists ...like the Mailchimp UI for creating / sending / reviewing email campaigns *I have only tested it with PHP 7.x so far, so use on owners risk
      EDIT:
      I've updated the module to 0.0.3. I removed the instructions from this forum, so I don't have to maintain it on multiple places. Just checkout the readme on github 🙂
      If you have questions or like to contribute, just post a reply or create an issue or pr on github. 
    • By blynx
      Hej,
      A module which helps including Photoswipe and brings some modules for rendering gallery markup. Feedback highly appreciated
      (Also pull requests are appreciated 😉 - have a new Job now and don't work a lot with ProcessWire anymore, yet, feel free to contact me here or on GitHub, Im'm still "online"!)

      Modules directory: http://modules.processwire.com/modules/markup-processwire-photoswipe
      .zip download: https://github.com/blynx/MarkupProcesswirePhotoswipe/archive/master.zip
      You can add a photoswipe enabled thumbnail gallery / lightbox to your site like this. Just pass an image field to the renderGallery method:
      <?php $pwpswp = $modules->get('Pwpswp'); echo $pwpswp->renderGallery($page->nicePictures); Options are provided like so:
      <?php $galleryOptions = [ 'imageResizerOptions' => [ 'size' => '500x500' 'quality' => 70, 'upscaling' => false, 'cropping' => false ], 'loresResizerOptions' => [ 'size' => '500x500' 'quality' => 20, 'upscaling' => false, 'cropping' => false ], 'pswpOptions' => (object) [ 'shareEl' => false, 'indexIndicatorSep' => ' von ', 'closeOnScroll' => false ] ]; echo $pswp->renderGallery($page->images, $galleryOptions); More info about all that is in the readme: https://github.com/blynx/MarkupProcesswirePhotoswipe
      What do you think? Any ideas, bugs, critique, requests?
      cheers
      Steffen
    • By bernhard
      WHY?
      This module was built to fill the gap between simple $pages->find() operations and complex SQL queries.
      The problem with $pages->find() is that it loads all pages into memory and that can be a problem when querying multiple thousands of pages. Even $pages->findMany() loads all pages into memory and therefore is a lot slower than regular SQL.
      The problem with SQL on the other hand is, that the queries are quite complex to build. All fields are separate tables, some repeatable fields use multiple rows for their content that belong to only one single page, you always need to check for the page status (which is not necessary on regular find() operations and therefore nobody is used to that).
      In short: It is far too much work to efficiently and easily get an array of data based on PW pages and fields and I need that a lot for my RockGrid module to build all kinds of tabular data.

      Basic Usage

       
      Docs & Download
      https://gitlab.com/baumrock/RockFinder/tree/master
       
      Changelog
      180516 change sql query method, bump version to 1.0.0 180515 multilang bugfix 180513 beta release <180513 preview/discussion took place here: https://processwire.com/talk/topic/18983-rocksqlfinder-highly-efficient-and-flexible-sql-finder-module/
    • By flydev
      OAuth2Login for ProcessWire
      A Module which give you ability to login an existing user using your favorite thrid-party OAuth2 provider (i.e. Facebook, GitHub, Google, LinkedIn, etc.)..
      You can login from the backend to the backend directly or render a form on the frontend and redirect the user to a choosen page.
      Built on top of ThePhpLeague OAuth2-Client lib.
      Registration is not handled by this module but planned.
       
      Howto Install
      Install the module following this procedure:
       - http://modules.processwire.com/modules/oauth2-login/
       - https://github.com/flydev-fr/OAuth2Login
      Next step, in order to use a provider, you need to use Composer to install each provider
      ie: to install Google, open a terminal, go to your root directory of pw and type the following command-line: composer require league/oauth2-google
      Tested providers/packages :
          Google :  league/oauth2-google     Facebook: league/oauth2-facebook     Github: league/oauth2-github     LinkedIn: league/oauth2-linkedin
      More third-party providers are available there. You should be able to add a provider by simply adding it to the JSON config file.

      Howto Use It
      First (and for testing purpose), you should create a new user in ProcessWire that reflect your real OAuth2 account information. The important informations are, Last Name, First Name and Email. The module will compare existing users by firstname, lastname and email; If the user match the informations, then he is logged in.
      ie, if my Google fullname is John Wick, then in ProcessWire, I create a new user  Wick-John  with email  johnwick@mydomain.com
      Next step, go to your favorite provider and create an app in order to get the ClientId and ClientSecret keys. Ask on the forum if you have difficulties getting there.
      Once you got the keys for a provider, just paste it into the module settings and save it. One or more button should appear bellow the standard login form.
      The final step is to make your JSON configuration file.
      In this sample, the JSON config include all tested providers, you can of course edit it to suit your needs :
      { "providers": { "google": { "className": "Google", "packageName": "league/oauth2-google", "helpUrl": "https://console.developers.google.com/apis/credentials" }, "facebook": { "className": "Facebook", "packageName": "league/oauth2-facebook", "helpUrl": "https://developers.facebook.com/apps/", "options": { "graphApiVersion": "v2.10", "scope": "email" } }, "github": { "className": "Github", "packageName": "league/oauth2-github", "helpUrl": "https://github.com/settings/developers", "options": { "scope": "user:email" } }, "linkedin": { "className": "LinkedIn", "packageName": "league/oauth2-linkedin", "helpUrl": "https://www.linkedin.com/secure/developer" } } }  
      Backend Usage
      In ready.php, call the module :
      if($page->template == 'admin') { $oauth2mod = $modules->get('Oauth2Login'); if($oauth2mod) $oauth2mod->hookBackend(); }  
      Frontend Usage
      Small note: At this moment the render method is pretty simple. It output a InputfieldForm with InputfieldSubmit(s) into wrapped in a ul:li tag. Feedbacks and ideas welcome!
      For the following example, I created a page login and a template login which contain the following code :
      <?php namespace ProcessWire; if(!$user->isLoggedin()) { $options = array( 'buttonClass' => 'my_button_class', 'buttonValue' => 'Login with {provider}', // {{provider}} keyword 'prependMarkup' => '<div class="wrapper">', 'appendMarkup' => '</div>' ); $redirectUri = str_lreplace('//', '/', $config->urls->httpRoot . $page->url); $content = $modules->get('Oauth2Login')->config( array( 'redirect_uri' => $redirectUri, 'success_uri' => $page->url ) )->render($options); }
      The custom function lstr_replace() :
      /* * replace the last occurence of $search by $replace in $subject */ function str_lreplace($search, $replace, $subject) { return preg_replace('~(.*)' . preg_quote($search, '~') . '~', '$1' . $replace, $subject, 1); }  
      Screenshot
       



    • By gRegor
      Updated 2018-05-06:
      Version 2.0.0 released
      Updated 2017-03-27:
      Version 1.1.3 released
      Updated 2016-04-11:
      Version 1.1.2 released

      Updated 2016-02-26:
      Officially in the module directory! http://modules.processwire.com/modules/webmention/

      Updated 2016-02-25:
      Version 1.1.0 is now released. It's been submitted to the module directory so should appear there soon. In the meantime, it's available on GitHub: https://github.com/gRegorLove/ProcessWire-Webmention. Please refer to the updated README there and let me know if you have any questions!
      ------------
      Original post:
       
      This is now out of date. I recommend reading the official README.
       
      I've been working on this one for a while. It's not 100%, but it is to the point I'm using it on my own site, so it's time for me to release it in beta. Once I finish up some of the features described below, I will submit it to the modules directory as a stable plugin.
      For now, you can install from Github. It works on PW2.5. I haven't tested on PW2.6, but it should work there.
      Feedback and questions are welcome. I'm in the IRC channel #processwire as well as #indiewebcamp if you have any questions about this module, webmention, or microformats.
      Thanks to Ryan for the Comments Fieldtype which helped me a lot in the handling of webmentions in the admin area.
      ProcessWire Webmention Module
      Webmention is a simple way to automatically notify any URL when you link to it on your site. From the receiver's perspective, it is a way to request notification when other sites link to it.
      Version 1.0.0 is a stable beta that covers webmention sending, receiving, parsing, and display. An easy admin interface for received webmentions is under development, as well as support for the Webmention Vouch extension.
      Features
      * Webmention endpoint discovery
      * Automatically send webmentions asynchronously * Automatically receive webmentions * Process webmentions to extract microformats   Requirements * php-mf2 and php-mf2-cleaner libraries; bundled with this package and may optionally be updated using Composer. * This module hooks into the LazyCron module.   Installation Github: https://github.com/gRegorLove/ProcessWire-Webmention

      Installing the core module named "Webmention" will automatically install the Fieldtype and Inputfield modules included in this package.   This module will attempt to add a template and page named "Webmention Endpoint" if the template does not exist already. The default location of this endpoint is http://example.com/webmention-endpoint   After installing the module, create a new field of type "Webmentions" and add it to the template(s) you want to be able to support webmentions. Sending Webmentions
      When creating or editing a page that has the Webmentions field, a checkbox "Send Webmentions" will appear at the bottom. Check this box and any URLs linked in the page body will be queued up for sending webmentions. Note: you should only check the "Send Webmentions" box if the page status is "published."   Receiving Webmentions This module enables receiving webmentions on any pages that have have "Webmentions" field, by adding the webmention endpoint as an HTTP Link header. If you would like to specify a custom webmention endpoint URL, you can do so in the admin area, Modules > Webmention.   Processing Webmentions (beta) Currently no webmentions are automatically processed. You will need to browse to the page in the backend, click "Edit," and scroll to the Webmentions field. There is a dropdown for "Visibility" and "Action" beside each webmention. Select "Process" to parse the webmention for microformats.   A better interface for viewing/processing all received webmentions in one place is under development.   Displaying Webmentions (beta) Within your template file, you can use `$page->Webmentions->render()` [where "Webmentions" is the name you used creating the field] to display a list of approved webmentions. As with the Comments Fieldtype, you can also generate your own output.   The display functionality is also under development.   Logs This module writes two logs: webmentions-sent and webmentions-received.   Vouch The Vouch anti-spam extension is still under development.   IndieWeb The IndieWeb movement is about owning your data. It encourages you to create and publish on your own site and optionally syndicate to third-party sites. Webmention is one of the core building blocks of this movement.   Learn more and get involved by visiting http://indiewebcamp.com.   Further Reading * http://indiewebcamp.com/webmention * http://indiewebcamp.com/comments-presentation * http://indiewebcamp.com/reply