PHP Classes

File: htdocs/class/smarty/xoops_plugins/compiler.xoAppUrl.php

Recommend this page to a friend!
  Classes of Michael Beck   Xoops 2.5   htdocs/class/smarty/xoops_plugins/compiler.xoAppUrl.php   Download  
File: htdocs/class/smarty/xoops_plugins/compiler.xoAppUrl.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Xoops 2.5
Modular content management publication system
Author: By
Last change:
Date: 7 years ago
Size: 3,256 bytes
 

Contents

Class file image Download
<?php
/**
 * xoAppUrl Smarty compiler plug-in
 *
 * See the enclosed file LICENSE for licensing information.
 * If you did not receive this file, get it at http://www.gnu.org/licenses/gpl-2.0.html
 *
 * @copyright (c) 2000-2016 XOOPS Project (www.xoops.org)
 * @license GNU GPL 2 (http://www.gnu.org/licenses/gpl-2.0.html)
 * @author Skalpa Keo <skalpa@xoops.org>
 * @package xos_opal
 * @subpackage xos_opal_Smarty
 * @since 2.0.14
 */

/**
 * Inserts the URL of an application page
 *
 * This plug-in allows you to generate a module location URL. It uses any URL rewriting
 * mechanism and rules you'll have configured for the system.
 *
 * To ensure this can be as optimized as possible, it accepts 2 modes of operation:
 *
 * <b>Static address generation</b>:<br>
 * This is the default mode and fastest mode. When used, the URL is generated during
 * the template compilation, and statically written in the compiled template file.
 * To use it, you just need to provide a location in a format XOOPS understands.
 *
 * <code>
 * // Generate an URL using a physical path
 * ([xoAppUrl modules/something/yourpage.php])
 * // Generate an URL using a module+location identifier (2.3+)
 * ([xoAppUrl mod_xoops_Identification#logout])
 * </code>
 *
 * <b>Dynamic address generation</b>:<br>
 * The is the slowest mode, and its use should be prevented unless necessary. Here,
 * the URL is generated dynamically each time the template is displayed, thus allowing
 * you to use the value of a template variable in the location string. To use it, you
 * must surround your location with double-quotes ("), and use the
 * {@link http://smarty.php.net/manual/en/language.syntax.quotes.php Smarty quoted strings}
 * syntax to insert variables values.
 *
 * <code>
 * // Use the value of the $sortby template variable in the URL
 * ([xoAppUrl "modules/something/yourpage.php?order=`$sortby`"])
 * </code>
 * @param $argStr
 * @param $compiler
 * @return string
 */
function smarty_compiler_xoAppUrl($argStr, &$compiler)
{
    global
$xoops;
   
$argStr = trim($argStr);

    @list(
$url, $params) = explode(' ', $argStr, 2);

    if (
substr($url, 0, 1) === '/') {
       
$url = 'www' . $url;
    }
   
// Static URL generation
   
if (strpos($argStr, '$') === false && $url !== '.') {
        if (isset(
$params)) {
           
$params = $compiler->_parse_attrs($params, false);
            foreach (
$params as $k => $v) {
                if (
in_array(substr($v, 0, 1), array('"', "'"))) {
                   
$params[$k] = substr($v, 1, -1);
                }
            }
           
$url = $xoops->buildUrl($url, $params);
        }
       
$url = $xoops->path($url, true);

        return
"echo '" . addslashes(htmlspecialchars($url)) . "';";
    }
   
// Dynamic URL generation
   
$str = "\$xoops->path('$url', true)";
    if (
$url === '.') {
       
$str = "\$_SERVER['REQUEST_URI']";
    }
    if (isset(
$params)) {
       
$params = $compiler->_parse_attrs($params, false);
       
$str = "\$xoops->buildUrl($str, array(\n";
        foreach (
$params as $k => $v) {
           
$str .= var_export($k, true) . " => $v,\n";
        }
       
$str .= '))';
    }

    return
"echo htmlspecialchars($str);";
}