55 public function renderField($table, $field, $row, &$PA, $config, $possibleSelectboxItems, $noMatchLabel) {
56 $valueArray = array();
57 $selectedNodes = array();
58 if (!empty($PA[
'itemFormElValue'])) {
59 $valueArray = explode(
',', $PA[
'itemFormElValue']);
61 if (count($valueArray)) {
62 foreach ($valueArray as $selectedValue) {
63 $temp = explode(
'|', $selectedValue);
64 $selectedNodes[] = $temp[0];
67 $allowedUids = array();
68 foreach ($possibleSelectboxItems as $item) {
69 if ((
int)$item[1] > 0) {
70 $allowedUids[] = $item[1];
73 $treeDataProvider = \TYPO3\CMS\Core\Tree\TableConfiguration\TreeDataProviderFactory::getDataProvider($config, $table, $field, $row);
74 $treeDataProvider->setSelectedList(implode(
',', $selectedNodes));
75 $treeDataProvider->setItemWhiteList($allowedUids);
76 $treeDataProvider->initializeTreeData();
79 $tree->setDataProvider($treeDataProvider);
80 $tree->setNodeRenderer($treeRenderer);
81 $treeData = $tree->render();
83 if (is_array($PA[
'fieldConf'][
'config'][
'items'])) {
84 foreach ($PA[
'fieldConf'][
'config'][
'items'] as $additionalItem) {
85 if ($additionalItem[1] !==
'--div--') {
86 $item = new \stdClass();
87 $item->uid = $additionalItem[1];
88 $item->text =
$GLOBALS[
'LANG']->sL($additionalItem[0]);
89 $item->selectable = TRUE;
91 $item->checked = in_array($additionalItem[1], $selectedNodes);
92 if (file_exists(PATH_typo3 . $additionalItem[3])) {
93 $item->icon = $additionalItem[3];
94 } elseif (strlen(trim($additionalItem[3]))) {
101 $itemArray[] = $treeData;
102 $treeData = json_encode($itemArray);
103 $id = md5($PA[
'itemFormElName']);
104 if (isset($PA[
'fieldConf'][
'config'][
'size']) && (
int)$PA[
'fieldConf'][
'config'][
'size'] > 0) {
105 $height = (int)$PA[
'fieldConf'][
'config'][
'size'] * 20;
109 if (isset($PA[
'fieldConf'][
'config'][
'autoSizeMax']) && (int)$PA[
'fieldConf'][
'config'][
'autoSizeMax'] > 0) {
110 $autoSizeMax = (int)$PA[
'fieldConf'][
'config'][
'autoSizeMax'] * 20;
115 $appearance = $PA[
'fieldConf'][
'config'][
'treeConfig'][
'appearance'];
116 if (is_array($appearance)) {
117 $header = $appearance[
'showHeader'] ? TRUE : FALSE;
118 $expanded = $appearance[
'expandAll'] === TRUE;
119 if (isset($appearance[
'width'])) {
120 $width = (int)$appearance[
'width'];
124 if ($PA[
'fieldChangeFunc'][
'TBE_EDITOR_fieldChanged']) {
125 $onChange = $PA[
'fieldChangeFunc'][
'TBE_EDITOR_fieldChanged'];
130 !empty(
$GLOBALS[
'TCA'][$table][
'ctrl'][
'type'])
131 && $field ===
$GLOBALS[
'TCA'][$table][
'ctrl'][
'type']
132 || !empty(
$GLOBALS[
'TCA'][$table][
'ctrl'][
'requestUpdate'])
135 if (
$GLOBALS[
'BE_USER']->jsConfirmation(1)) {
136 $onChange .=
'if (confirm(TBE_EDITOR.labels.onChangeAlert) && ' .
'TBE_EDITOR.checkSubmit(-1)){ TBE_EDITOR.submitForm() };';
138 $onChange .=
'if (TBE_EDITOR.checkSubmit(-1)){ TBE_EDITOR.submitForm() };';
142 $pageRenderer =
$GLOBALS[
'SOBE']->doc->getPageRenderer();
143 $pageRenderer->loadExtJs();
144 $pageRenderer->addJsFile(
'sysext/backend/Resources/Public/JavaScript/tree.js');
146 $pageRenderer->addExtOnReadyCode(
' 147 TYPO3.Components.Tree.StandardTreeItemData["' . $id .
'"] = ' . $treeData .
'; 148 var tree' . $id .
' = new TYPO3.Components.Tree.StandardTree({ 150 showHeader: ' . (
int)$header .
', 151 onChange: "' . $onChange .
'", 152 countSelectedNodes: ' . count($selectedNodes) .
', 153 width: ' . $width .
', 155 click: function(node, event) { 156 if (typeof(node.attributes.checked) == "boolean") { 157 node.attributes.checked = ! node.attributes.checked; 158 node.getUI().toggleCheck(node.attributes.checked); 161 dblclick: function(node, event) { 162 if (typeof(node.attributes.checked) == "boolean") { 163 node.attributes.checked = ! node.attributes.checked; 164 node.getUI().toggleCheck(node.attributes.checked); 167 checkchange: TYPO3.Components.Tree.TcaCheckChangeHandler, 168 collapsenode: function(node) { 169 if (node.id !== "root") { 170 top.TYPO3.BackendUserSettings.ExtDirect.removeFromList("tcaTrees." + this.ucId, node.attributes.uid); 173 expandnode: function(node) { 174 if (node.id !== "root") { 175 top.TYPO3.BackendUserSettings.ExtDirect.addToList("tcaTrees." + this.ucId, node.attributes.uid); 178 beforerender: function(treeCmp) { 179 // Check if that tree element is already rendered. It is appended on the first tceforms_inline call. 180 if (Ext.fly(treeCmp.getId())) { 184 afterrender: function(treeCmp) { 188 tcaMaxItems: ' . ($PA[
'fieldConf'][
'config'][
'maxitems'] ? (
int)$PA[
'fieldConf'][
'config'][
'maxitems'] : 99999) .
', 189 tcaSelectRecursiveAllowed: ' . ($appearance[
'allowRecursiveMode'] ?
'true' :
'false') .
', 190 tcaSelectRecursive: false, 191 tcaExclusiveKeys: "' . ($PA[
'fieldConf'][
'config'][
'exclusiveKeys'] ? $PA[
'fieldConf'][
'config'][
'exclusiveKeys'] :
'') .
'", 192 ucId: "' . md5(($table .
'|' . $field)) .
'", 193 selModel: TYPO3.Components.Tree.EmptySelectionModel, 194 disabled: ' . ($PA[
'fieldConf'][
'config'][
'readOnly'] || $this->tceForms->renderReadonly ?
'true' :
'false') .
' 197 ?
'tree' . $id .
'.bodyStyle = "max-height: ' . $autoSizeMax .
'px;min-height: ' . $height .
'px;";' 198 :
'tree' . $id .
'.height = ' . $height .
';' 201 tree' . $id .
'.render("tree_' . $id .
'"); 205 <div class="typo3-tceforms-tree"> 206 <input class="treeRecord" type="hidden" name="' . htmlspecialchars($PA[
'itemFormElName']) .
'" id="treeinput' . $id .
'" value="' . htmlspecialchars($PA[
'itemFormElValue']) .
'" /> 208 <div id="tree_' . $id .
'">
static extPath($key, $script='')
static makeInstance($className)
if(!defined('TYPO3_MODE')) $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['logoff_pre_processing'][]
static inList($list, $item)
static getSpriteIconClasses($iconName)