TCA TYPO3 - Comment utiliser le type « en ligne » sans toutes les options d'interface

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

  •  23-08-2019
  •  | 
  •  

Question

Je travaille actuellement sur un projet qui utilise l'extension t3blog. Dans le back-end, lors de la création d'un nouveau poste, vous devez d'abord entrer un titre et vous devez cliquer sur « Créer nouveau » pour ajouter du contenu au poste.

Idéalement, le client veut supprimer le « créer un nouveau » ou tout au moins avoir créer un nouveau morceau de contenu par défaut.

Je creuse par la TCA de l'extension et je l'ai trouvé où il ajoute que le contrôle, maintenant je suis un peu coincé comme je l'ai pas piraté avant TCA, personne ne sait comment modifier le comportement d'un " en ligne » via le type TCA?

Voici le code qui ajoute le contrôle.

'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(
            ),
        )

    ),

Ce que je suis en train de faire est de supprimer l'onglet « Général » qui est créé et juste avoir l'onglet « texte ».

Les conseils seraient très appréciés.

Était-ce utile?

La solution 2

Juste réussi à résoudre ce problème hier après une longue séance de gratter la tête, voici comment:

Modification de la TCA à ceci:

    '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
        )

    )

Je créé une nouvelle extension vide. A l'intérieur du répertoire poste, créé ext_tables.php avec le contenu suivant:

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

Et à l'intérieur 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:

    }
}

Espérons que cela aidera quelqu'un d'autre à l'avenir.

Autres conseils

Ma compréhension est que le type 'en ligne' fait référence à quelque chose appelé ' IRRE' ou Inline Relational Enregistrement Modification, une structure de données relativement nouveau et puissant (par rapport aux normes TYPO3) dans le TCA. Vous trouverez peut-être cette section des API de base TYPO3 docs utiles comme référence.

Comme il est, le clic effectue un appel Ajax pour créer un nouvel enregistrement de base de données en arrière-plan. Cependant, d'après ce que j'ai vu (en utilisant cela et d'autres plug-ins tels que powermail), je doute qu'il y ait un moyen de sauter le clic supplémentaire sans faire quelques bidouillages graves / extension du T3 de base lui-même. Désolé, je ne peux pas être plus utile, et juste suis tombé sur cette récemment, moi-même. Si tout va bien il y a d'autres pirates sur TYPO3 SO qui ont essayé ce ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top