2010-12-06 32 views

Répondre

2

L'API du module 2.x permet. Documentation ici: http://expressionengine.com/user_guide/development/modules.html

Vous pouvez combiner un module et l'extension du même type avec une structure comme celle-ci:

/system/expressionengine/third_party/addon_name/ 
    ext.addon_name.php 
    language/ 
     english/ 
      lang.addon_name.php 
    mcp.addon_name.php 
    mod.addon_name.php 
    tab.addon_name.php # Add fields to tab here, per API spec 
    upd.addon_name.php # Add/remove tab here, per API spec

Lorsqu'un utilisateur installe soit l'extension ou du module, ils seront automatiquement demandé si elles vouloir installer les deux en même temps. Évidemment, si le but est juste pour ajouter un onglet/champs à l'éditeur, vos classes mcp et mod peuvent être juste le minimum nécessaire pour installer un module avec succès.

Espérons que c'est un bon point de départ.

+0

Ahhh, j'ai déjà construit un module mais je n'ai pas vu trucs de tabulation. Merci. – Musa

+0

@Musa, la partie onglet/champ de l'API du module est nouvelle pour EE 2.x, avec l'API Fieldtype. J'ai eu la chance de commencer à vraiment creuser dans l'EE avec 2.x et je me retrouve continuellement à remercier mes chanceuses étoiles que les développeurs EE ont si bien répondu à leur communauté de développement. (Notez également que l'API Fieldtype est basée sur l'API Fieldframe de Pixel & Tonic.) Http://pixelandtonic.com/fieldframe) – eyelidlessness

2

Pour ajouter à la première réponse,

une chose que j'avais constamment des problèmes avec est de ne pas appeler la méthode add_layout_tabs partout dans le fichier de mise à jour de votre module (par exemple .le fichier qui commence par upd.)

Supposons donc que votre fichier de mise à jour s'appelle: upd.addon_name.php. Ensuite, dans le install ressemble à ceci (note: les fonctions suivantes font partie de l'intérieur de votre fichier de mise à jour de classe Addon_name_upd:

function install() { 

    // ... create databases or any necessary code for your module 

    $this->EE->load->library('layout'); 
    $this->EE->layout->add_layout_tabs($this->tabs(), 'addon_name'); 

    return TRUE; 
} 

Notez l'appel à $this->tabs() méthode: Cette méthode ressemble à ceci:

function tabs() { 
    $tabs['addon_name'] = array(
    'field_1_inside_publish_form' => array(
    'visible' => 'true', 
    'collapse'=> 'false', 
    'htmlbuttons' => 'true', 
    'width' => '100%' 
    ) 
); 

    return $tabs; 
} 

field_1_inside_publish_form est un champ qui serait défini dans votre fichier onglet correspondant pour le module (c.-à-tab.addon_name.php).

la méthode d'installation sera en vigueur s ave un nouvel onglet à la mise en page de publication existante qui comprend la configuration de l'onglet de votre module.

Cependant, vous devez ajouter une méthode pour supprimer votre configuration dans la méthode de désinstallation du fichier de mise à jour en appelant la méthode delete_layout_tabs comme ceci:

function uninstall() { 

    // necessary code to drop your database tables or whatever 

$this->EE->load->library('layout'); 
$this->EE->layout->delete_layout_tabs($this->tabs(), 'addon_name'); 

return TRUE; 

} 

une chose, si vous développez comme je le fais: faire un petit changement ici, testez votre changement, revenez et codez plus, alors vous constaterez que si les nouveaux champs ajoutés au fichier d'onglet tab.addon_name.php après que votre module est activé n'apparaissent pas dans votre nouvel onglet sur la page de publication. La raison en est que la méthode add_layout_tabs que vous appelez dans la méthode d'installation de votre fichier de mise à jour doit être exécutée. Cependant, cette méthode n'est exécutée que lorsque vous activez votre module. Cela signifie que vous devez désactiver votre module, ce qui est un frein si votre module ajoute des tables de base de données.Heureusement, vous pouvez faire en sorte que la méthode de mise à jour de votre fichier de mise à jour charge votre nouvelle configuration (en plus d'ajouter ou de supprimer de nouvelles tables de base de données.)

L'idée est de supprimer la configuration précédente ajoutez la configuration, qui, appelle votre méthode onglets qui a les noms des nouveaux champs pour la section de l'onglet de votre module.

Ainsi, supposons que votre méthode onglets a un nouveau champ appelé « field_2_inside_publish_form » comme ceci:

function tabs() { 
$tabs['addon_name'] = array(
    'field_1_inside_publish_form' => array(
    'visible' => 'true', 
    'collapse'=> 'false', 
    'htmlbuttons' => 'true', 
    'width' => '100%' 
    ), 
    'field_2_inside_publish_form' => array(
    'visible' => 'true', 
    'collapse'=> 'false', 
    'htmlbuttons' => 'true', 
    'width' => '100%' 
    ) 
); 
} 

alors votre méthode de mise à jour peut mettre à jour la mise en page comme si (supposons que vous avez mis à jour votre $this->version propriété dans la fichier udpate de « 1.0 » à « 1.5 ».

function update($current='') { 
    // don't do anything if the version hasn't changed 
    if($current == $this->version) { 
    return FALSE; 
    } 

    // the version property has a version higher than current version in db 
    // this means the module is being updated. 
    if($current < $this->version) { 
    // update the tab layout 

    // delete old layout 
    $this->EE->load->library('layout'); 
    $this->EE->layout->delete_layout_tabs($this->tabs(), 'addon_name'); 

    // add new tab layout which calls tabs method with updated code 
    $this->EE->load->library('layout'); 
    $this->EE->layout->add_layout_tabs($this->tabs(), 'addon_name'); 

    } 
    return TRUE; 
} 

Rappelez-vous que la méthode de mise à jour du fichier de mise à jour de votre module s'exécuter chaque fois que vous êtes dans le panneau de contrôle de votre module page définir d dans votre fichier de page de panneau de commande de modules (c.-à-d. mcp.addon_name.php). La page principale du panneau de configuration de votre module correspond probablement à la méthode d'index de la classe Addon_name_mcp de votre fichier de page du panneau de commande.

Il correspondrait à un lien uri comme ceci: admin.php?S=0&D=cp&C=addons_modules&M=show_module_cp&module=addon_name&method=index

espoir qui aide. C'est un peu long mais je l'ai écrit plus pour mon propre bénéfice que pour quelqu'un d'autre (parce que j'ai perdu 3 heures à essayer de faire fonctionner mon module.)