Dolphin 8: Pages
Updated API in Dolphin 8 - Pages.
It allows to display pages which are built from studio. The main difference is that old system had column based pages,
but the new one has layout based pages.
The new system has the following main features:
- Layouts - page can have any structure, not just columns.
- SEO - page can have own SEO options, like meta tags and meta keywords, as well as instructions for search bots.
- Cache - page can be cached on the server.
- Access control - page access can be controlled using member levels.
Creating the Page object
1. Add record to sys_objects_page table:
- object - name of the page object, in the format: vendor prefix, underscore, module prefix, underscore, internal identifier or nothing; for example: bx_profiles_view - profile view page.
- title - name to display as page title.
- module - the module this page belongs to.
- layout_id - page layout to use, this is id of the record from sys_pages_layouts table.
- visibile_for_levels - bit field with set of member level ids. To use member level id in bit field - the level id minus 1 as power of 2 is used, for example:
- user level id = 1 -> 2^(1-1) = 1
- user level id = 2 -> 2^(2-1) = 2
- user level id = 3 -> 2^(3-1) = 4
- user level id = 4 -> 2^(4-1) = 8
- visibile_for_levels_editable - it determines if visibile_for_levels field is editable from page builder, visibility options can be overriden by custom class and shouldn't be editable in this case.
- url - the page url, if it is static page.
- meta_description - meta description of the page.
- meta_keywords - meta keywords of the page.
- meta_robots - instructions for search bots.
- cache_lifetime - number of seconds to store cache for.
- cache_editable - it determines if cache can be edited from page builder.
- deletable - it determines if page can be deleted from page builder.
- override_class_name - user defined class name which is derived from BxTemplPage.
- override_class_file - the location of the user defined class, leave it empty if class is located in system folders.
Page can select appropriate menu automatically if module and object fields in sys_objects_page table are matched with module and name fields in sys_menu_items table.
2. Add page blocks to sys_pages_blocks table:
- object - page object name this block belongs to.
- cell_id - cell number in page layout to place block to.
- module - module name this block belongs to.
- title - block title.
- designbox_id - design box to use to diplay page block, it is id of the record from sys_pages_design_boxes table.
- visibile_for_levels - bit field with set of member level ids. To use member level id in bit field - the level id minus 1 as power of 2 is used, for example:
- user level id = 1 -> 2^(1-1) = 1
- user level id = 2 -> 2^(2-1) = 2
- user level id = 3 -> 2^(3-1) = 4
- user level id = 4 -> 2^(4-1) = 8
- type - block type:
- raw - HTML block, displayed in page builder as HTML textarea.
- html - HTML block, displayed in page builder as visual editor, like TinyMCE.
- lang - translatable language string, displayed in page builder as editable language key.
- image - just an image, displayed in page builder as HTML upload form.
- rss - RSS block, displayed in page builder as editable URL to RSS resource, along with number of displayed items.
- menu - menu block, displayed as menu selector.
- service - to display block content, the provided service method is used.
- content - depending on type field:
- raw - HTML string.
- html - HTML string.
- lang - language key.
- image - image id in the storage and alignment (left, center, right) for example: 36#center
- rss - URL to RSS with number of displayed items, for example: http://www.example.com/rss#4
- menu - menu object name.
- service - serialized array of service call parameters: module - module name, method - service method name, params - array of parameters.
- deletable - is block deletable from page builder.
- copyable - is block can be copied to any other page from page builder.
- order - block order in particular cell.
Block design boxes are stored in sys_pages_design_boxes table:
- id - consistent id, there are the following defines can be used in the code for each system block style:
- 0 - BX_DB_CONTENT_ONLY - design box with content only - no borders, no background, no caption.
- 1 - BX_DB_DEF - default design box with content, borders and caption.
- 2 - BX_DB_EMPTY - just empty design box, without anything.
- 3 - BX_DB_NO_CAPTION - design box with content, like BX_DB_DEF but without caption.
- 10 - BX_DB_PADDING_CONTENT_ONLY - design box with content only wrapped with default padding - no borders, no background, no caption; it can be used to just wrap content with default padding.
- 11 - BX_DB_PADDING_DEF - default design box with content wrapped with default padding, borders and caption.
- 13 - BX_DB_PADDING_NO_CAPTION - design box with content wrapped with default padding, like BX_DB_DEF but without caption.
- title - block name which is displayed in studio, describes block styles.
- template - template name to use to display page block.
3. Display the Page.
Use the following sample code to display page:
bx_import('BxDolPage');
$oPage = BxDolPage::getObjectInstance('sample'); // 'sample' is 'object' field from 'sys_objects_page' table, it automatically creates instance of default or custom class by object name
if ($oPage)
echo $oPage->getCode(); // print page
Changelog:
2012-01-25:
- typo - designbox_id field - sys_pages_blocks -> sys_pages_design_boxes
2012-02-03:
- alignment was added to the image block
2012-02-06:
- automatic menu selection paragraph was added
2012-02-17:
- cache_server was renamed to cache_lifetime
so, can the members create their own pages? and selectively install the apps[mods] which they WANT?