Как добавить собственное поле в таблицу sys_file_reference

Как добавить собственное поле в таблицу sys_file_reference

Разработка Extbase

Недавно я разрабатывал простое расширение каталога на extbase. Управление каталогом происходит как обычно через back-end. К каждому товару (Item) редактор может загружать любое количество изображений. Возникала необходимость сделать галочку для какого-то изображения, чтобы именно оно отображалось в режиме список.

В файл ext_tables.sql, в описание полей таблицы item добавляем

preview tinyint(4) DEFAULT '0' NOT NULL,

В TCA/Item.php описание для изображений выглядит так

 

'image' => array(
  'exclude' => 1,
  'label' => 'LLL:EXT:fy_reference/Resources/Private/Language/locallang_db.xlf:tx_fyreference_domain_model_reference.images',
  'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('image', array(
    'foreign_selector_fieldTcaOverride' => array(
      'config' => array(
        'appearance' => array(
          'elementBrowserType' => 'file',
          'elementBrowserAllowed' => 'gif,jpg,jpeg,tif,tiff,bmp,png'
        )
      )
    ),
    'appearance' => array(
      'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference',
    ),
    'minitems' => 0,
    'maxitems' => 9999,
    'foreign_types' => array(
      '0' => array(
        'showitem' => '
            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
            --palette--;;filePalette, showinpreview'
      ),
      \TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => array(
        'showitem' => '
          --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
          --palette--;;filePalette, showinpreview'
      ),
    )
  ), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']),
  'files' => array(
    'exclude' => 1,
    'label' => 'Files',
    'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('files', array(
      'appearance' => array(
        'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference'
      ),
    ), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']),
  ),
),

 

Для Item модель выглядит так

 

/**
 * Item
 */
class Item extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {

// Some properties

/**
* image
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Devcompany\Tsmprojects\Domain\Model\FileReference>
* @cascade remove
*/
protected $image = NULL;

// Getter and Setter

}

 

 

Для file reference так. Обратите внимание, что класс FileReference должен расширять \TYPO3\CMS\Extbase\Domain\Model\FileReference

 

/**
 * FileReference
 */
class FileReference extends \TYPO3\CMS\Extbase\Domain\Model\FileReference {

// Some properties

/**
* showinpreview
*
* @var boolean
*/
protected $showinpreview = FALSE;

// Getter and Setter

/**
* Returns the showinpreview
*
* @return boolean $showinpreview
*/
public function getShowinpreview() {
return $this->showinpreview;
}

/**
* Sets the showinpreview
*
* @param boolean $showinpreview
* @return void
*/
public function setShowinpreview($showinpreview) {
$this->showinpreview = $showinpreview;
}

/**
* Returns the boolean state of showinpreview
*
* @return boolean
*/
public function isShowinpreview() {
return $this->showinpreview;
}

}

 

 

В tyoscript'е указываем мапить наш класс к таблице sys_filke_reference

 

config.tx_extbase.persistence.classes {
    Vendor\PluginName\Domain\Model\FileReference {
        mapping {
            tableName = sys_file_reference
        }
    }
}

 

И во fluid шаблоне указываем условия

 

 <f:if condition="{image.showinpreview}">
    <f:then>
        <f:image src="{image.originalResource.publicUrl}" width="475c" height="317c" />
    </f:then>
    <f:else>
       <!-- Здесь можем указать dummy картинку -->
    </f:else>
</f:if>