Magento model does not load all data

I am creating a custom navigation menu in Magento that displays categories from another store with a different root category from the current store. Some of the categories should be hidden as they have “Include in Navigation Menu” set to “No”.

It should be possible to read this attribute from the category model, as in this question: How to determine if it is included in the "Enabled" category in the "NO?" Navigation menu ?

However, $ category-> getIncludeInMenu () returns NULL for all categories of my Magento EE 1.11 installation.

// 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> } } 

The var dump in one of the categories does not show the attribute 'include_in_menu', although the is_active attribute works as expected. Is there an alternative way to determine if a category should appear in the navigation?

Dump Var Object Category:

 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 
+6
source share
2 answers

This is because Magento lazily loads the category model. The getChildrenCategories() method in the Mage_Catalog_Model_Category model returns a collection of category models, and Magento only loads the model’s master data, not the additional EAV data for each model. The include_in_menu attribute is stored in the EAV data store and is not loaded.

Each category can be force loaded by calling $_category->load(); which will force Magento to download additional EAV data for each category.

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

This modifies the _data array as follows:

 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) 

For this:

 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 

Which includes the include_in_menu attribute.

+14
source

You should use:

$ _ category-> load ($ _ category-> GetId ());

worked for me;)

0
source

Source: https://habr.com/ru/post/905109/


All Articles