function _menu_find_router_path

Finds the router path which will serve this path.

Parameters

$link_path: The path for we are looking up its router path.

Return value

A path from $menu keys or empty if $link_path points to a nonexisting place.

Related topics

2 calls to _menu_find_router_path()
menu_link_save in includes/menu.inc
Saves a menu link.
_menu_navigation_links_rebuild in includes/menu.inc
Builds menu links for the items in the menu router.

File

includes/menu.inc, line 3426

Code

function _menu_find_router_path($link_path) {
    // $menu will only have data during a menu rebuild.
    $menu = _menu_router_cache();
    $router_path = $link_path;
    $parts = explode('/', $link_path, MENU_MAX_PARTS);
    $ancestors = menu_get_ancestors($parts);
    if (empty($menu)) {
        // Not during a menu rebuild, so look up in the database.
        $router_path = (string) db_select('menu_router')->fields('menu_router', array(
            'path',
        ))
            ->condition('path', $ancestors, 'IN')
            ->orderBy('fit', 'DESC')
            ->range(0, 1)
            ->execute()
            ->fetchField();
    }
    elseif (!isset($menu[$router_path])) {
        // Add an empty router path as a fallback.
        $ancestors[] = '';
        foreach ($ancestors as $key => $router_path) {
            if (isset($menu[$router_path])) {
                // Exit the loop leaving $router_path as the first match.
                break;
            }
        }
        // If we did not find the path, $router_path will be the empty string
        // at the end of $ancestors.
    }
    return $router_path;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.