Index: branches/RC/core/units/categories/categories_tag_processor.php =================================================================== diff -u -r9535 -r9696 --- branches/RC/core/units/categories/categories_tag_processor.php (.../categories_tag_processor.php) (revision 9535) +++ branches/RC/core/units/categories/categories_tag_processor.php (.../categories_tag_processor.php) (revision 9696) @@ -251,22 +251,57 @@ function Meta($params) { - $name = getArrayValue($params, 'name'); $object =& $this->Application->recallObject($this->Prefix.'.-item'); + /* @var $object CategoriesItem */ - $field = $object->GetField('Meta'.$name); - if ($field) return $field; + $meta_type = $params['name']; - switch ($name) { + // 1. get module prefix by current category + $category_helper =& $this->Application->recallObject('CategoryHelper'); + /* @var $category_helper CategoryHelper */ + + $category_path = explode('|', substr($object->GetDBField('ParentPath'), 1, -1)); + $module_info = $category_helper->getCategoryModule($params, $category_path); + + // 2. get item template by current category & module prefix + $mod_rewrite_helper = $this->Application->recallObject('ModRewriteHelper'); + /* @var $mod_rewrite_helper kModRewriteHelper */ + + $category_params = Array ( + 'CategoryId' => $object->GetID(), + 'ParentPath' => $object->GetDBField('ParentPath'), + ); + $item_template = $mod_rewrite_helper->GetItemTemplate($category_params, $module_info['Var']); + + if ($this->Application->GetVar('t') == $item_template) { + // we are located on item's details page + $item =& $this->Application->recallObject($module_info['Var']); + /* @var $item kCatDBItem */ + + // 3. get item's meta data + $value = $item->GetField('Meta'.$meta_type); + if ($value) { + return $value; + } + } + + // 4. get category meta data + $value = $object->GetField('Meta'.$meta_type); + if ($value) { + return $value; + } + + // 5. get default meta data + switch ($meta_type) { case 'Description': - $conf = 'Category_MetaDesc'; + $config_name = 'Category_MetaDesc'; break; case 'Keywords': - $conf = 'Category_MetaKey'; + $config_name = 'Category_MetaKey'; break; } - return $this->Application->ConfigValue($conf); + return $this->Application->ConfigValue($config_name); } function BuildListSpecial($params)