如何扩展Silverstripe Blog模块?

时间:2018-02-19 00:26:46

标签: silverstripe-4

我正在寻找一个使用Siverstripe博客模块的项目。该博客具有我想要的大多数功能,但由于该网站主要是以图书为中心,我想在博客文章表中添加一些字段来保存图书数据(标题,作者,评级等)。看起来这应该相对简单但是我似乎无法让它工作。我已经创建了以下扩展PHP文件:

namespace SilverStripe\Blog\Model;

use SilverStripe\Blog\Model\BlogPost;
use SilverStripe\ORM\DataExtension;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\TextareaField;

class BookDataExtension extends BlogPost
{

    private static $db = [
        'bookTitle' => 'Varchar',
        'bookAuthor' => 'Varchar',
        'bookSeries' => 'Varchar',
        'bookISBN' => 'Varchar',
        'bookSeriesNum' => 'Int',
        'bookRating' => 'Decimal',
        'bookCover' => 'Varchar'
    ];

}

并将以下内容添加到mysite.yml文件中:

SilverStripe\Blog\BlogPost:
  extensions:
    - SilverStripe\Blog\BookDataExtension

我还尝试将上面的内容添加到config.yml文件中以供博客模块本身使用。但是,无论我尝试什么,当我重建系统时,它会为BookDataExtension创建 new 表,而不是将字段添加到BlogPost表中。我做错了什么?

2 个答案:

答案 0 :(得分:1)

你已经将T子类化,而不是插入一个扩展名,也就是说。扩展它...

您的BlogPost必须继承BlogPostExtension;它可以在你自己的命名空间中:

DataExtension

然后,您可以像以前一样配置namespace MyProject\Extensions; use SilverStripe\ORM\DataExtension; class BookDataExtension extends DataExtension { private static $db = [ 'bookTitle' => 'Varchar', 'bookAuthor' => 'Varchar', 'bookSeries' => 'Varchar', 'bookISBN' => 'Varchar', 'bookSeriesNum' => 'Int', 'bookRating' => 'Decimal', 'bookCover' => 'Varchar' ]; } 添加扩展程序:

BlogPost

答案 1 :(得分:0)

尝试一下:

<?php

namespace {

    use SilverStripe\ORM\DataExtension;
    use SilverStripe\Forms\FieldList;

    class BookDataExtension extends DataExtension {

        private static $db = [
            'db_field_example' => 'Varchar'
        ];

        public function updateCMSFields(FieldList $fields) {
            // Add fields here
        }

    }

}

将扩展程序添加到app / src / extensions /

并在您的配置中:

SilverStripe\Blog\Model\BlogPost:
  extensions:
    - BookDataExtension