| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
1 <?php 2 // $Id: path.inc,v 1.19.2.7 2010/11/04 10:27:46 goba Exp $ 3 4 /** 5 * @file 6 * Functions to handle paths in Drupal, including path aliasing. 7 * 8 * These functions are not loaded for cached pages, but modules that need 9 * to use them in hook_init() or hook exit() can make them available, by 10 * executing "drupal_bootstrap(DRUPAL_BOOTSTRAP_PATH);". 11 */ 12 13 /** 14 * Initialize the $_GET['q'] variable to the proper normal path. 15 */ 16 function drupal_init_path() { 17 if (!empty($_GET['q'])) { 18 $_GET['q'] = drupal_get_normal_path(trim($_GET['q'], '/')); 19 } 20 else { 21 $_GET['q'] = drupal_get_normal_path(variable_get('site_frontpage', 'node')); 22 } 23 } 24 25 /** 26 * Given an alias, return its Drupal system URL if one exists. Given a Drupal 27 * system URL return one of its aliases if such a one exists. Otherwise, 28 * return FALSE. 29 * 30 * @param $action 31 * One of the following values: 32 * - wipe: delete the alias cache. 33 * - alias: return an alias for a given Drupal system path (if one exists). 34 * - source: return the Drupal system URL for a path alias (if one exists). 35 * @param $path 36 * The path to investigate for corresponding aliases or system URLs. 37 * @param $path_language 38 * Optional language code to search the path with. Defaults to the page language. 39 * If there's no path defined for that language it will search paths without 40 * language. 41 * 42 * @return 43 * Either a Drupal system path, an aliased path, or FALSE if no path was 44 * found. 45 */ 46 function drupal_lookup_path($action, $path = '', $path_language = '') { 47 global $language; 48 // $map is an array with language keys, holding arrays of Drupal paths to alias relations 49 static $map = array(), $no_src = array(), $count; 50 51 $path_language = $path_language ? $path_language : $language->language; 52 53 // Use $count to avoid looking up paths in subsequent calls if there simply are no aliases 54 if (!isset($count)) { 55 $count = db_result(db_query('SELECT COUNT(pid) FROM {url_alias}')); 56 } 57 58 if ($action == 'wipe') { 59 $map = array(); 60 $no_src = array(); 61 $count = NULL; 62 } 63 elseif ($count > 0 && $path != '') { 64 if ($action == 'alias') { 65 if (isset($map[$path_language][$path])) { 66 return $map[$path_language][$path]; 67 } 68 // Get the most fitting result falling back with alias without language 69 $alias = db_result(db_query("SELECT dst FROM {url_alias} WHERE src = '%s' AND language IN('%s', '') ORDER BY language DESC, pid DESC", $path, $path_language)); 70 $map[$path_language][$path] = $alias; 71 return $alias; 72 } 73 // Check $no_src for this $path in case we've already determined that there 74 // isn't a path that has this alias 75 elseif ($action == 'source' && !isset($no_src[$path_language][$path])) { 76 // Look for the value $path within the cached $map 77 $src = FALSE; 78 if (!isset($map[$path_language]) || !($src = array_search($path, $map[$path_language]))) { 79 // Get the most fitting result falling back with alias without language 80 if ($src = db_result(db_query("SELECT src FROM {url_alias} WHERE dst = '%s' AND language IN('%s', '') ORDER BY language DESC, pid DESC", $path, $path_language))) { 81 $map[$path_language][$src] = $path; 82 } 83 else { 84 // We can't record anything into $map because we do not have a valid 85 // index and there is no need because we have not learned anything 86 // about any Drupal path. Thus cache to $no_src. 87 $no_src[$path_language][$path] = TRUE; 88 } 89 } 90 return $src; 91 } 92 } 93 94 return FALSE; 95 } 96 97 /** 98 * Given an internal Drupal path, return the alias set by the administrator. 99 * 100 * @param $path 101 * An internal Drupal path. 102 * @param $path_language 103 * An optional language code to look up the path in. 104 * 105 * @return 106 * An aliased path if one was found, or the original path if no alias was 107 * found. 108 */ 109 function drupal_get_path_alias($path, $path_language = '') { 110 $result = $path; 111 if ($alias = drupal_lookup_path('alias', $path, $path_language)) { 112 $result = $alias; 113 } 114 return $result; 115 } 116 117 /** 118 * Given a path alias, return the internal path it represents. 119 * 120 * @param $path 121 * A Drupal path alias. 122 * @param $path_language 123 * An optional language code to look up the path in. 124 * 125 * @return 126 * The internal path represented by the alias, or the original alias if no 127 * internal path was found. 128 */ 129 function drupal_get_normal_path($path, $path_language = '') { 130 $result = $path; 131 if ($src = drupal_lookup_path('source', $path, $path_language)) { 132 $result = $src; 133 } 134 if (function_exists('custom_url_rewrite_inbound')) { 135 // Modules may alter the inbound request path by reference. 136 custom_url_rewrite_inbound($result, $path, $path_language); 137 } 138 return $result; 139 } 140 141 /** 142 * Return a component of the current Drupal path. 143 * 144 * When viewing a page at the path "admin/content/types", for example, arg(0) 145 * would return "admin", arg(1) would return "content", and arg(2) would return 146 * "types". 147 * 148 * Avoid use of this function where possible, as resulting code is hard to read. 149 * Instead, attempt to use named arguments in menu callback functions. See the 150 * explanation in menu.inc for how to construct callbacks that take arguments. 151 * 152 * @param $index 153 * The index of the component, where each component is separated by a '/' 154 * (forward-slash), and where the first component has an index of 0 (zero). 155 * @param $path 156 * A path to break into components. Defaults to the path of the current page. 157 * 158 * @return 159 * The component specified by $index, or NULL if the specified component was 160 * not found. If called without arguments, it returns an array containing all 161 * the components of the current path. 162 */ 163 function arg($index = NULL, $path = NULL) { 164 static $arguments; 165 166 if (!isset($path)) { 167 $path = $_GET['q']; 168 } 169 if (!isset($arguments[$path])) { 170 $arguments[$path] = explode('/', $path); 171 } 172 if (!isset($index)) { 173 return $arguments[$path]; 174 } 175 if (isset($arguments[$path][$index])) { 176 return $arguments[$path][$index]; 177 } 178 } 179 180 /** 181 * Get the title of the current page, for display on the page and in the title bar. 182 * 183 * @return 184 * The current page's title. 185 */ 186 function drupal_get_title() { 187 $title = drupal_set_title(); 188 189 // during a bootstrap, menu.inc is not included and thus we cannot provide a title 190 if (!isset($title) && function_exists('menu_get_active_title')) { 191 $title = check_plain(menu_get_active_title()); 192 } 193 194 return $title; 195 } 196 197 /** 198 * Set the title of the current page, for display on the page and in the title bar. 199 * 200 * @param $title 201 * Optional string value to assign to the page title; or if set to NULL 202 * (default), leaves the current title unchanged. 203 * 204 * @return 205 * The updated title of the current page. 206 */ 207 function drupal_set_title($title = NULL) { 208 static $stored_title; 209 210 if (isset($title)) { 211 $stored_title = $title; 212 } 213 return $stored_title; 214 } 215 216 /** 217 * Check if the current page is the front page. 218 * 219 * @return 220 * Boolean value: TRUE if the current page is the front page; FALSE if otherwise. 221 */ 222 function drupal_is_front_page() { 223 static $is_front_page; 224 225 if (!isset($is_front_page)) { 226 // As drupal_init_path updates $_GET['q'] with the 'site_frontpage' path, 227 // we can check it against the 'site_frontpage' variable. 228 $is_front_page = ($_GET['q'] == drupal_get_normal_path(variable_get('site_frontpage', 'node'))); 229 } 230 231 return $is_front_page; 232 } 233 234 /** 235 * Check if a path matches any pattern in a set of patterns. 236 * 237 * @param $path 238 * The path to match. 239 * @param $patterns 240 * String containing a set of patterns separated by \n, \r or \r\n. 241 * 242 * @return 243 * 1 if there is a match, 0 if there is not a match. 244 */ 245 function drupal_match_path($path, $patterns) { 246 static $regexps; 247 248 if (!isset($regexps[$patterns])) { 249 $regexps[$patterns] = '/^('. preg_replace(array('/(\r\n?|\n)/', '/\\\\\*/', '/(^|\|)\\\\<front\\\\>($|\|)/'), array('|', '.*', '\1'. preg_quote(variable_get('site_frontpage', 'node'), '/') .'\2'), preg_quote($patterns, '/')) .')$/'; 250 } 251 return preg_match($regexps[$patterns], $path); 252 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |