I have added a feedback form to article pages:
In template:
<?php if ($form->success()): ?>
<div class="uk-alert-success" uk-alert>
<a class="uk-alert-close" uk-close></a>
<p>Thank you for your message.</p>
</div>
<?php elseif ($form->error()): ?>
<div class="uk-alert-danger" uk-alert>
<a class="uk-alert-close" uk-close></a>
<?php snippet('uniform/errors', ['form' => $form]) ?>
</div>
<?php endif; ?>
<div class="reply uk-margin-medium-top border-top padding-top">
<h3 class="uk-margin-medium-bottom">Feedback</h3>
<form class="uk-grid-small" action="<?= $page->url() ?>" method="POST" uk-grid>
<div class="uk-width-1-1">
<textarea<?php if ($form->error('message')): ?> class="uk-textarea error"<?php endif; ?> name="message" class="uk-textarea" rows="5" placeholder="Feedback"><?= $form->old('message') ?></textarea>
</div>
<?= csrf_field() ?>
<?= honeypot_field() ?>
<div class="uk-width-1-1">
<button class="uk-button uk-button-primary uk-width-1-1 uk-width-auto@s" type="submit" value="Submit">Submit</button>
</div>
</form>
</div>
In controller:
<?php
use Uniform\Form;
return function($site, $pages, $page) {
$form = new Form([
'message' => [
'rules' => ['required'],
'message' => 'Please enter a message',
],
]);
if (r::is('POST')) {
$form->emailAction([
'to' => 'macgyver@example.com',
'from' => 'feedback@domain.ltd',
'subject' => 'New feedback',
]);
}
// get an array of the tags of the current page
$tags = $page->tags()->split(',');
// filter the pages with a filter with callback
$relatedPages = $page->siblings(false)->visible()->filter(function($related) use($tags) {
if(array_intersect($related->tags()->split(','), $tags)) {
return $related;
}
});
// fetch list of kits
$kits = $page->assemblies()->toStructure();
return compact('form', 'relatedPages', 'kits');
};
I need to know which page the feedback came from. How can I add the page title and url to the email body?
Thanks