#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 то, что я использовал, имело пробел в конце, и именно поэтому оно не загружалось. Я надеюсь, что если с кем-то случится что-то подобное, это может помочь.