PHP Fatal error: Access level to CustomfiltersModelProducts::populateState() must be public (as in class VirtueMartModelProduct) in /../domains/...ru/public_html/components/com_customfilters/models/products.php on line 33
how to fix it fast ? pls help
/**
* Class containing the main logic of the component
* @author sakis
*
*/
class CustomfiltersModelProducts extends VirtueMartModelProduct
{
As a fast temporary solution you can change "private" to "public" on this line in /components/com_customfilters/models/products.php:
private function populateState($ordering = 'ordering', $direction = 'ASC')
Permanent solution should be provided by the extension developer.
Quote from: 2dmaster on March 08, 2016, 10:23:04 AM
Not at all.
Virtuemart cannot change the functions visibility in minor versions.
It's not correct to force any developer to change it's code in minor versions.
There should be a minimum contract in minor updates.
I have already talked to Max about that and i think he understood that and he will fix it in the core files of VM.
Kind Regards,
Sakis
To avoid confusions. This is my response in the communication we had with 2dmaster
In princip correct, but here it is a bit different.
There is a joomla function, called "populateState". I did not use this function, then I wrote a function to set certain states by request/session to the model.
Then I noticed, that populateState is an empty function which is meant to be overriden to provide this function. There was no need to change it, so I let it last years as is.
Working on the VMF, I had to implement the populateState to the vModel. Then I decided to write the product model proper and use the old updateRequests as proxy function (fallback for old code) and to use directly the correct populateState. I thought also to use another name for it, but this would lead to confusion for later development (why vm does it different than joomla, would be the question).
The function is defined as
Quote
protected function populateState()
{
}
I accidently added it with "private" instead of "protected". Balai already notified me in our skype dev chat. So that was the error, but I still defend, that we use now the correct populateState. It is also the clean solution to keep selected filters.
Thanks for clarifying that Max.
I suppose that it will become protected again the next version. Right?
As we already discussed there should be some basic contracts (function/class names and visibility) to ensure code stability in minor updates.
I think it's the no 1 priority to ensure that people's shops will continue to work with their installed addons when the apply minor updates.
It is already protected, when you would have downloaded the last version in the skype chat. But it may be changed to public in vm3.1, because there is no reason to forbid the use from outside.
and as you can see, the problem was not to use the correct function now, the problem was that I accidently set it on private, cause I developed it on the vModel, not the old vmModel.