首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何扩展Silverstripe博客模块?

如何扩展Silverstripe博客模块?
EN

Stack Overflow用户
提问于 2018-02-19 00:26:45
回答 2查看 443关注 0票数 0

我正在为一个项目寻找一个使用Siverstripe的博客模块。这个博客有我想要的大部分功能,但是由于这个网站主要是以书为中心的,所以我想在blogpost表中添加一些字段来保存书籍数据(标题、作者、评分等)。这看起来应该比较简单,但我似乎无法让它发挥作用。我创建了以下扩展PHP文件:

代码语言:javascript
运行
复制
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文件中:

代码语言:javascript
运行
复制
SilverStripe\Blog\BlogPost:
  extensions:
    - SilverStripe\Blog\BookDataExtension

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

EN

回答 2

Stack Overflow用户

发布于 2018-02-19 07:49:50

您对BlogPost进行了子类化,而不是向其插入扩展,又名。扩展它..。

您的BlogPostExtension必须子类DataExtension;它可以位于您自己的命名空间中:

代码语言:javascript
运行
复制
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以添加您的扩展,就像以前一样:

代码语言:javascript
运行
复制
SilverStripe\Blog\BlogPost:
  extensions:
    - MyProject\Extensions\BookDataExtension
票数 1
EN

Stack Overflow用户

发布于 2018-09-04 16:10:15

试试这个:

代码语言:javascript
运行
复制
<?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/扩展名/

在您的配置中:

代码语言:javascript
运行
复制
SilverStripe\Blog\Model\BlogPost:
  extensions:
    - BookDataExtension
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48858116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档