Magento类型模型未加载所有数据

Mat*_*ath 6 magento

我正在Magento中构建一个自定义导航菜单,该菜单显示来自不同商店的类别,这些商店具有与当前商店不同的根类别.某些类别应隐藏,因为它们将"包含在导航菜单中"设置为否.

应该可以从类别模型中读取此属性,如下所示:如何检测类别是否将"导入菜单中的包含"设置为"否"?

但是$ class-> getIncludeInMenu()在我的Magento EE 1.11安装上为所有类别返回NULL.

// Load child categories for a specific root category
$_uk_default_root_id = Mage::app()->getStore('uk_default')->getRootCategoryId();
$_uk_default_root_category = Mage::getModel('catalog/category')->load($_uk_default_root_id); 
$_sub_categories = $_uk_default_root_category->getChildrenCategories();

// Loop through the categories
foreach ($_sub_categories as $_category)
{
    if ($_category->getIsActive() && $_category->getIncludeInMenu())
    {
        <echo navigation link>
    }
}
Run Code Online (Sandbox Code Playgroud)

其中一个类别的var转储显示没有'include_in_menu'属性,尽管'is_active'属性按预期工作.是否有另一种方法可以确定是否应在导航中显示某个类别?

类别对象的var转储:

object(Mage_Catalog_Model_Category)[423]
  protected '_eventPrefix' => string 'catalog_category' (length=16)
  protected '_eventObject' => string 'category' (length=8)
  protected '_cacheTag' => string 'catalog_category' (length=16)
  protected '_useFlatResource' => boolean false
  private '_designAttributes' => 
    array (size=6)
      0 => string 'custom_design' (length=13)
      1 => string 'custom_design_from' (length=18)
      2 => string 'custom_design_to' (length=16)
      3 => string 'page_layout' (length=11)
      4 => string 'custom_layout_update' (length=20)
      5 => string 'custom_apply_to_products' (length=24)
  protected '_treeModel' => null
  protected '_defaultValues' => 
    array (size=0)
      empty
  protected '_storeValuesFlags' => 
    array (size=0)
      empty
  protected '_lockedAttributes' => 
    array (size=0)
      empty
  protected '_isDeleteable' => boolean true
  protected '_isReadonly' => boolean false
  protected '_resourceName' => string 'catalog/category' (length=16)
  protected '_resource' => null
  protected '_resourceCollectionName' => string 'catalog/category_collection' (length=27)
  protected '_dataSaveAllowed' => boolean true
  protected '_isObjectNew' => null
  protected '_data' => 
    array (size=15)
      'entity_id' => string '16' (length=2)
      'entity_type_id' => string '3' (length=1)
      'attribute_set_id' => string '3' (length=1)
      'parent_id' => string '15' (length=2)
      'created_at' => string '2011-11-16 12:16:27' (length=19)
      'updated_at' => string '2011-12-19 16:19:08' (length=19)
      'path' => string '1/15/16' (length=7)
      'position' => string '1' (length=1)
      'level' => string '2' (length=1)
      'children_count' => string '8' (length=1)
      'is_active' => string '1' (length=1)
      'request_path' => null
      'name' => string 'Vacuum Cleaners' (length=15)
      'url_key' => string 'vacuum-cleaners' (length=15)
      'is_anchor' => string '1' (length=1)
  protected '_hasDataChanges' => boolean true
  protected '_origData' => 
    array (size=15)
      'entity_id' => string '16' (length=2)
      'entity_type_id' => string '3' (length=1)
      'attribute_set_id' => string '3' (length=1)
      'parent_id' => string '15' (length=2)
      'created_at' => string '2011-11-16 12:16:27' (length=19)
      'updated_at' => string '2011-12-19 16:19:08' (length=19)
      'path' => string '1/15/16' (length=7)
      'position' => string '1' (length=1)
      'level' => string '2' (length=1)
      'children_count' => string '8' (length=1)
      'is_active' => string '1' (length=1)
      'request_path' => null
      'name' => string 'Vacuum Cleaners' (length=15)
      'url_key' => string 'vacuum-cleaners' (length=15)
      'is_anchor' => string '1' (length=1)
  protected '_idFieldName' => string 'entity_id' (length=9)
  protected '_isDeleted' => boolean false
  protected '_oldFieldsMap' => 
    array (size=0)
      empty
  protected '_syncFieldsMap' => 
    array (size=0)
      empty
Run Code Online (Sandbox Code Playgroud)

Mat*_*ath 14

这是由于Magento延迟加载类别模型.在getChildrenCategories()对方法Mage_Catalog_Model_Category模型返回分类模型的收集和Magento的只加载核心模型数据,而不是额外的EAV数据为每个模型.该include_in_menu属性存储在EAV数据存储中,尚未加载.

可以通过调用强制加载每个类别,$_category->load();这将迫使Magento为每个类别加载额外的EAV数据.

// Loop through the categories
foreach ($_sub_categories as $_category)
{
    $_category->load();
    if ($_category->getIsActive() && $_category->getIncludeInMenu())
    {
        <echo navigation link>
    }
}
Run Code Online (Sandbox Code Playgroud)

这会改变_data数组:

array (size=15)
  'entity_id' => string '16' (length=2)
  'entity_type_id' => string '3' (length=1)
  'attribute_set_id' => string '3' (length=1)
  'parent_id' => string '15' (length=2)
  'created_at' => string '2011-11-16 12:16:27' (length=19)
  'updated_at' => string '2011-12-19 16:19:08' (length=19)
  'path' => string '1/15/16' (length=7)
  'position' => string '1' (length=1)
  'level' => string '2' (length=1)
  'children_count' => string '8' (length=1)
  'is_active' => string '1' (length=1)
  'request_path' => null
  'name' => string 'Vacuum Cleaners' (length=15)
  'url_key' => string 'vacuum-cleaners' (length=15)
  'is_anchor' => string '1' (length=1)
Run Code Online (Sandbox Code Playgroud)

对此:

array (size=33)
  'entity_id' => string '16' (length=2)
  'entity_type_id' => string '3' (length=1)
  'attribute_set_id' => string '3' (length=1)
  'parent_id' => string '15' (length=2)
  'created_at' => string '2011-11-16 12:16:27' (length=19)
  'updated_at' => string '2011-12-19 16:19:08' (length=19)
  'path' => string '1/15/16' (length=7)
  'position' => string '1' (length=1)
  'level' => string '2' (length=1)
  'children_count' => string '8' (length=1)
  'is_active' => string '1' (length=1)
  'request_path' => null
  'name' => string 'Vacuum Cleaners' (length=15)
  'url_key' => string 'vacuum-cleaners' (length=15)
  'is_anchor' => string '1' (length=1)
  'meta_title' => null
  'display_mode' => string 'PRODUCTS' (length=8)
  'custom_design' => null
  'page_layout' => null
  'url_path' => string 'vacuum-cleaners' (length=15)
  'image' => string 'heading_vacuums_1.png' (length=21)
  'include_in_menu' => string '1' (length=1)
  'landing_page' => null
  'custom_use_parent_settings' => string '0' (length=1)
  'custom_apply_to_products' => string '0' (length=1)
  'filter_price_range' => null
  'description' => null
  'meta_keywords' => null
  'meta_description' => null
  'custom_layout_update' => null
  'available_sort_by' => null
  'custom_design_from' => null
  'custom_design_to' => null
Run Code Online (Sandbox Code Playgroud)

其中包括include_in_menu属性.