diff --git a/_config/config.yml b/_config/config.yml index e4fb5e0..e806238 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: silverstripe/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..80128d8 --- /dev/null +++ b/src/Model/BlogPostFeaturedExtension.php @@ -0,0 +1,32 @@ + 'Boolean', + ]; + + /** + * {@inheritdoc} + */ + public function updateCMSFields(FieldList $fields) + { + // Add the checkbox in. + $fields->addFieldToTab( + 'Root.PostOptions', + CheckboxField::create('FeaturedInWidget', _t(__CLASS__ . '.FEATURED', 'Include Post in Feature Widget')) + ); + } +} 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/templates/SilverStripe/Blog/Widgets/BlogFeaturedPostsWidget.ss b/templates/SilverStripe/Blog/Widgets/BlogFeaturedPostsWidget.ss new file mode 100644 index 0000000..e195ad6 --- /dev/null +++ b/templates/SilverStripe/Blog/Widgets/BlogFeaturedPostsWidget.ss @@ -0,0 +1,12 @@ +<% if $Posts %> + +<% end_if %>