TYPO3 TCA - Wie „inline“ Typ ohne alle Schnittstellenoptionen zu verwenden,

StackOverflow https://stackoverflow.com/questions/718664

  •  23-08-2019
  •  | 
  •  

Frage

Im Moment arbeite ich an einem Projekt, das die t3blog Erweiterung verwendet. Im Backend, wenn eine neue Nachricht erstellen, können Sie zuerst einen Titel eingeben und dann müssen Sie klicken Sie auf „Neu erstellen“ Inhalt auf den Posten hinzuzufügen.

Im Idealfall der Kunde will die „create new“ oder zumindest entfernen haben sie ein neues Stück von Inhalten standardmäßig erstellen.

Ich bin durch die TCA der Verlängerung zu graben, und ich fand, wo es diese Kontrolle fügt hinzu, jetzt bin ich ein bisschen stecken, wie ich in TCA vor nicht gehackt habe, weiß jemand, wie man das Verhalten eines ändern " inline“Typ über TCA?

Hier ist der Code, der die Steuerung ergänzt.

'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 ist, um die Registerkarte „Allgemein“ zu entfernen, die erstellt wird und nur noch die Registerkarte „Text“.

würde Irgendwelche Hinweise sehr geschätzt.

War es hilfreich?

Lösung 2

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

Modifizierte die TCA dazu:

    '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. Im Innern 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 dies jemand anderes in der Zukunft helfen wird.

Andere Tipps

Mein Verständnis ist, dass Typ 'inline' etwas bezieht sich auf genannt ' IRRE ' oder Inline Relational Rekord Bearbeitung, eine relativ neue und leistungsfähige (von TYPO3-Standards) Datenstruktur in der TCA. Vielleicht finden Sie diesem Abschnitt der TYPO3 Core-API docs nützlich als Referenz.

Wie es ist, führt der Klick einen Ajax-Aufruf eine neue Datenbank-Datensatz im Hintergrund zu erstellen. Doch von dem, was ich gesehen habe (diese und andere Plugins wie Power verwenden), ich bezweifle, dass es einen Weg gibt, die extra Klick, ohne dabei einige schwere Hacking / Verlängerung der T3-Core selbst zu überspringen. Leider kann ich nicht mehr helfen, und kam gerade über diesen vor kurzem selbst. Hoffentlich gibt es andere TYPO3 Hacker auf SO, die dies versucht haben ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top