2009-04-05 12 views
3

Ich arbeite gerade an einem Projekt, das die Erweiterung t3blog verwendet. Im Backend, wenn Sie einen neuen Beitrag erstellen, geben Sie zuerst einen Titel ein und dann müssen Sie auf "Neu erstellen" klicken, um Inhalte zum Beitrag hinzuzufügen.TYPO3 TCA - Wie man den Inline-Typ ohne alle Schnittstellenoptionen verwendet

Idealerweise möchte der Client "create new" entfernen oder zumindest einen neuen Inhalt erstellen lassen.

Ich graben durch den TCA der Erweiterung und ich fand, wo es die Kontrolle hinzufügt, jetzt bin ich ein bisschen fest, wie ich nicht in TCA gehackt habe, weiß jemand, wie man das Verhalten eines ändert "Inline" -Typ über TCA?

Hier ist der Code, der das Steuerelement hinzufügt.

'content' => Array (
     'exclude' => 1, 
     'label' => 'LLL:EXT:t3blog/locallang_db.xml:tx_t3blog_post.content', 
     'config' => array (
      'type' => 'inline', 
      'foreign_table' => 'tt_content', 
      'foreign_field' => 'irre_parentid', 
      'foreign_table_field' => 'irre_parenttable', 
      'maxitems' => 100, 
      'appearance' => array(
       'showSynchronizationLink' => 0, 
       'showAllLocalizationLink' => 0, 
       'showPossibleLocalizationRecords' => 0, 
       'showRemovedLocalizationRecords' => 0, 
       'expandSingle' => 1 
      ), 
      'behaviour' => array(
      ), 
     ) 

    ), 

Was ich versuche zu tun, um die Registerkarte „Allgemein“ zu entfernen, die erstellt wird und nur die Registerkarte „Text“ haben.

Alle Hinweise würden sehr geschätzt werden.

Antwort

1

gerade geschafft, diese gestern nach einer langen Sitzung des Kopfes zu beheben Kratzen, ist hier, wie:

die TCA diesem modifizierten:

'content' => Array (
     'exclude' => 1, 
     'label' => 'LLL:EXT:t3blog/locallang_db.xml:tx_t3blog_post.content', 
     'config' => array (
      'type' => 'inline', 
      'foreign_table' => 'tt_content', 
      'foreign_field' => 'irre_parentid', 
      'foreign_table_field' => 'irre_parenttable', 
      'maxitems' => 100, 
      'appearance' => array(
       'showSynchronizationLink' => 0, 
       'showAllLocalizationLink' => 0, 
       'showPossibleLocalizationRecords' => 0, 
       'showRemovedLocalizationRecords' => 0, 
       'expandSingle' => 1, 
       'collapseAll' => 0 
      ), 
      'behaviour' => array(
      ), 
      't3blog' => true 
     ) 

    ) 

Dann habe ich eine neue leere Erweiterung erstellt. Im Inneren des ext Verzeichnis erstellt ext_tables.php mit folgendem Inhalt:

<?php 
$TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tceforms_inline.php'] = t3lib_extMgm::extPath($_EXTKEY).'ux_inline.php'; 

Und innen ux_inline.php:

<?php 
class ux_t3lib_TCEforms_inline extends t3lib_TCEforms_inline 
{ 
    public function renderForeignRecordHeader($parentUid, $foreign_table, $rec, $config, $isVirtualRecord = false) 
    { 
     if(isset($config['t3blog']) && $config['t3blog']) 
     { 
      $GLOBALS['TCA']['tt_content']['types']['text']['showitem'] = 'bodytext;;9;richtext:rte_transform[flag=rte_enabled|mode=ts_css];3-3-3'; 
      $GLOBALS['TCA']['tt_content']['columns']['CType']['exclude'] = 1; 
      $GLOBALS['TCA']['tt_content']['columns']['header']['exclude'] = 1; 

      return; 
     } 
     else 
     { 
      return parent::renderForeignRecordHeader($parentUid, $foreign_table, $rec, $config, $isVirtualRecord); 
     } 
    } 

    public function getExpandedCollapsedState($table, $uid) 
    { 
     if(isset($_REQUEST['edit']['tx_t3blog_post'])) 
      return true; 
     else 
      return parent::getExpandedCollapsedState($table, $uid); 
    } 

    public function getLevelInteractionLink($type, $objectPrefix, $conf=array()) 
    { 
      if(!isset($conf['t3blog']) || !$conf['t3blog']) 
      { 
       return parent::getLevelInteractionLink($type, $objectPrefix, $conf); 
      } 
      else 
    { 
     if((int) $conf['inline']['first'] > 0) 
      return; 
    } 

    $nameObject = $this->inlineNames['object']; 
    $attributes = array(); 
    switch($type) { 
     case 'newRecord': 
      $title = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:cm.createnew', 1); 
      $iconFile = 'gfx/new_el.gif'; 
      // $iconAddon = 'width="11" height="12"'; 
      $className = 'typo3-newRecordLink'; 
      $attributes['class'] = 'inlineNewButton '.$this->inlineData['config'][$nameObject]['md5']; 
      $attributes['onclick'] = "return inline.createNewRecord('$objectPrefix')"; 
      $attributes['style'] = "display: none;"; 
      if (isset($conf['inline']['inlineNewButtonStyle']) && $conf['inline']['inlineNewButtonStyle']) { 
       $attributes['style'] = $conf['inline']['inlineNewButtonStyle']; 
      } 
      if (isset($conf['appearance']['newRecordLinkAddTitle']) && $conf['appearance']['newRecordLinkAddTitle']) { 
       $titleAddon = ' '.$GLOBALS['LANG']->sL($GLOBALS['TCA'][$conf['foreign_table']]['ctrl']['title'], 1); 
      } 
      $icon = ($iconFile ? '<img'.t3lib_iconWorks::skinImg($this->backPath, $iconFile, $iconAddon).' alt="'.htmlspecialchars($title.$titleAddon).'" />' : ''); 
      $link = $this->wrapWithAnchor($icon.$title.$titleAddon, '#', $attributes); 
      return '<div'.($className ? ' class="'.$className.'"' : '').'>'.$link.'</div>'; 
      break; 
     case 'localize': 
      $title = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_misc.xml:localizeAllRecords', 1); 
      $iconFile = 'gfx/localize_el.gif'; 
      $className = 'typo3-localizationLink'; 
      $attributes['onclick'] = "return inline.synchronizeLocalizeRecords('$objectPrefix', 'localize')"; 
      break; 
     case 'synchronize': 
      $title = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_misc.xml:synchronizeWithOriginalLanguage', 1); 
      $iconFile = 'gfx/synchronize_el.gif'; 
      $className = 'typo3-synchronizationLink'; 
      $attributes['class'] = 'inlineNewButton '.$this->inlineData['config'][$nameObject]['md5']; 
      $attributes['onclick'] = "return inline.synchronizeLocalizeRecords('$objectPrefix', 'synchronize')"; 
      break; 
    } 
     // Create the link: 

    } 
} 

Hope this jemand anderes in der Zukunft helfen wird.

1

Mein Verständnis ist, dass der Typ 'Inline' sich auf etwas namens 'IRRE' oder Inline Relational Record Editing bezieht, eine relativ neue und leistungsfähige (nach TYPO3-Standards) Datenstruktur im TCA. Sie könnten this section of the TYPO3 Core API Docs als Referenz nützlich finden.

Der Klick führt einen Ajax-Aufruf durch, um einen neuen Datenbankdatensatz im Hintergrund zu erstellen. Wie auch immer, von dem, was ich gesehen habe (mit diesem und anderen Plugins wie Powermail), bezweifle ich, dass es einen Weg gibt, den zusätzlichen Klick zu überspringen, ohne den T3 Core selbst ernsthaft zu hacken/zu erweitern. Tut mir leid, ich kann nicht mehr helfen, und bin gerade erst selbst dazu gekommen. Hoffentlich gibt es andere TYPO3 Hacker auf SO, die dies versucht haben ...

Verwandte Themen