Gdn_Theme::link PHP Method

    public static function link($Path, $Text = false, $Format = null, $Options = array())
    {
        $Session = Gdn::session();
        $Class = val('class', $Options, '');
        $WithDomain = val('WithDomain', $Options);
        $Target = val('Target', $Options, '');
        if ($Target == 'current') {
            $Target = trim(url('', true), '/ ');
        }
        if (is_null($Format)) {
            $Format = '<a href="%url" class="%class">%text</a>';
        }
        switch ($Path) {
            case 'activity':
                touchValue('Permissions', $Options, 'Garden.Activity.View');
                break;
            case 'category':
                $Breadcrumbs = Gdn::controller()->data('Breadcrumbs');
                if (is_array($Breadcrumbs) && count($Breadcrumbs) > 0) {
                    $Last = array_pop($Breadcrumbs);
                    $Path = val('Url', $Last);
                    $DefaultText = val('Name', $Last, T('Back'));
                } else {
                    $Path = '/';
                    $DefaultText = c('Garden.Title', T('Back'));
                }
                if (!$Text) {
                    $Text = $DefaultText;
                }
                break;
            case 'dashboard':
                $Path = 'dashboard/settings';
                touchValue('Permissions', $Options, array('Garden.Settings.Manage', 'Garden.Settings.View'));
                if (!$Text) {
                    $Text = t('Dashboard');
                }
                break;
            case 'home':
                $Path = '/';
                if (!$Text) {
                    $Text = t('Home');
                }
                break;
            case 'inbox':
                $Path = 'messages/inbox';
                touchValue('Permissions', $Options, 'Garden.SignIn.Allow');
                if (!$Text) {
                    $Text = t('Inbox');
                }
                if ($Session->isValid() && $Session->User->CountUnreadConversations) {
                    $Class = trim($Class . ' HasCount');
                    $Text .= ' <span class="Alert">' . $Session->User->CountUnreadConversations . '</span>';
                }
                if (!$Session->isValid() || !Gdn::addonManager()->lookupAddon('conversations')) {
                    $Text = false;
                }
                break;
            case 'forumroot':
                $Route = Gdn::router()->getDestination('DefaultForumRoot');
                if (is_null($Route)) {
                    $Path = '/';
                } else {
                    $Path = combinePaths(array('/', $Route));
                }
                break;
            case 'profile':
                touchValue('Permissions', $Options, 'Garden.SignIn.Allow');
                if (!$Text && $Session->isValid()) {
                    $Text = $Session->User->Name;
                }
                if ($Session->isValid() && $Session->User->CountNotifications) {
                    $Class = trim($Class . ' HasCount');
                    $Text .= ' <span class="Alert">' . $Session->User->CountNotifications . '</span>';
                }
                break;
            case 'user':
                $Path = 'profile';
                touchValue('Permissions', $Options, 'Garden.SignIn.Allow');
                if (!$Text && $Session->isValid()) {
                    $Text = $Session->User->Name;
                }
                break;
            case 'photo':
                $Path = 'profile';
                TouchValue('Permissions', $Options, 'Garden.SignIn.Allow');
                if (!$Text && $Session->isValid()) {
                    $IsFullPath = strtolower(substr($Session->User->Photo, 0, 7)) == 'http://' || strtolower(substr($Session->User->Photo, 0, 8)) == 'https://';
                    $PhotoUrl = $IsFullPath ? $Session->User->Photo : Gdn_Upload::url(changeBasename($Session->User->Photo, 'n%s'));
                    $Text = img($PhotoUrl, array('alt' => $Session->User->Name));
                }
                break;
            case 'drafts':
                TouchValue('Permissions', $Options, 'Garden.SignIn.Allow');
                if (!$Text) {
                    $Text = t('My Drafts');
                }
                if ($Session->isValid() && $Session->User->CountDrafts) {
                    $Class = trim($Class . ' HasCount');
                    $Text .= ' <span class="Alert">' . $Session->User->CountDrafts . '</span>';
                }
                break;
            case 'discussions/bookmarked':
                TouchValue('Permissions', $Options, 'Garden.SignIn.Allow');
                if (!$Text) {
                    $Text = t('My Bookmarks');
                }
                if ($Session->isValid() && $Session->User->CountBookmarks) {
                    $Class = trim($Class . ' HasCount');
                    $Text .= ' <span class="Count">' . $Session->User->CountBookmarks . '</span>';
                }
                break;
            case 'discussions/mine':
                TouchValue('Permissions', $Options, 'Garden.SignIn.Allow');
                if (!$Text) {
                    $Text = t('My Discussions');
                }
                if ($Session->isValid() && $Session->User->CountDiscussions) {
                    $Class = trim($Class . ' HasCount');
                    $Text .= ' <span class="Count">' . $Session->User->CountDiscussions . '</span>';
                }
                break;
            case 'register':
                if (!$Text) {
                    $Text = t('Register');
                }
                $Path = registerUrl($Target);
                break;
            case 'signin':
            case 'signinout':
                // The destination is the signin/signout toggle link.
                if ($Session->isValid()) {
                    if (!$Text) {
                        $Text = T('Sign Out');
                    }
                    $Path = signOutUrl($Target);
                    $Class = concatSep(' ', $Class, 'SignOut');
                } else {
                    if (!$Text) {
                        $Text = t('Sign In');
                    }
                    $Path = signInUrl($Target);
                    if (signInPopup() && strpos(Gdn::Request()->Url(), 'entry') === false) {
                        $Class = concatSep(' ', $Class, 'SignInPopup');
                    }
                }
                break;
        }
        if ($Text == false && strpos($Format, '%text') !== false) {
            return '';
        }
        if (val('Permissions', $Options) && !$Session->checkPermission($Options['Permissions'], false)) {
            return '';
        }
        $Url = Gdn::request()->url($Path, $WithDomain);
        if ($TK = val('TK', $Options)) {
            if (in_array($TK, array(1, 'true'))) {
                $TK = 'TransientKey';
            }
            $Url .= (strpos($Url, '?') === false ? '?' : '&') . $TK . '=' . urlencode(Gdn::session()->transientKey());
        }
        if (strcasecmp(trim($Path, '/'), Gdn::request()->path()) == 0) {
            $Class = concatSep(' ', $Class, 'Selected');
        }
        // Build the final result.
        $Result = $Format;
        $Result = str_replace('%url', $Url, $Result);
        $Result = str_replace('%text', $Text, $Result);
        $Result = str_replace('%class', $Class, $Result);
        return $Result;
    }

Usage Example

 public function base_render_before($sender)
 {
     if ($sender->MasterView == 'admin') {
         return;
     }
     //tell the browser this is a mobile style
     $sender->Head->addTag('meta', array('name' => 'viewport', 'content' => "width=device-width,minimum-scale=1.0,maximum-scale=1.0"));
     /*
             $sender->InformMessage(
                 'This message will stay here until you dismiss it!',
                 array(
                     'CssClass' => 'Dismissable',
                     'DismissCallbackUrl' => '/plugin/dismissmessage/'
                 )
             );
     */
     $sender->Head->addTag('meta', array('name' => 'theme-color', 'content' => "#C08F00"));
     // YOU CAN REMOVE FONT-AWESOME IN ONLINE-VERSION
     $sender->Head->addTag('link', array('rel' => 'stylesheet', 'href' => "https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css"));
     //position of the panel
     $sender->CssClass .= c('MinusBaseline.Panel.Left', false) ? ' PanelLeft' : ' PanelRight';
     //add the hamburger menu
     $sender->addAsset('Content', anchor('n', url('#'), 'Hamburger'), 'Hamburger');
     //add the searchbox to the panel
     //copied from library/vendors/SmartyPlugins/function.searchbox.php
     $form = Gdn::factory('Form');
     $form->InputPrefix = '';
     $search = $form->open(array('action' => Url('/search'), 'method' => 'get')) . $form->textBox('Search', array('placeholder' => t('SearchBoxPlaceHolder', 'Search'))) . $form->button('Go', array('Name' => '')) . $form->close();
     $sender->addAsset('Panel', wrap($search, 'div', array('class' => 'SiteSearch')), 'SearchBox');
     //nomobile link to switch to the full site
     $sender->addAsset('Foot', Gdn_Theme::link('/', t(' '), '<div class="LogoFoot"><a href="%url" class="%class">%text</a></div>'), 'LogoFoot');
     //Add logo to button of site
     $sender->addAsset('Foot', Gdn_Theme::link('profile/nomobile', t('Full Site'), '<div class="NoMobile"><a href="%url" class="%class">%text</a></div>'), 'NoMobile');
 }
All Usage Examples Of Gdn_Theme::link