Hello Stefan,

oxNew works with an caching system, so you have to reset that cache:
For Example:
oxUtilsObject::getInstance()->resetInstanceCache('d3_cfg_mod');
oxUtilsObject::getInstance()->resetInstanceCache(oxconfig');

best regards
Kristian Hempel 

-- 


Richten Sie Fehlermeldungen und Supportanfragen bitte an 
supp...@shopmodule.com. 


Fresh ideas for your business 


D³ Data Development (Inh. Thomas Dartsch)
Stollberger Straße 23 · D-09380 Thalheim 
Fon 03721 268090 · Fax 03721 265234
 Shop: http://www.oxidmodule.com Firma: http://www.shopmodule.com 
Blog: http://blog.oxidmodule.com FAQ: http://faq.oxidmodule.com 
 OXID eSales AG
Certified Partner 
Business Level
 Profihost AG
Enterprise Partner




 Original Message processed by david®  
Re: OXID 6 - Activating a module in multiple subshops programatically 
(02-Mrz-2018 12:02)
From:   Stefan Moises
To:K1 G.
Cc:OXID eSales Mailinglist


Hey again,
any other input, maybe from an OXID core developer? :)
I don't think it is a problem with setShopId(), since it worked pretty well up 
to OXID 5.3.x ... 

How would I activate modules in multiple subshops in a loop, without getting 
that 
ERROR_METADATA_CONTROLLERS_NOT_UNIQUE
error in Oxid 6?

Thank you very much,
best regards, 
Stefan


Am 06.02.18 um 18:29 schrieb K1 G.:
 
Hi Stefan,  
only a guess by having a quick look at the code you showed:

 
config->setShopId is not a good idea. It will not reload the config object for 
current the process. So you will have a mix config objects and configuration 
values from different shops.

 
I know that oxid console is using something like "shopspecificconfig" class to 
ensure loading the correct config for a given shop id but even with that you 
need often to call setConfig on different objects and the registry.

 
I would suggest to debug and check the config objects to ensure you have the 
correct config loaded.

 
best regards

 
K1

 

 




Am 06.02.2018 13:22 schrieb "Stefan Moises" <moi...@shoptimax.de>:

Hi there,
in OXID EE 5.3.x we were using a util class to activate modules based on 
whitelist/blacklist for multiple subshops.
For OXID 6, that is not working 100% anymore, if a module defines its own 
"controllers" in metadata.php, e.g. 
https://github.com/OXIDprojects/oxid-module-internals

'controllers' => [
'module_internals_metadata' => 
\OxidCommunity\ModuleInternals\Controller\Admin\Metadata::class,
'module_internals_state' => 
\OxidCommunity\ModuleInternals\Controller\Admin\State::class,
'module_internals_utils' => 
\OxidCommunity\ModuleInternals\Controller\Admin\Utils::class,
],
Now if I use this class

https://github.com/shoptimax/ioly_installer/blob/master/IolyInstallerCore.php#L450
and ModuleInstaller::activate($oModule):
        foreach ($aShopIds as $shopId) {
            try {
                $oConfig->setShopId($shopId);
                $oModule = oxNew('oxModule');
                if ($oModule->load($sModuleId)) {
                    $oModuleCache = oxNew('oxModuleCache', $oModule);
                    $oModuleInstaller = oxNew('oxModuleInstaller', 
$oModuleCache);
                    if ($oModuleInstaller->activate($oModule)) {
                    ... 

to activate the module for multiple subshops, I get an exception after the 
first subshop, e.g.
Loaded moduleinternals module, trying to activate ...
Error activating module 'moduleinternals': Fehler: Modul nicht aktiviert.<br 
/>In einem Shop oder Sub-Shop müssen Schüssel und Werte für "controllers" 
eindeutig sein.<br />Folgende Schlüssel oder Werte für "controllers", die in 
der Datei metadata.php dieses Moduls definiert sind, existieren schon im 
Shop:<br /> 
OxidCommunity\ModuleInternals\Controller\Admin\Metadata,OxidCommunity\ModuleInternals\Controller\Admin\State,OxidCommunity\ModuleInternals\Controller\Admin\Utils
#0 /var/www/html/demo-oxid6/source/oxfunctions.php(103): 
OxidEsales\EshopCommunity\Core\UtilsObject->oxNew('OxidEsales\\Esho...')
#1 
/var/www/html/demo-oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/Module/ModuleInstaller.php(100):
 oxNew('OxidEsales\\Esho...')
#2 /var/www/html/demo-oxid6/vendor/ioly/installer/IolyInstallerCore.php(450): 
OxidEsales\EshopCommunity\Core\Module\ModuleInstaller->activate(Object(OxidCommunity\ModuleInternals\Core\Module))
#3 /var/www/html/demo-oxid6/vendor/ioly/installer/IolyInstallerCore.php(417): 
ioly\IolyInstallerCore::activateModule('moduleinternals', '1')
#4 /var/www/html/demo-oxid6/vendor/ioly/installer/IolyInstallerCore.php(184): 
ioly\IolyInstallerCore::activateModulesWhitelisted()
#5 /var/www/html/demo-oxid6/source/install.php(27): 
ioly\IolyInstallerCore::run('/var/www/html/g...', false, false, false)
#6 {main}
So it seems to work for the first subshop, but then the check for "duplicate" 
controllers throws an Exception.

Any idea how to fix this? It seems that the ModuleInstaller isn't aware of the 
different subshop ... I've also tried to set the Config with e.g.
$oModuleInstaller->setConfig($oConfig);
etc., but that didn't help either.
Thanks,
Stefan


-- 
--
************************************
Stefan Moises
Manager Research & Development
shoptimax GmbH
Ulmenstraße 52 H
90443 Nürnberg
Tel.: 0911/25566-0
Fax: 0911/25566-29
moi...@shoptimax.de
http://www.shoptimax.de

Geschäftsführung: Friedrich Schreieck
Ust.-IdNr.: DE 814340642
Amtsgericht Nürnberg HRB 21703
  
************************************

 


-- 
--
************************************
Stefan Moises
Manager Research & Development
shoptimax GmbH
Ulmenstraße 52 H
90443 Nürnberg
Tel.: 0911/25566-0
Fax: 0911/25566-29
moi...@shoptimax.de
http://www.shoptimax.de

Geschäftsführung: Friedrich Schreieck
Ust.-IdNr.: DE 814340642
Amtsgericht Nürnberg HRB 21703
  
************************************

Reply via email to