Hello,

Nice to hear that developers want to use metadata as central point for all 
module control.

Tabs:

You are right, it is not the best time to add it to 4.7, but you can similar 
thing with menu.xml in module directory.
The only thing you can not do with menu.xml, is positioning and displaying on 
specific module select, if is global.

<?xml version="1.0" encoding="ISO-8859-15"?>
<OX>
    <OXMENU id="NAVIGATION_ESHOPADMIN">
        <MAINMENU id="mxextensions">
            <SUBMENU id="mxmodule" cl="module" list="module_list">
                <TAB id="tbclmymoduletest" cl="myModuleTest"/>
            </SUBMENU>
        </MAINMENU>
    </OXMENU>
</OX>

Title translations has to be defined in admin language file.

'tbclmymoduletest' => 'MYMODULE_TEST',

Constraints and Database:

* Dynamic module constraints and database table creations in is our plans for 
future.

Improvements in module system ( for version 4.7 ):

1. Added activated module version tracking (for future install/update 
functionality)

2. Fixed module settings management, now they can be edited even if module is 
not active (as suggested by AZ in oxid commons).

3. Shop file structure transformations affected module system too (language 
files and template blocks), but backward compatibility is preserved.

    Frontend translations
    modules/mymodule/out/lang => modules/mymodule/translations/

    Admin translations
    modules/mymodule/out/admin/ => modules/mymodule/views/admin/

    Template blocks files has to be written including full path from module 
directory.

4. Introduced module events, executed on module activation and deactivation, 
more events will come in other releases

    'events'       => array(
                            'onActivate'   => 'myModuleTestEvents::onActivate',
                            'onDeactivate' => 'myModuleTestEvents::onDeactivate'
    )
   'files'        => array(
        "myModuleTestEvents"  => "mymodule/core/mymoduletestevents.php",
    ),

Greetings

Alfonsas Cirtautas

________________________________
From: [email protected] 
[[email protected]] on behalf of Robert Rosendahl 
[[email protected]]
Sent: Tuesday, October 16, 2012 12:44 AM
To: OXID eSales Mailingliste
Subject: [oxid-dev-general] module handling in admin (eShop 4.7.0 RC1)


Hi,

it's probably too late for OXID eShop 4.7, as the first release candidate has 
already been published, but I thought I'd share some thoughts on module 
handling in the admin area anyway ;-)

I think it would be very useful to be able to add tabs to modules, e.g. by 
defining language constants and admin controller classes in the metadata, e.g.:

$aModule = array(
    // ...
    'id' => 'mymodule',
    'tabs' => array(
        array( 'title' => 'MYMODULE_TEST', 'class' => 'myModuleTest', 
'position' => 10 ),
    ),
    'files' => array(
        'myModuleTest' => 'mymodule/admin/mymoduletest.php',
    ),
    // ...
);

This should result in a tab with the translation for 'MYMODULE_TEST' being 
shown when the module with id 'mymodule' has been selected in the list. The tab 
should be shown in addition to the usual "Installed Shop Modules", "Overview" 
and "Settings" tabs. This tab only appears when this module has been selected 
and disappears when another one is selected.

That would allow us to add tabs to the modules in the "extensions" menu in the 
admin area. I believe that this should be the central area where all 
information, settings and additional options for modules should be placed, so 
they can be found more easily. Most modules would not need a separate main menu 
entry if they could offer their functionality here (and the entries from the 
menu.xml only seem to appear after activating the module and then logging out 
and in again, thus refreshing the main menu sidebar).

Another thing that I would really love to have is some way to modify module 
settings constraints during runtime. I'm writing a module that needs to show 
some entries from an external system (groups and topics from the GREYHOUND 
server) and store their ids in a module setting. I'd like to fill the options 
for the "select" settings type dynamically by fetching them from the external 
system. I could do that by writing a module of module_config and then override 
the _loadConfVars() method, but I can only add the settings values (in my case 
the ids of the external entries), but not their titles. The titles are 
generated in the module_config template by appending SHOP_MODULE_ + 
setting-variable-name + value. That means that I would have to generate 
language constants on the fly, which I can't ;-)
If there was a method in either module_config oder oxModule that would return 
both the values and the (already translated) titles for the constraints of a 
module setting, then we could override that and add options for "select" 
settings dynamically during runtime.

In fact, that brings me to an idea that came to my mind the more I looked 
through the code of the oxModule class and the metadata idea in eShop 4.6: I 
think it would make sense to put all module specific stuff into oxModule, 
including an option to fetch the constraints of settings variables, the tabs 
for the admin module list (if that module has been selected), etc. That would 
give us a single point that we could extend to represent our individual module. 
The data can of course come form metadata.php initially and be read and 
interpreted by the oxModule methods, but the more methods we have in oxModule, 
the better we can customize our modules for things that can't be solved by just 
editing the metadata file.

I've read some discussions about being able to create database tables (or 
probably also to check database consistency) when activating a module. There 
could (and probably should) be a hook for that in oxModule, too.

So, if oxModule would hold all the central module handling functionality, then 
we could extend oxModule by a module and override these methods to customize 
them to our needs (e.g. always checking if $this->getId() == 'mymodule') 
first). What would be even better still (but would require more code changes in 
the shop admin) would be to be able to specify a class that extends oxModule in 
the metadata and have the shop instantiate that class instead of just oxModule 
when loading the module with that id. Then each module could represent itself 
by its own extension of oxModule, if it needs to do some fancy stuff that 
cannot be solved by the metadata directly.


What do you think? Would that make sense for your modules, too? Might be that 
I'm the only one with such obscure requirements ;-)
Which module functionality do you think could be handled in oxModule as the 
central "module" object?

Like I said, it's probably too late to make it into eShop 4.7... It just would 
be hot because 4.7 would already introduce massive api changes, and if we could 
just fit in some changes that would make integrating modules into the admin 
more easy, then this would probably save us some worries in the future.

Cheers,
  Robert
_______________________________________________
dev-general mailing list
[email protected]
http://dir.gmane.org/gmane.comp.php.oxid.general

Reply via email to