Hi,
if you extend several view classes with the same module, then this will
probably work in most cases, because only one view class is instantiated
(there's only one view specified by the cl=... parameter).
When extending core classes, and more than one of those gets instantiated, then
you will probably run into problems because of the "magic" parent classes (like
Alfonsas wrote in the bugtracker - I'm partly repeating it here so the mailing
list audience doesn't have to cross-check the bugtracker ;-) ).
So if you've got a module class "myview" and register it to several views (e.g.
alist and details):
class myview extends myview_parent { ... }
then OXID eShop will resolve this to create a class myview_parent that extends
the view that is being requested by the "cl" parameter.
So if you call index.php?cl=alist then this class will look like this:
class myview_parent extends alist {}
And if you call index.php?cl=details then it will look like this:
class myview_parent extends details {}
This is why it will not cause problems with views in most cases.
When using the same module class to extend two core classes that might get used
at the same time, then you're bound for trouble.
Let's say your module "mycore" extends oxarticle and oxcategory:
class mycore extends mycore_parent { ... }
If oxcategory gets instantiated first then the parent class will be created
like this:
class mycore_parent extends oxcategory {}
If oxarticle gets instantiated later, then the parent class won't change
because it has already been created. This will lead to your product being
derived from oxcategory and not oxarticle:
$oProduct = oxNew('oxArticle'); // mycore extends mycore_parent extends
oxcategory (and not oxarticle)
In the bugtracker, you wrote that you got some sql error. I haven't tried this,
but I suspect that this will happen because oxarticlelist will make the shop
use the oxarticles database table, while your product class is derived from
oxcategory and that will use columns from oxcategories in any generated queries.
So, in the end, you can usually get away with a single module extending several
views (in fact some of the wysiwyg editor modules for the admin do this), but
you shouldn't extend different core classes (or anything except views) with a
single module.
Best regards,
Robert
-----Ursprüngliche Daten-----
Datum: 23.10.2012 15:44:10
Von: Jungclaus, Tobias <[email protected]>
An: [email protected] <[email protected]>
Betreff: [oxid-dev-general] regarding diamond problem (report #4638)
Vorgang: T-MTI0VL83K4-56
> Hi devs,
>
> https://bugs.oxid-esales.com/view.php?id=4638
>
> Thank you for the detailed explanations ndash that is really interesting!
>
> However in another module it works fine: I extend all five
> checkout-view-classes with the same class.
>
> In this class I extend the getTitle function (calling parent), and all works
> fine.
>
> What may be the difference here?
>
> ( I just want to be sure, that our current checkout doesnt promptly vanish in
> a puff of logic ;-) )
>
> TJ
>
> _______________________________________________
> dev-general mailing list [email protected]
> http://dir.gmane.org/gmane.comp.php.oxid.general
_______________________________________________
dev-general mailing list
[email protected]
http://dir.gmane.org/gmane.comp.php.oxid.general