Subpanels

Un article de Wiki CRM-France.

Jump to: navigation, search

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';