Typo3 TCA- 모든 인터페이스 옵션없이 "인라인"유형을 사용하는 방법

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

  •  23-08-2019
  •  | 
  •  

문제

현재 T3Blog 확장을 사용하는 프로젝트를 진행하고 있습니다. 백엔드에서 새 게시물을 만들 때 먼저 제목을 입력 한 다음 "새 생성"을 클릭하여 게시물에 컨텐츠를 추가해야합니다.

이상적으로 클라이언트는 "새 생성"을 제거하거나 최소한 기본적으로 새로운 컨텐츠를 만들기를 원합니다.

나는 확장의 TCA를 파고 들고 있으며, 그것이 제어를 추가하는 위치를 발견했다. 이제 나는 이전에 TCA에서 해킹되지 않은 것처럼 약간 붙어있다. 누구나 "인라인"유형의 동작을 수정하는 방법을 알고 있습니까? TCA를 통해?

다음은 컨트롤을 추가하는 코드입니다.

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

    ),

내가하려는 것은 생성 된 "일반"탭을 제거하고 "텍스트"탭을 갖는 것입니다.

모든 힌트는 대단히 감사 할 것입니다.

도움이 되었습니까?

해결책 2

긴 머리 긁힘 세션 후 어제이 문제를 해결했습니다. 다음은 다음과 같습니다.

TCA를 이것으로 수정했습니다.

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

    )

그런 다음 새로운 빈 확장증을 만들었습니다. 내선 디렉토리 내부에서 다음 내용으로 ext_tables.php를 만들었습니다.

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

그리고 내부 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:

    }
}

이것이 미래에 다른 사람에게 도움이되기를 바랍니다.

다른 팁

내 이해는 그 유형 '인라인'이라는 것을 의미합니다.어리석은'또는 인라인 관계 레코드 편집, TCA의 비교적 새롭고 강력한 (TYPO3 표준) 데이터 구조. 당신은 찾을 수 있습니다 Typo3 코어 API 의이 섹션 참조로 유용한 문서.

그대로 클릭은 AJAX 호출을 수행하여 백그라운드에서 새 데이터베이스 레코드를 작성합니다. 그러나 내가 본 것 (Powermail과 같은 다른 플러그인 사용)에서 T3 코어 자체를 심각하게 해킹/확장하지 않고 추가 클릭을 건너 뛰는 방법이 있는지 의심 스럽다. 더 도움이되지 못해서 미안하고 최근 에이 문제를 발견했습니다. 바라건대 다른 타인 3 해커가 있기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top