2017-05-30 6 views
0

私はsys_file_referenceテーブルを、通常のextbaseの方法だけで新しいテキストフィールド "copyright"で拡張しようとしています。魅力のように働いて、フィールドが現れます。しかし、sys_file_referenceリレーションを持つレコードを保存すると、参照が追加されません。保存後に空白になります...レコードが通常のメディアフィールドを持つページであるかどうか、またはカスタム拡張の1つであるかどうかは関係ありません。誰かが私が逃しているアイデアを得ましたか?TYPO3:新しいテキストフィールドでFAL sys_file_referenceを拡張する

ありがとうございました!

TCA:

$fileReferenceColumns = [ 
'copyright' => [ 
    'exclude' => true, 
    'label' => $ll . 'sys_file_reference.copyright', 
    'config' => [ 
     'type' => 'input', 
     'size' => 20, 
     'max' => 255, 
     'eval' => 'null', 
     'default' => null, 
    ] 
]]; 

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('sys_file_reference', $fileReferenceColumns); 
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette(
    'sys_file_reference', 
    'imageoverlayPalette', 
    'copyright' 
); 

SQL:

CREATE TABLE sys_file_reference (
    copyright VARCHAR(255) DEFAULT ''   NOT NULL, 
); 

モデル:

class FileReference extends AbstractEntity 
{ 

    /** 
    * uid of a sys_file 
    * 
    * @var integer 
    */ 
    protected $originalFileIdentifier; 

    /** 
    * @var \TYPO3\CMS\Extbase\Domain\Model\File 
    */ 
    protected $file; 

    /** 
    * @var string 
    */ 
    protected $copyright; 

    /** 
    * setOriginalResource 
    * 
    * @param \TYPO3\CMS\Core\Resource\FileReference $originalResource 
    * @return void 
    */ 
    public function setOriginalResource(\TYPO3\CMS\Core\Resource\FileReference $originalResource) 
    { 
     $this->originalResource = $originalResource; 
     $this->originalFileIdentifier = (int)$originalResource->getOriginalFile()->getUid(); 
    } 

    /** 
    * @return \TYPO3\CMS\Extbase\Domain\Model\File 
    */ 
    public function getFile() 
    { 
     return $this->file; 
    } 

    /** 
    * @param \TYPO3\CMS\Extbase\Domain\Model\File $file 
    */ 
    public function setFile($file) 
    { 
     $this->file = $file; 
     $this->originalFileIdentifier = $file->getUid(); 
    } 

    /** 
    * @return string 
    */ 
    public function getCopyright() 
    { 
     return $this->copyright; 
    } 

    /** 
    * @param string $copyright 
    */ 
    public function setCopyright($copyright) 
    { 
     $this->copyright = $copyright; 
    } 
} 

のTypoScript:

config.tx_extbase { 
    persistence { 
     classes { 
      Interlutions\ItlGallery\Domain\Model\FileReference { 
       mapping { 
        tableName = sys_file_reference 
        columns { 
         uid_local.mapOnProperty = originalFileIdentifier 
         uid_local.mapOnProperty = file 
         votes.mapOnProperty = votes 
        } 
       } 
      } 
     } 

     objects { 
      TYPO3\CMS\Extbase\Domain\Model\FileReference.className = Interlutions\ItlGallery\Domain\Model\FileReference 
     } 
    } 
} 

答えて

0

問題は、新しいフィールド「著作権」が記入されなかった場合、それは値を保存しようとしたこと、でしたNULLとして。しかし、SQLの定義ではNULLは許されませんでした。 ...私はそれは本当に簡単なものを知っていた

CREATE TABLE sys_file_reference (
    copyright TINYTEXT, 
); 

0

ねえ、私はあなたが完全に使用して、元のFileReferenceオブジェクトを「置き換え」ので、すべての参照が迷子に推測:-) StackOverflowのために歓迎:

config.tx_extbase.objects.TYPO3\CMS\Extbase\Domain\Model\FileReference.className = Interlutions\ItlGallery\Domain\Model\FileReference

をあなたの全体のシステムではExtbaseのFileReferenceは、あなたのFileReferenceに置き換えられます。このため、モデルではAbstractEntityのみが拡張されているため、「オーバーライド」モデルにはSetters/Gettersの多くがないため、すべてのFileReferenceに関する重要な情報はDBに格納されません。

既存のFileReferenceを拡張してみてください - これは多分問題を解決します:

class FileReference extends \TYPO3\CMS\Extbase\Domain\Model\FileReference

config.tx_extbase.objectsを使用してオーバーライドするクラスは、他の拡張機能が破損するおそれがあることに注意してください。 plugin.tx_yourextension.objectsを使用して自分の内線番号を上書きすることを検討することもできます。 新しいフィールドは、たとえば、流体テンプレートなどのfile.properties.copyrightを使用して、デフォルトのFileReferenceにアクセスできます。

もう一つは:ので、著作権の分野のあなたの必要性から、この拡張機能は、同じことを行います。https://typo3.org/extensions/repository/view/tgm_copyright

+0

感謝:

だから、例えば、以下の(sys_file_referenceのタイトルと説明のフィールド定義を見て)加工さにSQL定義を変更しますあなたのヒントのために残念ながら両方の助けてくれません。モデルがExtbase FileReferenceモデルに拡張され、TypoScriptオブジェクトのマッピングがplugin.tx_itlgalleryに変更されました。ページやカスタムモデルでも参照が失われます。 –

+0

ページのデフォルトのメディアフィールドを意味するか、ページに独自のフィールドを追加しましたか? –

+0

デフォルトのメディアフィールドは、typoscriptマッピングが自分の拡張機能に制限されているため、変更の影響を受けてはいけません。 –

関連する問題