diff --git a/token.test b/token.test index 4ffec93..27278b7 100644 --- a/token.test +++ b/token.test @@ -430,6 +430,13 @@ class TokenMenuTestCase extends TokenTestHelper { 'menu-link:root:mlid' => $root_link['mlid'], ); $this->assertTokens('node', array('node' => $node), $tokens); + + // Test [node:menu] tokens for a loaded node. A loaded node object has not + // "menu" variable. + $loaded_node = node_load($node->nid); + $tokens = array(); + $this->assertTokens('node', array('node' => $loaded_node), $tokens); + $this->assertFalse(isset($loaded_node->menu), t("Make sure \$node->menu variable is not set in a loaded node object after token generation for it."), 'Oteher'); } } diff --git a/token.tokens.inc b/token.tokens.inc index e382a0b..6ac81e1 100644 --- a/token.tokens.inc +++ b/token.tokens.inc @@ -1043,10 +1043,17 @@ function menu_tokens($type, $tokens, array $data = array(), array $options = arr if (!isset($node->menu)) { // Nodes do not have their menu links loaded via menu_node_load(). menu_node_prepare($node); + $mlid = $node->menu['mlid']; + // menu_node_prepare() set the $node->menu variable, but this token + // function should not change the node object. + unset($node->menu); + } + elseif (!empty($node->menu['mlid'])) { + $mlid = $node->menu['mlid']; } - if (!empty($node->menu['mlid'])) { - $link = token_menu_link_load($node->menu['mlid']); + if (isset($mlid)) { + $link = token_menu_link_load($mlid); foreach ($tokens as $name => $original) { switch ($name) {