Index: branches/5.3.x/core/units/helpers/menu_helper.php =================================================================== diff -u -N -r15698 -r16381 --- branches/5.3.x/core/units/helpers/menu_helper.php (.../menu_helper.php) (revision 15698) +++ branches/5.3.x/core/units/helpers/menu_helper.php (.../menu_helper.php) (revision 16381) @@ -1,6 +1,6 @@ array('Filename'), + // 'created_on' => array('CreatedOn', '-- d/m/Y --'), + ); + + /** + * Category dummy for formatting purposes. + * + * @var CategoriesItem + */ + protected $categoryDummy; + + /** + * Set's references to kApplication and DBConnection interface class instances + * + * @access public + */ + public function __construct() + { + parent::__construct(); + + if ( $this->menuItemsRequireFormatting() ) { + $this->categoryDummy = $this->Application->recallObject( + 'c.menu-item', + null, + array('skip_autoload' => true) + ); + } + } + + /** * Builds site menu * * @param string $prefix_special @@ -244,6 +279,24 @@ 'menu_icon' => $page['UseMenuIconUrl'] ? $page['MenuIconUrl'] : false, ); + if ( isset($this->categoryDummy) ) { + $this->categoryDummy->SetDBFieldsFromHash($page); + } + + foreach ( $this->itemParams as $param_name => $category_field_data ) { + $category_field_name = $category_field_data[0]; + + if ( array_key_exists(1, $category_field_data) ) { + $block_params[$param_name] = $this->categoryDummy->GetField( + $category_field_name, + $category_field_data[1] + ); + } + else { + $block_params[$param_name] = $page[$category_field_name]; + } + } + return $block_params; } @@ -358,7 +411,12 @@ if ( !isset($items_by_parent) ) { $items_by_parent = Array (); + $extra_select_clause = ''; + foreach ( $this->itemParams as $category_field_data ) { + $extra_select_clause .= ', c.' . $category_field_data[0]; + } + // Sub-categories from current category $sql = 'SELECT c.CategoryId AS CategoryId, @@ -371,7 +429,7 @@ c.ParentId As ParentId, \'cat\' AS ItemType, c.IsMenu, c.Type, c.ThemeId, c.UseExternalUrl, c.ExternalUrl, c.UseMenuIconUrl, c.MenuIconUrl, - c.Status + c.Status' . $extra_select_clause . ' FROM ' . TABLE_PREFIX . 'Categories AS c'; if ( isset($category_limit) && $category_limit ) { @@ -409,4 +467,21 @@ return ($a['ItemPriority'] < $b['ItemPriority']) ? 1 : -1; // descending } + + /** + * Determines if menu item parameters require formatting. + * + * @return boolean + */ + protected function menuItemsRequireFormatting() + { + foreach ( $this->itemParams as $category_field_data ) { + if ( array_key_exists(1, $category_field_data) ) { + return true; + } + } + + return false; + } + }