Typo3 8.7 itemsProcFunc 不修改现有项目
Typo3 8.7 itemsProcFunc do not modifies existing items
我是 Typo3 的新手。我想在此内容元素中添加一个带有特定 select 字段的自定义内容元素。
对于自定义内容元素,我修改了 pageTSConfig
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig
并添加了我的元素。这是工作。为了存储我的内容值,我在“ext_tables.sql”文件中添加了
#
# Table structure for table 'tt_content'
#
CREATE TABLE tt_content (
tx_spk_shopware_category varchar(20) NULL
);
最后我重写了 tt_content 的 TCA 配置,但这是行不通的。我在配置中看到带有自定义类型的新内容元素和我的项目,但我无法修改/添加 itemsProcFunc.
中引用的 class 中的任何项目
tt_content.php:
<?php declare(strict_types=1);
defined('TYPO3_MODE') || die();
// static TypoScript
(static function () {
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPlugin(
array(
'LLL:EXT:spk_shopware/Resources/Private/Language/Tca.xlf:spk_shopware_category.wizard.title',
'spk_shopware_category',
'EXT:spk_shopware/Resources/Public/Icons/ContentElements/spk_shopware_category.gif'
),
'CType',
'spk_shopware'
);
$temporaryColumn = array(
'tx_spk_shopware_category' => array (
'exclude' => 1,
'label' => 'LLL:EXT:spk_shopware/Resources/Private/Language/Tca.xlf:spk_shopware_category.title',
'config' => array (
'type' => 'select',
'itemsProcFunc' => SPK\Shopware\Hook\ShopwareCategorySelect::class . '->listAvailableShopwareCategories',
'items' => array(
array('test 1', '8'),
array('test 2', '10'),
),
'maxitems' => 1,
'minitems' => 1,
'required' => true,
)
)
);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns(
'tt_content',
$temporaryColumn
);
})();
// Configure the default backend fields for the content element
$GLOBALS['TCA']['tt_content']['types']['spk_shopware_category'] = array(
'showitem' => '
--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xml:palette.general;general,
tx_spk_shopware_category
');
CategorySelect.php
<?php
namespace SPK\Shopware\Hook;
class ShopwareCategorySelect
{
public function listAvailableShopwareCategories(&$config)
{
$config['items'][] = ["Tim", 0];
$config['items'][] = ["Tom", 1];
$config['items'][] = ["Jerry", 2];
array_push($config['items'], ["as", 1]);
return $config;
}
}
我看到自定义元素和新的 select 字段,但只有配置中的测试元素。我不知道我错过了什么。
你真的不需要return任何东西。您只想修改列的项目。尝试以下操作:
public function listAvailableShopwareCategories(&$config)
{
$config['items'][] = ["Tim", 0];
$config['items'][] = ["Tom", 1];
$config['items'][] = ["Jerry", 2];
$this->getItems = $config['items'];
}
您通过在 TCA 上呈现之前添加项目来修改 &$config
。这就是为什么您的 PHP 文件位于 Hooks 文件夹下的原因。它只是挂钩响应之间的项目:)
看来,TYPO3 没有找到您的class。请检查您是否提供了适当的信息:
通过 composer.json
,部分“autoload”:
{
"name": "vendorname/my-extension",
"type": "typo3-cms-extension",
// ...
"autoload": {
"psr-4": {
"Vendorname\MyExtension\": "Classes/"
}
}
}
...或通过 ext_emconf.php
,部分“autoload”:
<?php
$EM_CONF[$_EXTKEY] = [
'title' => 'My Extension',
// ...
'autoload' => [
'psr-4' => [
'Vendorname\MyExtension\' => 'Classes'
]
]
];
我是 Typo3 的新手。我想在此内容元素中添加一个带有特定 select 字段的自定义内容元素。 对于自定义内容元素,我修改了 pageTSConfig
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig
并添加了我的元素。这是工作。为了存储我的内容值,我在“ext_tables.sql”文件中添加了
#
# Table structure for table 'tt_content'
#
CREATE TABLE tt_content (
tx_spk_shopware_category varchar(20) NULL
);
最后我重写了 tt_content 的 TCA 配置,但这是行不通的。我在配置中看到带有自定义类型的新内容元素和我的项目,但我无法修改/添加 itemsProcFunc.
中引用的 class 中的任何项目tt_content.php:
<?php declare(strict_types=1);
defined('TYPO3_MODE') || die();
// static TypoScript
(static function () {
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPlugin(
array(
'LLL:EXT:spk_shopware/Resources/Private/Language/Tca.xlf:spk_shopware_category.wizard.title',
'spk_shopware_category',
'EXT:spk_shopware/Resources/Public/Icons/ContentElements/spk_shopware_category.gif'
),
'CType',
'spk_shopware'
);
$temporaryColumn = array(
'tx_spk_shopware_category' => array (
'exclude' => 1,
'label' => 'LLL:EXT:spk_shopware/Resources/Private/Language/Tca.xlf:spk_shopware_category.title',
'config' => array (
'type' => 'select',
'itemsProcFunc' => SPK\Shopware\Hook\ShopwareCategorySelect::class . '->listAvailableShopwareCategories',
'items' => array(
array('test 1', '8'),
array('test 2', '10'),
),
'maxitems' => 1,
'minitems' => 1,
'required' => true,
)
)
);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns(
'tt_content',
$temporaryColumn
);
})();
// Configure the default backend fields for the content element
$GLOBALS['TCA']['tt_content']['types']['spk_shopware_category'] = array(
'showitem' => '
--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xml:palette.general;general,
tx_spk_shopware_category
');
CategorySelect.php
<?php
namespace SPK\Shopware\Hook;
class ShopwareCategorySelect
{
public function listAvailableShopwareCategories(&$config)
{
$config['items'][] = ["Tim", 0];
$config['items'][] = ["Tom", 1];
$config['items'][] = ["Jerry", 2];
array_push($config['items'], ["as", 1]);
return $config;
}
}
我看到自定义元素和新的 select 字段,但只有配置中的测试元素。我不知道我错过了什么。
你真的不需要return任何东西。您只想修改列的项目。尝试以下操作:
public function listAvailableShopwareCategories(&$config)
{
$config['items'][] = ["Tim", 0];
$config['items'][] = ["Tom", 1];
$config['items'][] = ["Jerry", 2];
$this->getItems = $config['items'];
}
您通过在 TCA 上呈现之前添加项目来修改 &$config
。这就是为什么您的 PHP 文件位于 Hooks 文件夹下的原因。它只是挂钩响应之间的项目:)
看来,TYPO3 没有找到您的class。请检查您是否提供了适当的信息:
通过 composer.json
,部分“autoload”:
{
"name": "vendorname/my-extension",
"type": "typo3-cms-extension",
// ...
"autoload": {
"psr-4": {
"Vendorname\MyExtension\": "Classes/"
}
}
}
...或通过 ext_emconf.php
,部分“autoload”:
<?php
$EM_CONF[$_EXTKEY] = [
'title' => 'My Extension',
// ...
'autoload' => [
'psr-4' => [
'Vendorname\MyExtension\' => 'Classes'
]
]
];