【问题标题】:Silverstripe 4 - SiteConfig module Image not working in templateSilverstripe 4 - SiteConfig 模块图像在模板中不起作用
【发布时间】:2020-04-02 00:36:31
【问题描述】:

我似乎根本无法让 Silverstripe 4 在我的模板中显示 SiteConfig 中包含的图像。我过去只能执行 $SiteConfig.Logo 之类的操作,它会打印出一个自动标签。

自定义站点配置:

<?php
use SilverStripe\Forms\FieldList;
use SilverStripe\ORM\DataExtension;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\TextareaField;
use SilverStripe\Forms\HeaderField;
use SilverStripe\AssetAdmin\Forms\UploadField;
use SilverStripe\Assets\Image;

use SilverStripe\ORM\DataObject;
use SilverStripe\CMS\Model\SiteTree;


class CustomSiteConfig extends DataExtension
{

    private static $db = [

    ];

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

    private static $owns = [
        'Logo',
        "MobileLogo"
    ];

    public function updateCMSFields(FieldList $fields)
    {

        $uploader = UploadField::create('Logo');
        $uploader->setFolderName('Logo');
        $uploader->getValidator()->setAllowedExtensions(['png','gif','jpeg','jpg']);

        $fields->addFieldsToTab('Root.Main', [
            HeaderField::create('hf2','Default logo'),
            $uploader
        ]);

        $uploader2 = UploadField::create('MobileLogo');
        $uploader2->setFolderName('MobileLogo');
        $uploader2->getValidator()->setAllowedExtensions(['png','gif','jpeg','jpg']);

        $fields->addFieldsToTab('Root.Main', [
            HeaderField::create('hf3','Mobile Logo'),
            $uploader2
        ]);


    }
}

但是当我在我的模板文件中尝试时。我没有网址

$SiteConfig.Logo
or
$SiteConfig.Logo().Link
etc

没有任何效果?

【问题讨论】:

    标签: image url silverstripe


    【解决方案1】:

    需要检查的几件事:

    • 验证 $SiteConfig 在您的模板中作为变量可用(尝试使用 $SiteConfig.Title)
    • 验证扩展是否实际添加到 SiteConfig(您是否看到 CMS 字段?)
    • 您后来添加了 $owns 吗?再次运行 ?flush=1 并重新保存 SiteConfig *
    • 验证 SiteConfig 和文件是否已发布。 (保存并发布 SiteConfig 两次,然后在文件管理器中检查文件是否已发布)**

    [*] $owns 只是一个指令,当 SiteConfig->doPublish() 被调用时,它也会发布所有文件
    [**] 我看到了一个错误,即 DataObjects 有时实际上并不发布文件。保存两次可能有效。

    【讨论】:

      【解决方案2】:

      就像 Zauberfisch 所说,您的图片可能没有发布。但是,在写入所有者之后发布图像可能会很棘手。

      我通常在这段代码中通过

      public function onAfterWrite()
      {
          parent::onAfterWrite();
      
          if ( $this->LogoID ) {
              $this->Logo()->doPublish();
          }
          if ( $this->MobileLogoID ) {
              $this-> MobileLogo()->doPublish();
          }
      
      }
      

      我知道这很麻烦,但它可以为您节省几个小时。保存后,您可以将其删除,因为 $owns 挂钩将开始作用于所有新创建的对象。

      【讨论】:

        【解决方案3】:

        我们可以用这个

        $SiteConfig.Logo.URL

        【讨论】:

          猜你喜欢
          • 2012-05-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多