DVelum 0.9 RC Version Released

March 1, 2013

In this release we have started adjusting the code in compliance with the contemporary standards, minimized the coupling of objects and provided for dependency injection through setters.


1. Zend_Db_Select own implementation of a higher performance.

2. Extended Zend_Db_Adapter_Mysqli adapter excluded from the Zend_Db library; now it uses our own Db_Select implementation.

3. Core code improved, the cohesion of objects  and number of static methods decreased.

4. IDE fixed:

  • Icon property editor added: now the icon can be selected from a list.

  • app.editWindow component improved: a link to east panel and properties added:
    • hideEastPanel -  hides the east panel (on the right);
    • eastPanelCollapsed - the east panel is collapsed by default.
  • TreePanel, TreeStore components added:

  • #244 Fixed in IDE: unable to assign properties to ProxyWriter;
  • #261 Fixed in IDE column editor: error inputting title without confirming the action by clicking ‘Enter’;
  • Fixed in IDE: editing Proxy properties, Events panel removed.

5. CRUD interface generator improved.

6. #234 Fixed:  error saving history upon disabling the feature in the OR object settings.

7. Fixed in the automatic interface generator: wrong data format of the DataTime field.

8. Fixed: error saving boolean false value of Db_object with strict mode of MySQL performance enabled.

9. Added: logging errors with saving Db_Object.

10. Revised: the mechanism of building url addresses in the Layout Designer, replace templates being used now. The solution makes it possible to integrate third-party modules and considerably facilitates installing the platform to the directory different from document root (the implementation will follow in one of the coming releases).

11. Revised: Autoloader of classes, performance improved.

12. Settings of the database connection adapter moved to the configuration files.

13. About 40 unit tests added.

14. ORM management interface improved: data viewing and editing now possible.

15. The ORM core improved: objects now can be stored on different servers by just redefining the database connector in the model (Diversification of objects presupposes complete relocation of the objects of the given type to another database, horizontal sharding being planned on).

16. ORM Builder improved: now, database restructuring errors show as an error notification (ORM management interface).

17. Object configuration validator added: now, links to non-existing objects are highlighted.

18. Foreign keys support added (in a test mode so far). The functionality is enabled in config/main.php, foreign_keys => true (Disabled by default). Foreign keys are built for the objects using the same database connection adapter, the same database and InnoDb repository. Foreign Key is used only for the fields of ‘link to object’ type.

19. Adjusted in compliance with the strict standard:

  • Fields of the text, longtext and other types can’t have DEFAULT value anymore (if the field is not required, the value is NULL);
  • Optional link to object now shows NULL instead of 0 for the empty value.

20. Object editing improved: now it is allowed to update the type of the existing objects (with version control on and off).

21. Fixed: the error saving Db_Object via API without validating the required fields, that resulted in an error in MySQL strict mode.

22. Localization dictionaries improved: now, they use lazy load.

23. Public area module management improved: now, embedded controllers are available for routing (the functionality only works for the module based routing).

24. App.SelectWindow component improved. A configuration file created for the scripts connected on all the pages of the admin panel.

25. User class now includes the User_Admin class functionality, which has been declared deprecated and now serves only for the purpose of version compatibility support. API has got more transparent.

26. ORM statistics improved: ‘Show table status’ command execution has been adjusted for the innodb tables (the actual number of rows is not shown).
The official MySQL 5.1 documentation acknowledges that InnoDB does not give accurate statistics with SHOW TABLE STATUS. SHOW TABLE STATUS does not give accurate statistics on InnoDB tables, except for the physical size reserved by the table. The row count is only a rough estimate used in SQL optimization.
Now, the number of innodb rows is counted by separate queries.

27. Autoloader now complies with the PSR0 standard, which makes it possible to use namespace.

28. A lot has been done to facilitate third-party solutions (modules) integration. Now, the system allows to connect third-party modules without necessarily diversifying the files within the system: each module is stored in its own directory. Third-party modules may be disabled and uninstalled.

Currently, a third-party module can include:

  • Classes;
  • ORM objects;
  • Language dictionaries;
  • Configuration files;
  • Layout themes;
  • Templates (do not require using a theme);
  • Static content (images);
  • JS files;
  • IDE projects.

There has also been implemented the mechanism of setting access permissions to third-party modules. Third-party solutions module works in a test mode so far.
In the nearest future we are planning on extending the functionalities and adding support of third-party components and layout designer classes.
Third-party modules support will allow developers share their solutions with ease.
Besides, we are about to introduce downloadable add-ons from the DVelum team.
As a result, there have emerged several issues of backward incompatibility.


Routers don’t have static methods now, they also perform as objects responsible for routing queries and can define the path to a functionality or module. The link to a router is now listed in protected controller properties. Swap around the similar constructions to restore controller performance.

class News_Controller extends Frontend_Controller
    public function indexAction()
    $url = Frontend_Router::findUrl(array(‘news’,’item’));
    $url = $this->_router->findUrl(array(‘news’,’item’));

It is not advisable to pass complicated objects to templates, pass data instead. Complicated objects take time to serialize for cache validation, while those including closure don’t serialize at all.

Routing of administrative controller has changed, now it is possible to connect embedded controllers as modules and set access permissions for them. Besides, the update allows to connect downloadable third-party modules. To add to this, controllers of administrative modules are no more related to ORM objects.

These updates have led to the incompatibility of the list of connected modules. However, the issue may be easily resolved by adding an additional class option to backend_modules.php. Define the name of the class connected:

'Page' =>
array (
	'dev' => false,
	'active' => true,
	'title' => 'Pages',
	'designer' => '',

Now, triggers also perform as objects. Use boolean methods to fix the incompatibility (remove the keyword static when defining methods.


The following methods are marked as deprecated and will be removed in the coming releases: Application::getConfig, Application::getStorage,  Application::getDataCache, Application::getSystemCache, Application::getDbConnection.


The following methods are no more static:

  • getPostedData;
  • insertObject;
  • updateObject;
  • unpublishObject;
  • getStagingUrl.


_queryAddFilters has been changed to queryAddFilters, accepted parameters are no longer static.

The following documentation chapters added:


Layout Designer: replacing standard DateField component to Ux_DateTimeFIeld supporting time input. Changing automatic interface generation template.

System performance improved.

Download DVelum 0.9RC