* @license http://www.contenido.org/license/LIZENZ.txt * @link http://www.4fb.de * @link http://www.contenido.org * * {@internal * created 2008-02-19 * modified 2008-02-28 Changed to using Config for URL style * @todo Somehow get around using prCreateURLNameLocationString() * * $Id$: * }} * */ if(!defined('CON_FRAMEWORK')) { die('Illegal call'); } include_once('Contenido_UrlBuilder.class.php'); cInclude('includes', 'functions.pathresolver.php'); class Contenido_UrlBuilder_CustomPath extends Contenido_UrlBuilder { static private $_instance; // object instance private $aConfig; /** * Constructor * @access private * @return void * @author Rudi Bieller */ private function __construct() { $this->sHttpBasePath = ''; } /** * Get instance of Contenido_UrlBuilder_Frontcontent * @access public * @return obj Contenido_UrlBuilder_Frontcontent * @author Rudi Bieller */ public static function getInstance() { if (self::$_instance == null) { self::$_instance = new Contenido_UrlBuilder_CustomPath(); } return self::$_instance; } /** * Builds a URL in index-a-1.html style. * Index keys of $aParams will be used as "a", corresponding values as "1" in this sample. * For creating the location string $aParams needs to have keys idcat, level, lang and at least one custom key. * If level is not set, level 0 will be used as default. * * @param array $aParams Required keys are: idcat, level, lang and at least one custom key. * @param boolean $bUseAbsolutePath * @param array $aConfig If not set, will use UrlBuilderConfig::getConfig() * @return void * @throws InvalidArgumentException * @throws Exception * @author Rudi Bieller * @todo Somehow get around using prCreateURLNameLocationString() */ public function buildUrl(array $aParams, $bUseAbsolutePath = false, array $aConfig = array()) { if (!isset($aParams['idcat'])) { throw new InvalidArgumentException('$aParams[idcat] must be set!'); } if (!isset($aParams['level'])) { //throw new InvalidArgumentException('$aParams[level] must be set! Setting it to 0 will create complete path.'); $aParams['level'] = '1'; } if (!isset($aParams['lang'])) { throw new InvalidArgumentException('$aParams[lang] must be set!'); } if (sizeof($aParams) <= 3) { throw new InvalidArgumentException('$aParams must have at least one custom entry!'); } // if no config passed or not all parameters available, use default config if (sizeof($aConfig) == 0 || !isset($aConfig['prefix']) || !isset($aConfig['suffix']) || !isset($aConfig['separator'])) { include_once('Contenido_UrlBuilderConfig.class.php'); $aConfig = Contenido_UrlBuilderConfig::getConfig(); } $this->aConfig = $aConfig; $sCategoryString = ''; prCreateURLNameLocationString(intval($aParams['idcat']), "/", $sCategoryString, false, "", $aParams['level'], $aParams['lang'], true, false); if (strlen($sCategoryString) > 0 && substr($sCategoryString, -1) != '/') { $sCategoryString .= '/'; } $this->sUrl = $bUseAbsolutePath === true ? $this->sHttpBasePath : ''; $this->sUrl .= $sCategoryString; $this->sUrl .= $this->aConfig['prefix']; foreach ($aParams as $sKey => $mVal) { if ($sKey != 'idcat' && $sKey != 'lang' && $sKey != 'level') { $sVal = $mVal; // assuming mVal is a string and thus a single value if (is_array($mVal)) { // mVal has more than one value, e.g. index-b-1-2.html $sVal = implode($this->aConfig['separator'], $mVal); } $this->sUrl .= $this->aConfig['separator'] . strval($sKey) . $this->aConfig['separator'] . strval($sVal); } } $this->sUrl .= $this->aConfig['suffix']; } } ?>