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 %>