TYPO3: проблема с кэшированием новых полей в расширении tx_news

#php #typo3 #typo3-9.x #tx-news

#php #typo3 #typo3-9.x #tx-новости

Вопрос:

Я создал новое расширение, чтобы добавить некоторые поля в расширение news.
В серверной части все работает нормально, я могу добавлять значения в поля, и они правильно сохраняются в базе данных.

Когда я очищаю кеш и перестраиваю информацию о загрузке PHP, она отображается во внешнем интерфейсе, но через несколько часов новые поля волшебным образом исчезают.

Я создал расширение с помощью конструктора расширений и добавил поле вручную.
Я много раз читал информацию о генераторе ProxyClass, но не вижу сбоя.

Похоже, мне нужно подключить класс в кэше или в другом месте.
Я действительно в отчаянии от этого.

ext:albr_news_new_fields/Classes/Domain/Model/News.php

 namespace AlbrAlbrNewsNewFieldsDomainModel;
class News extends GeorgRingerNewsDomainModelNews {
/**
     * titulo1
     * 
     * @var string
     */
    protected $titulo1 = '';
  

ext:albr_news_new_fields/ext_localconf.php

 defined('TYPO3_MODE') or die();

$GLOBALS['TYPO3_CONF_VARS']['EXT']['news']['classes']['Domain/Model/News'][] = 'albr_news_new_fields';

TYPO3CMSCoreUtilityGeneralUtility::makeInstance(TYPO3CMSExtbaseObjectContainerContainer::class)
    ->registerImplementation(GeorgRingerNewsDomainModelNews::class,
        AlbrAlbrNewsNewFieldsDomainModelNews::class);
  

ext:albr_news_new_fields/ext_tables.php

 call_user_func(
    function()
    {
        TYPO3CMSCoreUtilityExtensionManagementUtility::addStaticFile('albr_news_new_fields', 'Configuration/TypoScript', 'Nuevos campos tx_news');
    }
);

$tempColumns = Array (
    'titulo1' => [
        'exclude' => true,
        'label' => 'LLL:EXT:albr_news_new_fields/Resources/Private/Language/locallang_db.xlf:titulo1',
        'description' => 'LLL:EXT:albr_news_new_fields/Resources/Private/Language/locallang_db.xlf:titulo1.description',
        'config' => [
            'type' => 'input',
            'size' => 50,
            'eval' => 'trim' 

ext: albr_news_new_fields/Configuration/Typoscript/setup.typoscript

 plugin.tx_news {
        persistence {
                classes {
                        GeorgRingerNewsDomainModelNews {
                                subclasses {
                                        # three different classes are used for each news type
                                        # 0 == default news
                                        0 = AlbrAlbrNewsNewFieldsDomainModelNews
                                }
                        }
                        AlbrAlbrNewsNewFieldsDomainModelNewsDefault {
                                mapping {
                                        recordType = 0
                                        tableName = tx_news_domain_model_news
                                }
                        }
                        AlbrAlbrNewsNewFieldsDomainModelNews {
                                mapping {
                                        recordType = 0
                                        tableName = tx_news_domain_model_news
                                }
                        }
                }
        }
}

config.tx_extbase {
        persistence {
                classes {
                        GeorgRingerNewsDomainModelNews {
                                subclasses {
                                        GeorgRingerNewsDomainModelNews = AlbrAlbrNewsNewFieldsDomainModelNews
                                }
                        }
                        AlbrAlbrNewsNewFieldsDomainModelNews {
                                mapping {
                                        tableName = tx_news_domain_model_news
                                }
                        }   
                }
        }
}
  

Я использую: TYPO3 9.5.22 и Новости 7.3.1

Комментарии:

1. Привет, я предполагаю, что вы вызываете метод ExtensionManagementUtility::addToAllTCAtypes(), чтобы добавить свои новые поля. Эти новые поля должны быть в файле Configuration/TCA/Overrides/tx_news_domain_model_news.php вместо того , чтобы ext_tables.php .

2. Большое спасибо! Я очистил ext_tables.php и переместите все определение TCA в Configuration/TCA/Overrides/tx_news_domain_model_news.php с ExtensionManagementUtility::addToAllTCAtypes() теперь это имеет для меня большой смысл. Но теперь я не вижу полей ни на серверной части, ни на интерфейсе. Пытался удалить / установить / очистить кэш / дамп… Чего-то все еще не хватает

3. Какой беспорядок! После часовой проверки, почему это не сработало, проблема заключалась в том, что в конце файла был пробел. Теперь кажется, что все выглядит и работает, чтобы посмотреть, останется ли оно работающим через несколько часов.

Ответ №1:

ext_tables.php больше не должен использоваться для манипулирования TCA, см. https://docs.typo3.org/m/typo3/reference-coreapi/9.5/en-us/ExtensionArchitecture/ConfigurationFiles/Index.html#ext-tables-php

Также см. Упоминание Configuration/TCA/Overrides/tx_news_domain_model_news.php в https://docs.typo3.org/p/georgringer/news/master/en-us/DeveloperManual/ExtendNews/ProxyClassGenerator/Index.html

Комментарии:

1. О, я прочитал это на странице: ext_tables.php не кэшируется. Файлы в Configuration / TCA кэшируются. и это может быть проблемой. Изменено, выглядит многообещающе, давайте подождем несколько часов, что произойдет с кэшем. Большое вам спасибо, что указали мне в этом направлении.

2. Пожалуйста, также имейте в виду, что конфигурация сохранения Extbase в TypoScript больше невозможна в версии 10 docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/10.0 /…

3. Это был правильный ответ, чтобы записать в ‘Configuration/TCA/Overrides/tx_news_domain_model_news.php «большое и большое спасибо.

Ответ №2:

Я предполагаю, что проблема в том, что вы переопределяете тип записи tx_news 0.

Вам лучше иметь что-то вроде этого :

 plugin.tx_news {
    persistence {
        classes {
            GeorgRingerNewsDomainModelNews {
                subclasses {
                    3 = AlbrAlbrNewsNewFieldsDomainModelNews
                }
            }
            AlbrAlbrNewsNewFieldsDomainModelNews {
                mapping {
                    recordType = 3
                    tableName = tx_news_domain_model_news
                }
            }
        }
    }
}
  

а затем определил новый тип записи в Configuration/TCA/Overrides/tx_news_domain_model_news.php содержащее ваше новое поле :

 $GLOBALS['TCA']['tx_news_domain_model_news']['types']['3'] = [
    'showitem' => '
            --palette--;;paletteCore,title,titulo1,--palette--;;paletteSlug,teaser,
            --palette--;;paletteDate,
            bodytext,
        --div--;' . $ll . 'tx_news_domain_model_news.content_elements,
            content_elements,
        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.media,
            fal_media,fal_related_files,
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
            categories,
        --div--;' . $ll . 'tx_news_domain_model_news.tabs.relations,
            related,related_from,
            related_links,tags,
        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;paletteAuthor,
            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.metatags;metatags,
            --palette--;' . $ll . 'tx_news_domain_model_news.palettes.alternativeTitles;alternativeTitles,
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
            --palette--;;paletteLanguage,
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
            --palette--;;paletteHidden,
            --palette--;;paletteAccess,
        --div--;' . $ll . 'notes,
            notes,
        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,'
];
  

Посмотрите в news/Configuration/TCA/tx_news_domain_model_news.php

Комментарии:

1. Большое вам спасибо, это может быть ответом, нужно подождать несколько часов, чтобы увидеть, что произошло с кэшем. Опубликую здесь.

2. Я понимаю, что это делается для создания нового типа новостей и не затрагивает оригинал. Но если я предпочитаю перезаписать его, оставив его с типом 0, это стоило бы того, верно?

3. Да, это для создания другого типа новостей с вашим новым полем. Я изменил сообщение, чтобы показать вам точный код. Вам не нужно ждать, просто очистите системный кеш. Я пишу другой ответ, чтобы показать вам, как сохранить тип записи = 0

4. Большое вам спасибо, Флориан! Я пытаюсь заставить новые поля работать сначала во внешнем интерфейсе и бэкэнде, а затем я собираюсь создать новый тип, мне кажется, это очень хорошее решение. Большое спасибо.

Ответ №3:

Если вы хотите сохранить тип записи = 0, я предлагаю вам сделать это :

 plugin.tx_news {
    persistence {
        classes {
            AlbrAlbrNewsNewFieldsDomainModelNews {
                mapping {
                    recordType = 0
                    tableName = tx_news_domain_model_news
                }
            }
        }
    }
}
  

И в Configuration/TCA/Overrides/tx_news_domain_model_news.php , переопределяет тип = 0 :

 $GLOBALS['TCA']['tx_news_domain_model_news']['types']['0'] = array_replace_recursive(
    $GLOBALS['TCA']['tt_content']['types']['0'],
    [
        'showitem' => '
                --palette--;;paletteCore,title,titulo1,--palette--;;paletteSlug,teaser,
                --palette--;;paletteDate,
                bodytext,
            --div--;' . $ll . 'tx_news_domain_model_news.content_elements,
                content_elements,
            --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.media,
                fal_media,fal_related_files,
            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
                categories,
            --div--;' . $ll . 'tx_news_domain_model_news.tabs.relations,
                related,related_from,
                related_links,tags,
            --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
                --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;paletteAuthor,
                --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.metatags;metatags,
                --palette--;' . $ll . 'tx_news_domain_model_news.palettes.alternativeTitles;alternativeTitles,
            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
                --palette--;;paletteLanguage,
            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
                --palette--;;paletteHidden,
                --palette--;;paletteAccess,
            --div--;' . $ll . 'notes,
                notes,
            --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,'
    ]
);
  

Установите зависимости tt_news в ext_emconf.php :

 $EM_CONF[$_EXTKEY] = [
    ...
    'constraints' => [
        'depends' => [
            'typo3' => '9.5.0-9.5.99',
            'tt_news' => '7.3.1-7.3.99',
        ],
        'conflicts' => [],
        'suggests' => [],
    ],
];
  

Комментарии:

1. Большое спасибо, думаю, что теперь я на правильном пути.

2. Это была проблема. Сначала мне нужно было поместить все объявления TCA в Configuration / TCA / Overrides, а не в ext_tables.php как я где-то видел. Но моя ошибка заключалась также в том, что имя файла: tx_news_domain_model_news.php то, что я использовал, имело пробел в конце, и именно поэтому оно не загружалось. Я надеюсь, что если с кем-то случится что-то подобное, это может помочь.