I’ve been looking for nice icons for quite some time now. I think it is time to have a good set that can be used for all admin plugins and extensions in ZenMagick.
Last week I noticed that jquery UI comes with a nice set of icons, but today I think I found the ultimate icon resource [at least for my purposes]. Not sure yet if they are all CC licenced, but some definitely are.
Thinking about events yesterday made me wonder why there is actually a very specialised method
filterResponse() for plugnis. One of the reasons was that I thought it would be nice for regular code to be able to modify the response, too.
One idea is to have some sort of resource manager that is able to access the final HTML and inject all the CSS [either explicitely or by linking .css file(s)]. That way the fact that new CSS rules are required would not need to be known in advance.
One obvious use case would be the new widget class, of course!
Looking at the code I remembered the real reason why this is so special: the HTML contents is passed into the method as parameter and the modified contets returned used as parameter for the next plugin, and so on.
Currently, events do not return values. The only parameter is a hash map that may contain any type of data.
So, to cut to the point, I changed the fireEvent() method to optionally handle return codes. The default behaviour is compatible to the current use, however it is possible for event subscriber to return a changed array.
Strictly speaking this is not really necessary as it is possible to modify the parameter array due to the reference handling in PHP5. Still, should special events require a contract where the parameter is not an array things should be ok.
So, as o f the next release [0.9.5] content filtering will be available to every piece of code that whishes to do so.
Zen Cart does have an extensive event system. One thing I feel make it not very useful is that most events are specific to a particular page. For example there is a different NOTIFY_HEADER_START_XXX event for each different page.
In ZenMagick there is the generic controller_process_start event with the actual controller instance as event parameter. In particular plugins that need to run on each page this needs some additional work. (Not much, but there are worse examples).
So, one other outcome of my work to make plugins work (better) with Zen Cart templates is to convert Zen Cart events into ZenMagick events to tigger the same event callbacks from within a Zen Cart template.
Seeing the events using the page_stats plugin is acutally quite impressive. For example a product details page (demo DVD product) looks something like this in Zen Cart:
Compare that with the same page using a ZenMagick theme:
Again, both pages where rendered without any sideboxes.
You can spot the artificial ZenMagick events in the Zen Cart event list as the keys are lower case. The differences are even more impressive with products that have lots of attributes.
I figured that rather than post stuff here and then convert the posts to wiki articles, I rather create the articles on the wiki and then mention them here.Hopefully that will save me some time and increase then number of new articles on the wiki…
One of the new features in the upcoming Zen Cart 2.0 version is going to be a reduced number of database queries for price lookup. Most of those queries are attribute related and therefore do not affect all stores/products.
Due to the current work on making ZenMagick properly available for Zen Cart templates, I’ve had the chance to do some easy comparisons. (more…)