Search code examples
phpsilverstripesilverstripe-4

SilverStripe Fluent - DataObject Live version not created


On SS 4.0.3 only for DataObjects (has-many relation), the DB Localised_Live table version isn't created during save on CMS-side. This result in NULL content on the front-end page.

If I log as admin and inspect one of the pages involved (actually same for 3 distinct DataObjects) in draft mode, I see the contents regularly.

Here's a couple of screenshots:

Front end

Database

Here's the code involved (just picking 1 of 3 - are the same):

DataObject

<?php
// Definizione Namespace
use SilverStripe\ORM\DataObject;
use SilverStripe\Forms\FieldList;
use SilverStripe\Assets\Folder;
use SilverStripe\Assets\Image;
use SilverStripe\Forms\RequiredFields;
use SilverStripe\Forms\TextField;
use SilverStripe\AssetAdmin\Forms\UploadField;

/**
 * Classe Headline
 */
class Headline extends DataObject {
    // Dichiarazione Proprietà
    private static $db = [
        'Corpo' => 'HTMLText'
    ];
    private static $has_one = [
        'LogoHeadline' => Image::class,
        'Home' => 'Home'
    ];
    private static $searchable_fields = [
        'Corpo'
    ];
    private static $summary_fields = [
        'Corpo'
    ];
    private static $translate = [
        'Corpo'
    ];

    /**
     * Metogo definizione campi obbligatori
     * Setter
     * @return void
     */
    public function getCMSValidator() {
        return new RequiredFields(array('LogoHeadline'));
    }

    /**
     * Metodo gestione campi CMS
     * Setter
     * @return FieldList $fields Campi Back-End
     */
    public function getCMSfields()
    {
        $cartellaHome = 'home';
        $dimensioneFoto = 0.6 * 1024 * 1024; // 600 Kb
        $uploadFoto = new UploadField('LogoHeadline', 'Carosello (.jpg/.jpeg/.png/.gif - 600 Kb max.)');

        $uploadFoto->getValidator()->setAllowedExtensions(array('jpg', 'jpeg', 'png', 'gif'));
        $uploadFoto->getValidator()->setAllowedMaxFileSize($dimensioneFoto);

        Folder::find_or_make($cartellaHome);

        $uploadFoto->setFolderName($cartellaHome);

        $fields = FieldList::create(
            $uploadFoto,
            TextField::create('Corpo', 'Testo')
        );

        $this->extend('updateCMSFields', $fields);

        return $fields;
    }
}

Page:

<?php
// Definizione Namespace
use SilverStripe\Forms\FieldList;
use SilverStripe\Assets\Folder;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
use SilverStripe\Assets\Image;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\TextareaField;
use SilverStripe\AssetAdmin\Forms\UploadField;

/**
 * Classe Home
 */
class Home extends Page
{
    // Dichiarazione Proprietà
    private static $db = [
        'Summary' => 'HTMLText',
        'LinkCta' => 'Text'
    ];
    private static $has_many = [
        'Headlines' => 'Headline'
    ];
    private static $many_many = [
        'Cliente' => Image::class
    ];
    private static $translate = [
        'Summary',
        'LinkCta',
        'Headlines'
    ];
    private static $description = 'Home Page';

    /**
     * Metodo gestione campi Back-End
     * Getter
     * @return FieldList $fields Campi Back-End
     */
    public function getCMSFields()
    {
        $fields = Page::getCMSFields();

        $cartellaClienti = 'clienti';
        $dimensioneFoto = 0.6 * 1024 * 1024; // 600 Kb

        $fields->removeFieldFromTab('Root.Main', 'Content');
        $fields->addFieldToTab('Root.Main', TextareaField::create('Summary', 'Riepilogo'));
        $fields->addFieldToTab('Root.Main', TextField::create('LinkCta', 'Link (Call to Action)'));

        $headlineConfig = GridFieldConfig_RecordEditor::create();

        $fields->addFieldToTab('Root.Headline', new GridField('Headlines', 'Headline', $this->Headlines(), $headlineConfig));
        $fields->addFieldToTab('Root.Clienti', $uploadClienti = new UploadField('Cliente', 'Clienti (.jpg/.jpeg/.png/.gif - 600 Kb max.)'));
        $uploadClienti->getValidator()->setAllowedExtensions(array('jpg', 'jpeg', 'png', 'gif'));
        $uploadClienti->getValidator()->setAllowedMaxFileSize($dimensioneFoto);

        Folder::find_or_make($cartellaClienti);

        $uploadClienti->setFolderName($cartellaClienti);

        return $fields;
    }
}

YAML

---
Name: corporate-consulting
---
SilverStripe\Core\Manifest\ModuleManifest:
  project: corporate-consulting
# Localizzazione
SilverStripe\i18n\i18n:
  default_locale: 'it_IT'
  common_locales:
    it_IT:
      name: 'Italian'
      native: 'Italiano'
    en_GB:
      name: 'English'
      native: 'English'
TractorCow\Fluent\Extension\FluentDirectorExtension:
  detect_locale: false
# Admin/Branding
SilverStripe\Admin\LeftAndMain:
  application_name: 'Corporate Consulting'
  application_link: 'https://corporate.it'
  extra_requirements_css:
    - themes/corporate/css/dist/admin.css
# Immagini
SilverStripe\Core\Injector\Injector:
 SilverStripe\Assets\Image_Backend:
   properties:
     Quality: 75
---
  Name: traduzioni
---
Caso:
  extensions:
    - 'TractorCow\Fluent\Extension\FluentExtension'
Headline:
  extensions:
    - 'TractorCow\Fluent\Extension\FluentExtension'
Reference:
  extensions:
    - 'TractorCow\Fluent\Extension\FluentExtension'

I'll be open to any suggestion.


Solution

  • Issue solved. The missing $owns SiteTree property (see the doc - file ownership), in relation with the DataObjects involved, were the cause that was preventing the contents to be published (files and images especially).

    To read more about it: DataObject Live version not created