Modifier la présentation du menu contextuel
Récemment, on m'a demandé de modifier la présentation du menu contextuel dans le backend Typo3. Même si je ne le recommande pas, vous trouverez ci-dessous un petit explicatif comment procéder.
Le client désirait remonter d'un niveau les éléments qui se trouvent dans "actions sur la page".
Pour visualiser le TSconfig qui gère l'affichage du menu contextuel. Il vous suffit de vous rendre dans le module "Administration des utilisateur" et de d'activer l'affichage du TSconfig.
Le TSconfig par défaut, se présente comme ci-dessous :
[code]
options.contextMenu.table.pages {
disableItems =
items {
100 = ITEM
100 {
callbackAction = viewPage
displayCondition = canBeViewed != 0
label = LLL:EXT:lang/locallang_core.xml:cm.view
name = view
spriteIcon = actions-document-view
}
200 = DIVIDER
300 = ITEM
300 {
callbackAction = disablePage
displayCondition = getRecord|hidden = 0 && canBeDisabledAndEnabled != 0
label = LLL:EXT:lang/locallang_common.xml:disable
name = disable
spriteIcon = actions-edit-hide
}
400 = ITEM
400 {
callbackAction = enablePage
displayCondition = getRecord|hidden = 1 && canBeDisabledAndEnabled != 0
label = LLL:EXT:lang/locallang_common.xml:enable
name = enable
spriteIcon = actions-edit-unhide
}
500 = ITEM
500 {
callbackAction = editPageProperties
displayCondition = canBeEdited != 0
label = LLL:EXT:lang/locallang_core.xml:cm.edit
name = edit
spriteIcon = actions-document-open
}
600 = ITEM
600 {
callbackAction = openInfoPopUp
displayCondition = canShowInfo != 0
label = LLL:EXT:lang/locallang_core.xml:cm.info
name = info
spriteIcon = actions-document-info
}
700 = ITEM
700 {
callbackAction = openHistoryPopUp
displayCondition = canShowHistory != 0
label = LLL:EXT:lang/locallang_misc.xml:CM_history
name = history
spriteIcon = actions-document-history-open
}
800 = DIVIDER
900 = SUBMENU
900 {
100 = ITEM
100 {
callbackAction = newPageWizard
displayCondition = canCreateNewPages != 0
label = LLL:EXT:lang/locallang_core.xml:cm.new
name = new
spriteIcon = actions-page-new
}
200 = DIVIDER
300 = ITEM
300 {
callbackAction = enableCutMode
displayCondition = isInCutMode = 0 && canBeCut != 0 && isMountPoint != 1
label = LLL:EXT:lang/locallang_core.xml:cm.cut
name = cut
spriteIcon = actions-edit-cut
}
400 = ITEM
400 {
callbackAction = disableCutMode
displayCondition = isInCutMode = 1 && canBeCut != 0
label = LLL:EXT:lang/locallang_core.xml:cm.cut
name = cut
spriteIcon = actions-edit-cut-release
}
500 = ITEM
500 {
callbackAction = enableCopyMode
displayCondition = isInCopyMode = 0 && canBeCopied != 0
label = LLL:EXT:lang/locallang_core.xml:cm.copy
name = copy
spriteIcon = actions-edit-copy
}
600 = ITEM
600 {
callbackAction = disableCopyMode
displayCondition = isInCopyMode = 1 && canBeCopied != 0
label = LLL:EXT:lang/locallang_core.xml:cm.copy
name = copy
spriteIcon = actions-edit-copy-release
}
700 = ITEM
700 {
callbackAction = pasteIntoNode
displayCondition = getContextInfo|inCopyMode = 1 || getContextInfo|inCutMode = 1 && canBePastedInto != 0
label = LLL:EXT:lang/locallang_core.xml:cm.pasteinto
name = pasteInto
spriteIcon = actions-document-paste-into
}
800 = ITEM
800 {
callbackAction = pasteAfterNode
displayCondition = getContextInfo|inCopyMode = 1 || getContextInfo|inCutMode = 1 && canBePastedAfter != 0
label = LLL:EXT:lang/locallang_core.xml:cm.pasteafter
name = pasteAfter
spriteIcon = actions-document-paste-after
}
900 = DIVIDER
1000 = ITEM
1000 {
callbackAction = removeNode
displayCondition = canBeRemoved != 0 && isMountPoint != 1
label = LLL:EXT:lang/locallang_core.xml:cm.delete
name = delete
spriteIcon = actions-edit-delete
}
label = LLL:EXT:lang/locallang_core.xml:cm.copyPasteActions
}
}
}
[/code]
L'élément 900 est le sous-menu que nous voulons modifier.
Il suffit donc d'ajouter ce TSconfig aux utilisateurs ou groupes d'utilisateur.
[code]
## Modif de présentation du menu contextuel.
# Les élément se trouvant dans "action sur la page" sont remontés d'un niveau
options.contextMenu.table.pages.items {
# del default submenu
900 >
# newPageWizard
900 = ITEM
900 {
callbackAction = newPageWizard
displayCondition = canCreateNewPages != 0
label = LLL:EXT:lang/locallang_core.xml:cm.new
name = new
spriteIcon = actions-page-new
}
910 = DIVIDER
# enableCutMode
920 = ITEM
920 {
callbackAction = enableCutMode
displayCondition = isInCutMode = 0 && canBeCut != 0 && isMountPoint != 1
label = LLL:EXT:lang/locallang_core.xml:cm.cut
name = cut
spriteIcon = actions-edit-cut
}
# disableCutMode
930 = ITEM
930 {
callbackAction = disableCutMode
displayCondition = isInCutMode = 1 && canBeCut != 0
label = LLL:EXT:lang/locallang_core.xml:cm.cut
name = cut
spriteIcon = actions-edit-cut-release
}
# enableCopyMode
940 = ITEM
940 {
callbackAction = enableCopyMode
displayCondition = isInCopyMode = 0 && canBeCopied != 0
label = LLL:EXT:lang/locallang_core.xml:cm.copy
name = copy
spriteIcon = actions-edit-copy
}
# disableCopyMode
950 = ITEM
950 {
callbackAction = disableCopyMode
displayCondition = isInCopyMode = 1 && canBeCopied != 0
label = LLL:EXT:lang/locallang_core.xml:cm.copy
name = copy
spriteIcon = actions-edit-copy-release
}
# pasteIntoNode
960 = ITEM
960 {
callbackAction = pasteIntoNode
displayCondition = getContextInfo|inCopyMode = 1 || getContextInfo|inCutMode = 1 && canBePastedInto != 0
label = LLL:EXT:lang/locallang_core.xml:cm.pasteinto
name = pasteInto
spriteIcon = actions-document-paste-into
}
# pasteAfterNode
970 = ITEM
970 {
callbackAction = pasteAfterNode
displayCondition = getContextInfo|inCopyMode = 1 || getContextInfo|inCutMode = 1 && canBePastedAfter != 0
label = LLL:EXT:lang/locallang_core.xml:cm.pasteafter
name = pasteAfter
spriteIcon = actions-document-paste-after
}
# divider
980 = DIVIDER
# removeNode
990 = ITEM
990 {
callbackAction = removeNode
displayCondition = canBeRemoved != 0 && isMountPoint != 1
label = LLL:EXT:lang/locallang_core.xml:cm.delete
name = delete
spriteIcon = actions-edit-delete
}
}
[/code]
Dans cet exemple, j'ai vidé le SUBMENU. Puis, j'ai réécrit un par un tous les éléments du menu mais un niveau plus haut.
Une solution plus courte pourait être de reprendre les configurations déjà existantes puis vider le SUBMENU. Cela donnerait quelque chose dans ce genre :
[code]
## Modif de présentation du menu contextuel.
# Les élément se trouvant dans "action sur la page" sont remontés d'un niveau
options.contextMenu.table.pages.items {
801 < .900.100
802 = DIVIDER
803 < .900.300
804 < .900.400
805 < .900.500
806 < .900.600
807 < .900.700
809 < .900.800
810 = DIVIDER
811 < .900.1000
# del default submenu
900 >
}
[/code]
Cette solution nécessite beaucoup mois de code. A vous de voir laquelle vous désirez utiliser.
Ces configurations ont été faites sur la version 4.5.3 de Typo3