function page_manager_addressable_content
Implement pseudo-hook to fetch addressable content.
For Page Manager, the address will be an array. The first element will be the $task and the second element will be the $task_handler. The third elements will be the arguments provided.
File
-
page_manager/
page_manager.module, line 1290
Code
function page_manager_addressable_content($address, $type) {
if (count($address) < 3) {
return;
}
$task_name = array_shift($address);
$subtask_name = array_shift($address);
$handler_name = array_shift($address);
if ($address) {
$arguments = array_shift($address);
}
// Since $arguments is an array of arbitrary size, we need to implode it:
if (!empty($arguments)) {
// The only choices we have for separators since :: is already
// used involve ., - or _. Since - and _ are more common than .
// in URLs, let's try .. as an argument separator.
$arguments = explode('..', $arguments);
}
else {
// Implode does not return an empty array on an empty
// string so do it specifically.
$arguments = array();
}
$task = page_manager_get_task($task_name);
if (!$task) {
return;
}
$handler = page_manager_load_task_handler($task, $subtask_name, $handler_name);
if (!$handler) {
return;
}
$handler_plugin = page_manager_get_task_handler($handler->handler);
if (!$handler_plugin) {
return;
}
// Load the contexts for the task.
ctools_include('context');
ctools_include('context-task-handler');
$contexts = ctools_context_handler_get_task_contexts($task, $subtask_name, $arguments);
// With contexts loaded, ensure the task is accessible. Tasks without a callback
// are automatically accessible.
$function = ctools_plugin_get_function($task, 'access callback');
if ($function && !$function($task, $subtask_name, $contexts)) {
return;
}
$function = ctools_plugin_get_function($handler_plugin, 'addressable callback');
if ($function) {
return $function($task, $subtask_name, $handler, $address, $contexts, $arguments, $type);
}
}