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، تم إنشاؤه 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:

    }
}

آمل أن يساعد هذا شخصا آخر في المستقبل.

نصائح أخرى

فهمي هو أن النوع "المضمن" يشير إلى شيء يسمى 'إير"أو مضمون تحرير السجل العلائقي، جديد نسبيا وقوي (بواسطة معايير TYPO3) في TCA. قد تجد هذا القسم من API TYPO3 الأساسية مستندات مفيدة كمرجع.

كما هو الحال، تقوم النقر بنقرة AJAX لإنشاء سجل قاعدة بيانات جديد في الخلفية. ومع ذلك، من ما رأيته (باستخدام هذه الإضافات والمكونات الإضافية الأخرى مثل Powermail)، أشك في أن هناك طريقة لتخطي النقر الإضافي دون القيام ببعض القرصنة الخطيرة / تمديد T3 Core نفسه. آسف لا أستطيع أن أكون مزيدا من المساعدة، وتوزنا للتو هذا مؤخرا، بنفسي. نأمل أن هناك المتسللين TYPO3 آخرين الذين جربوا هذا ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top