function view::get_url

Same name in other branches
  1. 7.x-3.x includes/view.inc \view::get_url()

Get the URL for the current view.

This URL will be adjusted for arguments.

1 call to view::get_url()
view::_build_arguments in includes/view.inc
Build all the arguments.

File

includes/view.inc, line 1383

Class

view
An object to contain all of the data to generate a view, plus the member functions to build the view query, execute the query and render the output.

Code

function get_url($args = NULL, $path = NULL) {
    if (!isset($path)) {
        $path = $this->get_path();
    }
    if (!isset($args)) {
        $args = $this->args;
        // Exclude arguments that were computed, not passed on the URL.
        $position = 0;
        if (!empty($this->argument)) {
            foreach ($this->argument as $argument_id => $argument) {
                if (!empty($argument->is_default) && !empty($argument->options['default_argument_skip_url'])) {
                    unset($args[$position]);
                }
                $position++;
            }
        }
    }
    // Don't bother working if there's nothing to do:
    if (empty($path) || empty($args) && strpos($path, '%') === FALSE) {
        return $path;
    }
    $pieces = array();
    $arguments = isset($arguments) ? $arguments : $this->display_handler
        ->get_option('arguments');
    $argument_keys = isset($arguments) ? array_keys($arguments) : array();
    $id = current($argument_keys);
    foreach (explode('/', $path) as $piece) {
        if ($piece != '%') {
            $pieces[] = $piece;
        }
        else {
            if (empty($args)) {
                // Try to never put % in a url; use the wildcard instead.
                if ($id && !empty($arguments[$id]['wildcard'])) {
                    $pieces[] = $arguments[$id]['wildcard'];
                }
                else {
                    $pieces[] = '*';
                    // gotta put something if there just isn't one.
                }
            }
            else {
                $pieces[] = array_shift($args);
            }
            if ($id) {
                $id = next($argument_keys);
            }
        }
    }
    if (!empty($args)) {
        $pieces = array_merge($pieces, $args);
    }
    return implode('/', $pieces);
}