diff options
-rw-r--r-- | includes/menu.inc | 2 | ||||
-rw-r--r-- | modules/menu/menu.api.php | 3 | ||||
-rw-r--r-- | modules/simpletest/tests/menu.test | 9 | ||||
-rw-r--r-- | modules/simpletest/tests/menu_test.module | 30 |
4 files changed, 37 insertions, 7 deletions
diff --git a/includes/menu.inc b/includes/menu.inc index 053230cf8..c16e6cde1 100644 --- a/includes/menu.inc +++ b/includes/menu.inc @@ -549,7 +549,7 @@ function _menu_item_localize(&$item, $map, $link_translate = FALSE) { $item['title'] = t($item['title'], menu_unserialize($item['title_arguments'], $map)); } } - elseif (drupal_function_exists($callback)) { + elseif ($callback && drupal_function_exists($callback)) { if (empty($item['title_arguments'])) { $item['title'] = $callback($item['title']); } diff --git a/modules/menu/menu.api.php b/modules/menu/menu.api.php index c69eaa79d..da1a36fc5 100644 --- a/modules/menu/menu.api.php +++ b/modules/menu/menu.api.php @@ -27,6 +27,9 @@ * contain the following key-value pairs: * * - "title": Required. The untranslated title of the menu item. + * - "title callback": Function to generate the title, defaults to t(). + * If you require only the raw string to be output, set this to FALSE. + * - "title arguments": Arguments to send to t() or your custom callback. * - "description": The untranslated description of the menu item. * - "page callback": The function to call to display a web page when the user * visits the path. If omitted, the parent menu item's callback will be used diff --git a/modules/simpletest/tests/menu.test b/modules/simpletest/tests/menu.test index 802216c26..a4935c968 100644 --- a/modules/simpletest/tests/menu.test +++ b/modules/simpletest/tests/menu.test @@ -21,6 +21,15 @@ class MenuIncTestCase extends DrupalWebTestCase { } /** + * Test title callback set to FALSE. + */ + function testTitleCallbackFalse() { + $this->drupalGet('node'); + $this->assertText('A title with @placeholder', t('Raw text found on the page')); + $this->assertNoText(t('A title with @placeholder', array('@placeholder' => 'some other text')), t('Text with placeholder substitutions not found.')); + } + + /** * Tests for menu_name parameter for hook_menu(). */ function testMenuName() { diff --git a/modules/simpletest/tests/menu_test.module b/modules/simpletest/tests/menu_test.module index a2bbbdc15..7a25f6aff 100644 --- a/modules/simpletest/tests/menu_test.module +++ b/modules/simpletest/tests/menu_test.module @@ -3,18 +3,36 @@ /** * @file - * Dummy module implementing hook menu to test changing the menu name. + * Dummy module implementing hook menu. */ - /** - * The name of the menu changes during the course of this test. Use a $_GET. +/** + * Implementation of hook_menu(). */ function menu_test_menu() { - + // The name of the menu changes during the course of the test. Using a $_GET. $items['menu_name_test'] = array( - 'title' => t('Test menu_name router item'), + 'title' => 'Test menu_name router item', 'page callback' => 'node_save', 'menu_name' => isset($_GET["hook_menu_name"]) ? $_GET["hook_menu_name"] : 'original', ); + // Use FALSE as 'title callback' to bypass t(). + $items['menu_no_title_callback'] = array( + 'title' => 'A title with @placeholder', + 'title callback' => FALSE, + 'title arguments' => array('@placeholder' => 'some other text'), + 'page callback' => 'menu_test_callback', + 'access arguments' => array('access content'), + ); return $items; -}
\ No newline at end of file +} + +/** + * Dummy callback for hook_menu() to point to. + * + * @return + * A random string. + */ +function menu_test_callback() { + return $this->randomName(); +} |