Silverstripe 4 Изображение логотипа SiteConfig не отображалось в шаблоне - PullRequest
0 голосов
/ 26 июня 2018

Я создаю настраиваемое поле для загрузки логотипа в SiteConfig и после загрузки логотипа в Settings и пытаюсь отобразить его в шаблоне .ss. После рендеринга ничего не было показано в шаблоне. Этот код я использую в Silverstripe v3 и все работает хорошо. Сейчас в v4 не работает.

Вот мой Extension:

class SiteConfigExtension extends \SilverStripe\ORM\DataExtension
{
    private static $db = array (
        'FacebookLink' => 'Varchar',
        'TwitterLink' => 'Varchar',
        'GoogleLink' => 'Varchar',
    );

    private static $has_one = array(
        'Logo' => Image::class,
        'DefaultImage' => Image::class
    );

    public function updateCMSFields(FieldList $fields)
    {
        parent::updateCMSFields($fields);


        $fields->addFieldsToTab('Root.Social', array (
            TextField::create('FacebookLink','Facebook'),
            TextField::create('TwitterLink','Twitter'),
            TextField::create('GoogleLink','Google'),
        ));

        $fields->addFieldsToTab('Root.Main', array(
            $logo = UploadField::create('Logo', 'Logo'),
            $defaultImage = UploadField::create('DefaultImage', 'Default Image'),
        ));

        $logo->setFolderName('Logo');
        $defaultImage->setFolderName("Settings");
    }
}

Вот мой файл шаблона header.ss:

    <% with $SiteConfig %>
                    <div style="display: inline-block;">
                    <div style="float: left;">
                        <h1 id="logo">
                            <% if $Logo %>
                                <a>$Logo.SetWidth(50)</a>
                            <% end_if %>
                        </h1>
                    </div>
                    <div id="logo-tagline" style="float:left;">
                        <% if $Title %>
                            <h1>$Title</h1>
                        <% end_if %>
                        <% if $Tagline %>
                            <strong>$Tagline</strong>
                        <% end_if %>
                    </div>
                </div>
<% end_with %>

Что я скучаю? Что я делаю не так? Спасибо за ответ.

1 Ответ

0 голосов
/ 27 июня 2018

Изображения имеют версию в SilverStripe 4, поэтому вам необходимо обеспечить публикацию изображения при сохранении объекта SiteConfig.

Вы не упоминаете, какую версию SilverStripe 4 вы используете - эта проблема была рассмотрена в 4.1.2 и 4.2.0-бета1. Это будет означать, что если вы примените API владения к этим связанным объектам, то они будут автоматически опубликованы при сохранении модели SiteConfig, например ::

private static $owns = ['Logo', 'DefaultImage'];

Если вы используете SilverStripe 4.1.2 или новее, все, что вам нужно сделать, - это вышеописанное.

Для версий более ранних, чем эта, вы можете реализовать свой собственный хук в вашем SiteConfigExtension:

public function onAfterWrite()
{
    if ($this->owner->Logo()->exists()) {
        $this->owner->Logo()->publishSingle();
    }
    // ... same for other has_ones that are versioned
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...