Skip to content

Instantly share code, notes, and snippets.

@justb3a
Last active May 18, 2017 09:00
Show Gist options
  • Save justb3a/a17c7601e3e3d95859f1649143fd8ad3 to your computer and use it in GitHub Desktop.
Save justb3a/a17c7601e3e3d95859f1649143fd8ad3 to your computer and use it in GitHub Desktop.
processwire

Field general

$field->columnWidth = 50;
$field->required = 1;
$field->requiredIf = 'some=selector';
$field->description = $this->_('some description');
$field->notes = $this->_('some notes');
$field->class = 'additional-class';

Field Types (wip)

hidden

$field = $this->modules->get('InputfieldHidden');
$field->label = __('Some Label');
$field->attr('name+id','some_label');
$field->attr('value', 'some value');

submit

$submit = $this->modules->get('InputfieldSubmit');
$submit->name = 'submit';
$submit->attr('value', __('Send'));
$submit->attr('class', 'button');

select

$select = $this->modules->get('InputfieldSelect');
$selectType->name = 'select-name';
$selectType->addOption('B', $this->_('Option B'));
$selectType->addOption('A', $this->_('Option A'));
$selectType->value = 'B'; // if you want to set a predefined value

Form

$form = $this->modules->get('InputfieldForm');
$form->action = './';
$form->method = 'post';
$form->attr('id+name','newsletter');
$form->description = $this->_('Optionally set a description headline for the form');

// prepend, append markup
$form->prependMarkup = "<div>Some HTML</div>";
$form->appendMarkup = "<div>{$page->field}</div>";

// adapt classes and markup
$form->setMarkup($markup);
$form->setClasses($classes);

// @see: https://github.com/ryancramerdesign/ProcessWire/blob/master/wire/core/InputfieldWrapper.php#L34
$markup' => array(
  'InputfieldSelect' => array(
    'item' => "{out}"
  )
);

$classes' => array(
  'form' => 'form  form__super-special-class',
  'InputfieldRadios' => array(
    'item' => 'form__item--options'
  )
);

Form add fields and render form

// create and append fields
$form->append($field);

// or create fieldset and add fields there
$fieldset = $this->modules->get('InputfieldFieldset');
$fieldset->label = 'Some Label';
$fieldset->add($field);
$form->append($fieldset);

$form->render();

Process Form

$form->processInput($this->input->post);

// add additional error checks
// email unique
$email = $form->get('email');
$unique = $this->users->get("email=$email");
if ($unique->count() > 0) $email->error(__('This email address is already registered.'));

if ($form->getErrors()) {
  // the form contains errors
  return $form->render();
} else {
  // do with the form what you like, create and save it as page
  // or send emails. to get the values you can use
  // $email = $form->get("email")->value;
 
  // to sanitize input
  // $email = $sanitizer->email($form->get("email")->value);

  return "<p>You submission was completed! Thanks for your time.";
}
<?php
// build form
$form = wire('modules')->get('InputfieldForm');
$form->action = './';
$form->method = 'post';
$form->attr('enctype', 'multipart/form-data');
$field = wire('modules')->get('InputfieldFile');
$field->extensions = 'xml';
$field->maxFiles = 1;
$field->descriptionRows = 0;
$field->overwrite = true;
$field->attr('id+name', 'xmlfile');
$field->label = __('XML File');
$field->description = __('Upload a XML file.');
$form->add($field);
$form->add($wrapper);
$submit = wire('modules')->get('InputfieldSubmit');
$submit->name = 'uploadSubmit';
$submit->value = __('Submit');
$form->add($submit);
$output = $form->render;
// upload file
if ($this->input->post->uploadSubmit) {
// create upload directory if it isn't there already
$uploadDir = wire('config')->paths->assets . 'files/' . $this->page->id . '/';
if (!is_dir($uploadDir)) {
if (!wireMkdir($uploadDir)) throw new WireException("No upload path!");
}
// new WireUpload
$ul = new WireUpload('xmlfile');
$ul->setValidExtensions(array('xml'));
$ul->setMaxFiles(1);
$ul->setOverwrite(true);
$ul->setDestinationPath($uploadDir);
$ul->setExtractArchives(false);
$ul->setLowercase(false);
$files = $ul->execute();
}

core

  • Reno - change admin theme in user profile
  • Language Support
  • Page Title (Multi-Language)
  • Text (Multi-language)
  • Textarea (Multi-language)
  • Page List (already installed) check "use bookmarks" to get page tree
  • Repeater
  • System Notifications
  • ProFields: Page Table

third-party

  • ImageExtra (additional fields like caption)
  • SimpleContactForm (contact forms)
  • Admin Help (create inline documentation)
  • Alternative grid for multiple images
  • Language Translator Twig Support
  • Template Twig Replace // @todo: Template Engine Factory
  • Template Twig Replace Language Support
  • SEO
  • Markup Sitemap XML
  • Access Overview
  • Template Data Providers
  • Protected Mode
  • TracyDebugger
<?php // ProcessWire 2.x
$this->addHookBefore('SimpleContactForm::validateFields', $this, 'adaptRequiredFields');
// $this->addHookAfter('SimpleContactForm::validateFields', $this, 'extendRequiredFields');
/**
* Hook adapt required fields
*
* @param HookEvent $event
*/
public function adaptRequiredFields(HookEvent $event) {
// validate additional fields IF ..
if ((int)$this->input->post->subject > 1) {
$requiredFields = $event->object->data['requiredFields'];
// remove field
$key = array_search('message', $requiredFields);
unset($requiredFields[$key]);
// add fields
$requiredFields[] = 'description';
$requiredFields[] = 'fax';
$event->object->data['requiredFields'] = $requiredFields;
}
}
/**
* Hook
*
* @param HookEvent $event
*/
public function extendRequiredFields(HookEvent $event) {
$error = $event->return;
// no errors AND not basic form? validate additional fields
if (!$error && (int)$this->input->post->subject > 1) {
$parent = (object)$event->object->data;
$log = array();
foreach (array('description', 'fax') as $field) {
$value = $this->sanitizer->text($this->input->post->$field);
if (empty($value)) {
$log[] = "Field $field should not be blank.";
$error = true;
}
}
if (!empty($log)) $parent->log->save('[FAILURE] ' . implode(', ', $log));
}
$event->return = $error;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment