From fdeb1018829678868643bf938792f779eaf9a13b Mon Sep 17 00:00:00 2001 From: Peter Thaleikis Date: Wed, 10 Apr 2019 20:31:25 +0700 Subject: [PATCH 1/3] MINOR: implementing featured blog posts as a widget --- _config/config.yml | 9 ++ src/Model/BlogPostFeaturedExtension.php | 34 +++++++ src/Widgets/BlogFeaturedPostsWidget.php | 93 +++++++++++++++++++ .../BlogFeaturedPostsWidgetController.php | 14 +++ .../Blog/Widgets/BlogFeaturedPostsWidget.ss | 12 +++ 5 files changed, 162 insertions(+) create mode 100644 src/Model/BlogPostFeaturedExtension.php create mode 100644 src/Widgets/BlogFeaturedPostsWidget.php create mode 100644 src/Widgets/BlogFeaturedPostsWidgetController.php create mode 100644 templates/SilverStripe/Blog/Widgets/BlogFeaturedPostsWidget.ss diff --git a/_config/config.yml b/_config/config.yml index e4fb5e0..af4fd71 100755 --- a/_config/config.yml +++ b/_config/config.yml @@ -4,3 +4,12 @@ Name: blogconfig SilverStripe\Security\Member: extensions: - SilverStripe\Blog\Model\BlogMemberExtension + +--- +Name: featuredpostswidget +Only: + moduleexists: widgets +--- +SilverStripe\Blog\Model\BlogPost: + extensions: + - SilverStripe\Blog\Model\BlogPostFeaturedExtension diff --git a/src/Model/BlogPostFeaturedExtension.php b/src/Model/BlogPostFeaturedExtension.php new file mode 100644 index 0000000..d02ff17 --- /dev/null +++ b/src/Model/BlogPostFeaturedExtension.php @@ -0,0 +1,34 @@ + 'Boolean', + ]; + + /** + * {@inheritdoc} + */ + public function updateCMSFields(FieldList $fields) + { + // Add the checkbox in. + $fields->addFieldToTab( + 'Root.PostOptions', + new CheckboxField("FeaturedInWidget", _t(__CLASS__ . '.FEATURED', 'Include Post in Feature Widget')) + ); + + return $fields; + } +} diff --git a/src/Widgets/BlogFeaturedPostsWidget.php b/src/Widgets/BlogFeaturedPostsWidget.php new file mode 100644 index 0000000..32bdc54 --- /dev/null +++ b/src/Widgets/BlogFeaturedPostsWidget.php @@ -0,0 +1,93 @@ + 'Int', + ]; + + /** + * @var array + */ + private static $has_one = [ + 'Blog' => Blog::class, + ]; + + /** + * @var string + */ + private static $table_name = 'BlogFeaturedPostsWidget'; + + /** + * {@inheritdoc} + */ + public function getCMSFields() + { + $this->beforeUpdateCMSFields(function ($fields) { + /** + * @var FieldList $fields + */ + $fields->merge([ + DropdownField::create('BlogID', _t(__CLASS__ . '.Blog', 'Blog'), Blog::get()->map()), + NumericField::create('NumberOfPosts', _t(__CLASS__ . '.NumberOfPosts', 'Number of Posts')) + ]); + }); + + return parent::getCMSFields(); + } + + /** + * @return array|DataList + */ + public function getPosts() + { + $blog = $this->Blog(); + + if ($blog) { + return $blog->getBlogPosts() + ->filter('ID:not', Director::get_current_page()->ID) + ->filter('FeaturedInWidget', true) + ->sort('RAND()') + ->limit($this->NumberOfPosts); + } + + return []; + } +} diff --git a/src/Widgets/BlogFeaturedPostsWidgetController.php b/src/Widgets/BlogFeaturedPostsWidgetController.php new file mode 100644 index 0000000..a2ebff0 --- /dev/null +++ b/src/Widgets/BlogFeaturedPostsWidgetController.php @@ -0,0 +1,14 @@ + + +<% end_if %> From c8914cc779e9efa4eff7205b6232e990a41026ae Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Fri, 12 Apr 2019 10:35:41 +0700 Subject: [PATCH 2/3] Update src/Model/BlogPostFeaturedExtension.php Co-Authored-By: spekulatius --- src/Model/BlogPostFeaturedExtension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/BlogPostFeaturedExtension.php b/src/Model/BlogPostFeaturedExtension.php index d02ff17..c49b891 100644 --- a/src/Model/BlogPostFeaturedExtension.php +++ b/src/Model/BlogPostFeaturedExtension.php @@ -26,7 +26,7 @@ class BlogPostFeaturedExtension extends DataExtension // Add the checkbox in. $fields->addFieldToTab( 'Root.PostOptions', - new CheckboxField("FeaturedInWidget", _t(__CLASS__ . '.FEATURED', 'Include Post in Feature Widget')) + CheckboxField::create('FeaturedInWidget', _t(__CLASS__ . '.FEATURED', 'Include Post in Feature Widget')) ); return $fields; From afecae4eba27faf784caa152291695992985c442 Mon Sep 17 00:00:00 2001 From: Peter Thaleikis Date: Fri, 12 Apr 2019 10:44:32 +0700 Subject: [PATCH 3/3] MINOR: tweaking implementation --- _config/config.yml | 2 +- src/Model/BlogPostFeaturedExtension.php | 2 -- src/Widgets/BlogFeaturedPostsWidgetController.php | 14 -------------- 3 files changed, 1 insertion(+), 17 deletions(-) delete mode 100644 src/Widgets/BlogFeaturedPostsWidgetController.php diff --git a/_config/config.yml b/_config/config.yml index af4fd71..e806238 100755 --- a/_config/config.yml +++ b/_config/config.yml @@ -8,7 +8,7 @@ SilverStripe\Security\Member: --- Name: featuredpostswidget Only: - moduleexists: widgets + moduleexists: silverstripe/widgets --- SilverStripe\Blog\Model\BlogPost: extensions: diff --git a/src/Model/BlogPostFeaturedExtension.php b/src/Model/BlogPostFeaturedExtension.php index c49b891..80128d8 100644 --- a/src/Model/BlogPostFeaturedExtension.php +++ b/src/Model/BlogPostFeaturedExtension.php @@ -28,7 +28,5 @@ class BlogPostFeaturedExtension extends DataExtension 'Root.PostOptions', CheckboxField::create('FeaturedInWidget', _t(__CLASS__ . '.FEATURED', 'Include Post in Feature Widget')) ); - - return $fields; } } diff --git a/src/Widgets/BlogFeaturedPostsWidgetController.php b/src/Widgets/BlogFeaturedPostsWidgetController.php deleted file mode 100644 index a2ebff0..0000000 --- a/src/Widgets/BlogFeaturedPostsWidgetController.php +++ /dev/null @@ -1,14 +0,0 @@ -