Subpanels
Un article de Wiki CRM-France.
Les Subpanels servent à afficher les relations existantes avec les autres modules. Ils se trouvent dans la partie "DetailView" des pages, ils sont définis dans différents endroits du code que nous allons voir plus en détail.
Les éléments qui suivent sont les endroits du code à partir des quels les subpanels sont générés. Il est nécessaire de lancer la reconstruction des relations de la section réparation du panneau administration après avoir modifié ou créé de nouveaux subpanels
Sommaire |
Vardefs
Le module qui contient le subpanel est celui où l'index de tableau vardefs est défini. On y trouve un index faisant référence au module qui apparaîtra en tant que subpanel de type 'link'.
1.1 exemple de liaison un-à-plusieurs 1.2 exemple de liaison plusieurs-à-plusieurs
Relationship Metadata
Si vous avez besoin d'une relation de type "many-to-many" , une table définissant cette relation doit exister. S'il s'agit d'une nouvelle relation, alors vous devez ajouter les détails de la relation du fichier relation (accounts_bugsMetaData.php dans notre exemple) au fichier TableDictionary.php qui se trouve dans le répertoire "/modules". Vous devez ensuite lancer une réparation de la base de données (via le panneau admin) pour créer la nouvelle table de relations("accounts_bugs" dans l'exemple qui suit).
Dans le répertoire "./metadata", la relation doit exister elle doit aussi être incluse dans le tableau $dictionary. Pour rester cohérent avec l'exemple précédent "accounts_bugs", voici le contenu que l'on devrait trouver dans le fichier accounts_bugsMetaData.php
$dictionary['accounts_bugs'] = array(
'table' => 'accounts_bugs', //Nom de la table créée dans la base de données
'fields' => array (
array('name' =>'id', 'type' =>'varchar', 'len'=>'36',), // id unique de la relation
array('name' =>'account_id', 'type' =>'varchar', 'len'=>'36'), // the id for the account
array('name' =>'bug_id', 'type' =>'varchar', 'len'=>'36'), // id du bug
array('name' => 'date_modified','type' => 'datetime'), // nécessaire
array('name' =>'deleted', 'type' =>'bool', 'len'=>'1', 'required'=>true, 'default'=>'0') // nécessaire
),
// les indices sont nécessaires pour l'indexation et la performance
'indices' => array (
array('name' =>'accounts_bugspk', 'type' =>'primary', 'fields'=>array('id')),
array('name' =>'idx_acc_bug_acc', 'type' =>'index', 'fields'=>array('account_id')),
array('name' =>'idx_acc_bug_bug', 'type' =>'index', 'fields'=>array('bug_id')),
array('name' => 'idx_account_bug', 'type'=>'alternate_key', 'fields'=>array('account_id','bug_id'))
),
'relationships' => array(
'accounts_bugs' => array(
'lhs_module'=> 'Accounts', // module gauche - doit correspondre à l'index de $beanList
'lhs_table'=> 'accounts', // Nom de la table de gauche
'lhs_key' => 'id', // Clé à utiliser à partir de la table de gauche
'rhs_module'=> 'Bugs', // module droit - doit correspondre à l'index de $beanList
'rhs_table'=> 'bugs', // Table de droite
'rhs_key' => 'id', // Clé à utiliser à partir de la table de droite
'relationship_type'=>'many-to-many', // type de relation
'join_table'=> 'accounts_bugs', // jonction de table - table utilisée pour créer une jointure d'items
'join_key_lhs'=>'account_id', // clé de table gauche - devrait exister dans la définition des champs de tables suivants
'join_key_rhs'=>'bug_id' // clé de table droite - devrait exister dans la définition des champs de tables suivants
)
)
)
Layout Defs
Il s'agit de la variable qui précise quels modules sont liés dans le but de permettre la création de subpanels. Ces relations sont stockées dans $layout_defs array $layout_defs[<module>]['subpanel_setup'][<related_module>].
Plus d'infos sur: Layout Defs
Cet exemple provient du fichier metadata/subpaneldefs.php du module "account" (Comptes)
'contacts' => array(
'order' => 30,
'module' => 'Contacts',
'subpanel_name' => 'default', // dans ce cas il se servira de ./modules/Contacts/subpanels/default.php
'get_subpanel_data' => 'contacts',
'add_subpanel_data' => 'contact_id',
'title_key' => 'LBL_CONTACTS_SUBPANEL_TITLE',
'top_buttons' => array( // ce tableau définit les boutons du haut
array('widget_class' => 'SubPanelTopCreateAccountNameButton'),
array('widget_class' => 'SubPanelTopSelectButton', 'mode'=>'MultiSelect')
),
),
Langage
Dans le fichier "language" (langage) du module contenant le subpanel, les valeurs suivantes doivent être ajoutées.
La référence utilisée dans 'title_key' tel que ci-dessous
Dans notre exemple ce serait
$mod_strings['LBL_CONTACTS_SUBPANEL_TITLE'] = 'Contacts';
La référence utilisée dans 'vname' telle qu'indiquée dans la section vardefs
Dans notre exemple ce serait
$mod_strings['LBL_CASES'] = 'Cases';

