From f45b1255b9d089afc76b4408139f8d315c76729c Mon Sep 17 00:00:00 2001 From: Bobby Snow Date: Wed, 21 Dec 2022 14:10:24 -0500 Subject: [PATCH] Added Shortcode method (#35) (#36) * Added Shortcode method - Added shortcode method to allow for shortcodes in editors to show the newsletter form Co-authored-by: SnowB1 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: SnowB1 --- _config.php | 3 +++ src/NewsletterPageExtender.php | 4 ++++ src/NewsletterShortcodeProvider.php | 34 +++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 src/NewsletterShortcodeProvider.php diff --git a/_config.php b/_config.php index 0d2cd16..770b45d 100644 --- a/_config.php +++ b/_config.php @@ -5,7 +5,10 @@ use Page; use PageController; use SilverStripe\SiteConfig\SiteConfig; +use SilverStripe\View\Parsers\ShortcodeParser; SiteConfig::add_extension(NewsletterSettings::class); Page::add_extension(NewsletterPageExtender::class); PageController::add_extension(NewsletterPageControllerExtender::class); + +ShortcodeParser::get('default')->register('newsletterform', [NewsletterShortcodeProvider::class, 'handle_shortcode']); diff --git a/src/NewsletterPageExtender.php b/src/NewsletterPageExtender.php index 74390b1..8a582d1 100644 --- a/src/NewsletterPageExtender.php +++ b/src/NewsletterPageExtender.php @@ -22,6 +22,10 @@ class NewsletterPageExtender extends DataExtension "NewsletterShowHide" => true, ]; + private static $casting = [ + 'NewsletterShortcode' => 'HTMLText' + ]; + public function populateDefaults() { $this->owner->NewsletterShowHide = true; diff --git a/src/NewsletterShortcodeProvider.php b/src/NewsletterShortcodeProvider.php new file mode 100644 index 0000000..7044dff --- /dev/null +++ b/src/NewsletterShortcodeProvider.php @@ -0,0 +1,34 @@ +parse($content); + } + // If class add wrapper div + if (isset($arguments['class'])){ + $PopupContent .= '
'; + } + // Get Form HTML + $PopupContent .= Controller::curr()->NewsletterForm() + ->setHTMLID("NewsletterForm".rand(0,100)) + ->setFormAction(Controller::join_links(Controller::curr()->owner->Link(), 'NewsletterForm')) + ->forTemplate(); + // End wrapper div + if (isset($arguments['class'])){ + $PopupContent .= '
'; + } + // Return full html + return $PopupContent; + } +}