1.20.x layout.module | layout_context_required_by_path($path) |
Given a path with placeholders (%), determine the required contexts.
Parameters
string $path: The path for which required contexts should be retrieved.
Return value
array: An array of required contexts that match the given path.
File
- modules/
layout/ layout.module, line 1878 - The Layout module creates pages and wraps existing pages in layouts.
Code
function layout_context_required_by_path($path) {
$required_context_info = array();
// Populate each required context on the available known handlers.
$all_info = _layout_get_all_info('layout_context');
foreach ($all_info as $context_info) {
foreach ($context_info['menu paths'] as $context_path) {
// Remove named placeholders to just match on % symbols.
$cleaned_path = preg_replace('/%[a-z0-9_]+/', '%', $context_path);
// If it is an exact path match, assign the context without a position.
if (strpos($path, '%') === FALSE && $path === $cleaned_path) {
$required_context_info[$context_info['name']] = array(
'plugin' => $context_info['name'],
);
}
// If the path matches based on % placeholders, add this context as a
// required context info in the correct order.
elseif (strpos($path, $cleaned_path) === 0) {
// Determine the argument placement within the path.
$parts = explode('/', $context_path);
foreach ($parts as $part_index => $part) {
if ($part === $context_info['path placeholder']) {
$required_context_info[$part_index] = array(
'plugin' => $context_info['name'],
'position' => $part_index,
);
}
}
}
}
}
// If any placeholders are not filled, populate with a placeholder context
// that can be modified.
$parts = explode('/', $path);
foreach ($parts as $part_index => $part) {
if ($part === '%' && !isset($required_context_info[$part_index])) {
$required_context_info[$part_index] = array(
'plugin' => 'string',
'position' => $part_index,
);
}
}
// Put the required contexts in order based on the path.
ksort($required_context_info);
// Convert required context info into objects.
$required_contexts[$path] = array();
foreach ($required_context_info as $context_position => $context_info) {
$context = layout_create_context($context_info['plugin']);
$context->required = TRUE;
$context->usageType = LayoutContext::USAGE_TYPE_MENU;
// String placeholders are not locked, allowing a new value to be set.
$context->locked = $context_info['plugin'] !== 'string';
$context->position = $context_position;
$context->plugin = $context_info['plugin'];
$required_contexts[$path][$context_position] = $context;
}
return $required_contexts[$path];
}