标签: silverstripe-4

如何自动发布上传到Silverstripe模型管理员中的数据对象的文件

在Silverstripe 4中,上传的文件必须先发布,然后才能对网站的公共方面显示.

如果我使用$ has_one Image :: Class创建$ Page,然后将该图像分配给$ owns [],则在我发布页面时将发布上传的图像.

但是,如果我创建以下数据对象结构,它将不会.

Class Item extends DataObject{
    $has_one[
        'ItemImage'=>Image::Class,
        'Catalog'=>'Catalog'
    ];

    $owns[
        'ItemImage'
    ]
}

Class Catalog extend DataObject{
    $has_many[
        'Items'=>'Item'
    ]
    $owns[
        'Items'
    ]

    public function getCMSFields(){
        $fields = parent::getCMSFields();

        $fields->addFieldToTab('Root.Items', GridField::create('Items', 'Items', $this->Items(), GridFieldConfig_RecordEditor::create()));

        return $fields;

    }
}
Run Code Online (Sandbox Code Playgroud)

如果我创建了一个目录,并在其中创建带有图像的项目然后保存它,它将不会发布上传的图像.我将不得不手动:1.选择图像2.编辑原始3.发布

必须有一种更简单的方式为用户.

silverstripe silverstripe-4

6
推荐指数
2
解决办法
670
查看次数

Silverstripe table_name未设置为类

我刚刚学习SilverStripe,实际上我遇到了silverstripe网站课程的问题.

我有这门课:

namespace SilverStripe\Lessons;

use Page;

class ArticlePage extends Page
{
    private static $can_be_root = false;
    private static $db = [
        'Date' => 'Date',
        'Teaser' => 'Text',
        'Author' => 'Varchar(255)',
    ];

//    public function getCMSFields(){
//        $fields = parent::getCMSFields();
//        $fields = addFieldToTab();
//        return $fields;
//    }

}
Run Code Online (Sandbox Code Playgroud)

现在当我/ dev/build我在构建页面上得到这个反馈: 在此输入图像描述

所以我接下来做的是实际注释掉$ db数组的声明.然后我从dev/build获得了这个反馈:

在此输入图像描述

所以我不确定的一些事情.dev/build的第一个输出中的红色注释表明您应该为所有命名空间模型定义table_name.它确实没有声明我有一个未定义的table_name.但是它下面的下一个注释表示没有为类SilverStripe\Lessons\ArticlePage设置table_name.那么定义一个table_name并在这些消息的上下文中"设置"table_name是一回事吗?

此外,第二个输出表明为SilverStripe\Lessons\ArticlePage定义了table_name事实上每个table_name都附加了"2",这是我在开始这篇文章之前进行实验的结果.即,一旦我看到这种行为,我重复实验尝试重现行为,因此创建和删除了更多的表,因此他们的名字必须递增.那么为什么没有设置ArticlePage table_name?有人可以帮我解决这个问题吗?戴夫.

php silverstripe silverstripe-4

5
推荐指数
1
解决办法
479
查看次数

Silverstripe 4模板上的$ Date.Format

我在数据库中有一个日期,格式为"YY-mm-dd".在模板上,我希望它采用以下格式:dd.mm.YY通常它可以使用$ date.Format('dmY')但不适用于Silverstripe 4.它从2018-05-08转换为8.0.2018.只有一年是正确的.有变化吗?我没有在文档中找到任何内容

date date-format silverstripe silverstripe-4

5
推荐指数
1
解决办法
2283
查看次数

Silverstripe 4 - CSS 和 JS 要求。如何/什么填充 /resources 目录?

我有一个 SS3.x 模块,我已经分叉了,通过 Composer 从它的分叉中拉下来,并开始移植到 SS4。到目前为止一切顺利,除了需求方面。

我正在使用另一个模块中现有代码中的需求格式,该格式具有如下冒号分隔格式:

Requirements::javascript('company/mymodule:javascript/SortableUploadField.js');
Run Code Online (Sandbox Code Playgroud)

此文件位于 /vendor/company/mymodule/javascript/SortableUploadField.js 的模块中。但是在页面加载时,我在控制台中有一个 404,因为 SS 正在 /resources/company/mymodule/css/SortableUploadField.css 中查找此文件。而这并不存在。

当我看到其他模块这样做时,我将以下内容添加到模块的 composer.json 文件中:

"extra": {
    "installer-name": "sortableuploadfield",
    "expose": [
        "css",
        "javascript"
    ]
},
Run Code Online (Sandbox Code Playgroud)

并运行作曲家更新。但是 /resources 目录没有出现在这个模块中(其他模块在那里)。而且我在网上找不到任何关于它应该如何工作的信息。

编辑:作为旁注,我想知道需求文档是否具有误导性?它完全忽略了模块和资源目录的警告。如果该文档只是为了传达在正常 mysite 开发中使用 JS/CSS 的过程,那么它只是有点令人困惑,因为代码无处不在。这肯定不是 /vendor 中某些内容的直接 URL。

silverstripe silverstripe-4

4
推荐指数
1
解决办法
728
查看次数

如何在silverstripe dataextension中自动发布图像

我试图将一个uploadfield添加到Custom DataExtension并使Image字段工作.然而,我上传的图像保持在概念模式,我必须转到文件选项卡发布它.我尝试使用Silverstripe文档中提供的代码,但这似乎只适用于常规页面.我发现了一个类似于我的问题:如何自动发布上传到Silverstripe模型管理员 中的数据对象的文件,但这似乎只适用于DataObjects.

这是我目前的代码:

<?php
use SilverStripe\Forms\LiteralField;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
use SilverStripe\AssetAdmin\Forms\UploadField;
use SilverStripe\Assets\Image;
use SilverStripe\Assets\Storage\AssetStore;
use SilverStripe\Versioned\Versioned;
use SilverStripe\ORM\DataExtension;

class CustomSiteConfig extends DataExtension 
{   
    private static $db = [          
    ];      

    private static $has_one = [
        'Logo' => Image::class
    ];  

    private static $owns = [
        'Logo'
    ];  

    private static $extensions = [
        Versioned::class,
    ];  

    private static $versioned_gridfield_extensions = true;  

    public function updateCMSFields(FieldList $fields) 
    {
        $fields->addFieldToTab("Root.Header", LiteralField::create("","<h1>Header</h1>"));                  
        $fields->addFieldToTab("Root.Header", UploadField::create('Logo', 'Logo'));                     
    }       
}
Run Code Online (Sandbox Code Playgroud)

有谁知道解决方案?

php silverstripe silverstripe-4

3
推荐指数
1
解决办法
494
查看次数

Silverstripe 4 - 访问核心方法

在Silverstripe 3中,eveything按需自动加载.这意味着人们可以知道他们想要使用的类和方法.例:

Debug::dump('dump message');
Run Code Online (Sandbox Code Playgroud)

如果我正确理解SS4的概念,则需要将类导入到您要使用方法(或属性)的文件中.在上面的示例中,需要在文件顶部执行以下操作

use /name/space/to/Debug
Debug::dump('dump message');
Run Code Online (Sandbox Code Playgroud)

这种理解是否正确?如果是这样,我真正的问题是开发人员如何有效地知道核心中所有内容的准确位置?他们是否希望知道这些核心文件在系统中的确切位置,以及您希望使用的名称和方法?有没有工具或方法可以帮助解决这个问题?

php silverstripe silverstripe-4

2
推荐指数
1
解决办法
48
查看次数

Silverstripe 4错误日志

如何将错误记录到SilverStripe 4中的文件日志?我是指从SS导致"内部服务器错误"信息的所有错误

在SilverStripe中它是:

SS_Log::add_writer(new SS_LogFileWriter('/var/log/silverstripe/errors.log'), SS_Log::ERR);
Run Code Online (Sandbox Code Playgroud)

文档说我需要做类似的事情:

SilverStripe\Core\Injector\Injector:
  Psr\Log\LoggerInterface: 
    calls:
      LogFileHandler: [ pushHandler, [ %$LogFileHandler ] ]
  LogFileHandler:
    class: Monolog\Handler\StreamHandler
    constructor:
      - "../silverstripe.log"
      - "info"
Run Code Online (Sandbox Code Playgroud)

我试试这个,但不能让这个工作:(

silverstripe-4

2
推荐指数
1
解决办法
821
查看次数

我无法删除Silverstripe中$ has_one的默认下拉列表

我试过:removeFieldFromTab removeByName replaceField

但该领域仍然存在.

use SilverStripe\ORM\DataObject;
use //.....

class Product extends DataObject {
    private static $db = [
        'ProductName'=>'Varchar',
        'TagLine'=>'Text',
        'GeneralDescription'=>'HTMLText'

    ];
    private static $has_one = [
        'SplashImage'=>Image::Class,
        'ProductCategory'=>ProductCategory::Class
    ];
    private static $has_many = [
        'ProductImage'=>Image::Class,
        'Features'=>'Feature'
    ];
    private static $owns = [
        'SplashImage',
        'ProductImage'
    ];
    private static $summary_fields = array(
        'ProductName'=>'Product Name'
    );   
    private static $searchable_fields = [

    ];
    public function getCMSFields(){
        $fields = parent::getCMSFields();            

        $categoryField = DropdownField::create('ProductCategory', 'Choose Product Category', ProductCategory::get()->map('ID', 'ProductCategoryTitle'));            

        $fields->replaceField('ProductCategory', $categoryField);

        return $fields;     
    }
} …
Run Code Online (Sandbox Code Playgroud)

silverstripe silverstripe-4

1
推荐指数
1
解决办法
161
查看次数

SilverStripe 4:数据库配置在哪里?

我一直在阅读有关此文档的文档,但完全感到困惑。安装后,我的mysite / _config.php文件为空。在哪里可以找到该站点的数据库设置,例如用户名,数据库名称和密码?

此处的文档页面:https : //docs.silverstripe.org/en/4/changelogs/4.0.0/#env

php database config silverstripe silverstripe-4

1
推荐指数
1
解决办法
981
查看次数

Silverstripe ModelAdmin 拖放可排序

我想让我的 ModelAdmin GridField 可以通过拖放进行排序。我尝试添加此代码:

$gridFieldName = 'Destributors';
    $gridField = $form->Fields()->fieldByName($gridFieldName);

    if ($gridField) {
        $gridField->getConfig()->addComponent(new GridFieldFilterHeader(),new GridFieldSortableRows('SortOrder'));
    }
Run Code Online (Sandbox Code Playgroud)

但似乎不起作用。关于如何实施它有什么想法吗?

任何帮助将不胜感激

php silverstripe silverstripe-4

1
推荐指数
1
解决办法
590
查看次数

Silverstripe v4 MVC目录?

我想知道为什么SS4主目录中没有"模型/视图/控制器"目录?似乎一切都应该进入"mysite/code"......如何实现MVC风格?

silverstripe silverstripe-4

0
推荐指数
1
解决办法
64
查看次数

Silverstripe 不使用 HomePage.ss 作为 Chrome 吗?

您好,我遵循了 Silverstripe 课程https://www.silverstripe.org/learn/lessons/v4/working-with-multiple-templates-1,甚至尝试从存储库下载代码,但是当我尝试创建 templates/HomePage 时.ss 作为 chrome Silverstripe 仍然使用 Page.ss。显然,课程说“它首先在主模板/目录中查找该页面的镶边。如果在那里找到 HomePage.ss,它将选择它作为您的镶边。” 缺什么?

silverstripe silverstripe-4

-2
推荐指数
1
解决办法
208
查看次数

标签 统计

silverstripe-4 ×12

silverstripe ×11

php ×5

config ×1

database ×1

date ×1

date-format ×1