Topic: Alternative to function.getrecentpath.php for new lang link
Slugger
avatar
Professional
Professional
Posts: 1185

Posted:
19.Apr 2006 - 01:44

To free up some space on my pages, I decided to delete the language block and place links for the three language choices into my Xanthia masthead design.

First, for reasons that may be obvious, I'm talking about with short urls enabled.

Easy enough to use the function.getrecentpath.php and append ?&newlang=XYZ to the path returned, but click on two langugage links in succession, or one link twice and it doesn't work so well as you get ...mycurrenturl?&newlang=XYZ?&newlang=ZYX.

Anyway, it seems to me that function.pngetrecentpath.php should strip everything after and including "?&newlang=" as, once set, that is extranous and not really the path.

So, not finding a plugin, I wrote the following. Hope someone finds it useful.

Slugger

Code

<?php
// $Id: function.langlinks.php,v 1.0 2006/04/18 15:22:21 Slugger Exp $
// ----------------------------------------------------------------------
// PostNuke Content Management System
// Copyright (C) 2002 by the PostNuke Development Team.
// http://www.postnuke.com/
// ----------------------------------------------------------------------
// Based on:
// PHP-NUKE Web Portal System - http://phpnuke.org/
// Thatware - http://thatware.org/
// ----------------------------------------------------------------------
// LICENSE
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License (GPL)
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// To read the license please visit http://www.gnu.org/copyleft/gpl.html
// ----------------------------------------------------------------------
/**
 * pnRender plugin
 *
 * This file is a plugin for pnRender, the PostNuke implementation of Smarty
 *
 * @package      Xanthia_Templating_Environment
 * @subpackage   pnRender
 * @version      $Id: function.langlinks.php,v 1.0 2006/04/18 15:22:21 Slugger Exp $
 * @author       The PostNuke development team
 * @link         http://www.postnuke.com  The PostNuke Home Page
 * @copyright    Copyright (C) 2002 by the PostNuke Development Team
 * @license      http://www.gnu.org/copyleft/gpl.html GNU General Public License
 */


 
/**
 * Smarty function to get URI of the recent site
 *
 *
 * Available parameters:
 *   - assign:   If set, the results are assigned to the corresponding variable instead of printed out
 *
 * Example
 *   <!--[langlinks linklang='lang' linkid='id' linktitle='title' linkurl='linkurl']-->!
 *
 * @author       Slugger
 * @since        
 * @param        array       $params      All attributes passed to this function from the template
 * @param        object      &$smarty     Reference to the Smarty object
 * @return       string      the value of the last status message posted, or void if no status message exists
 */



function smarty_function_langlinks ($params, &$smarty)
{

    extract($params);
    unset($params);

    if (!pnConfigGetVar('multilingual')) {
        return;
    }
   

    $currentURL = 'index.php?' . pnServerGetVar('QUERY_STRING');
    if ($currentURL === '') { $currentURL = 'index.php'; }
    $pattern = '/\?newlang=\w+/';
    $currentURL = preg_replace ($pattern, '', $currentURL);
    $pattern = '/\&newlang=\w+/';
    $currentURL = pnVarPrepForDisplay(preg_replace ($pattern, '', $currentURL));
    $append = "&amp;";

    if (strpos($currentURL, '?') === false) { $append = '?'; }
       
    $path = "<a id=\"$linkid\" href=\"$currentURL".$append."newlang=$linklang\" title=\"$linktitle\"><img src=\"images/flags/flag-$linklang.png\" alt=\"$linklang\" $imgsize[3] />$linkurl</a>";
       
        if (isset($assign)) {
        $smarty->assign($assign, $path);
    } else {
        return $path;
    }
}

?>