Source for file Contenido_UrlBuilder_MR.class.php
Documentation is available at Contenido_UrlBuilder_MR.class.php
* Contenido Content Management System
* Implementation of Contenido_UrlBuilder to build AMR (Advanced Mod Rewrite) Frontend-URLs
* @copyright © Murat Purc 2008
* @license http://www.contenido.org/license/LIZENZ.txt
* @link http://www.4fb.de
* @link http://www.contenido.org
defined('CON_FRAMEWORK') or die('Illegal call');
cInclude('classes', 'UrlBuilder/Contenido_UrlBuilder.class.php');
cInclude('classes', 'UrlBuilder/Contenido_UrlBuilderFactory.class.php');
* Class to build frontend urls for advandced mod rewrite plugin.
* Extends abstract Contenido_UrlBuilder class and implements singleton pattern.
* cInclude('classes', 'UrlBuilder/Contenido_UrlBuilder_MR.class.php');
* $url = 'front_content.php?idart=123';
* $mrUrlBuilder = Contenido_UrlBuilder_MR::getInstance();
* $mrUrlBuilder->buildUrl(array($url));
* $newUrl = $mrUrlBuilder->getUrl();
* @todo Add handling of absolute paths, standardize handling of fragments
* @author Murat Purc <murat@purc.de>
* @copyright © Murat Purc 2008
* @var Contenido_UrlBuilder_MR
* Ampersant used for composing several parameter value pairs
* Is mod rewrite enabled?
* Mod Rewrite configuration
* Constructor, tries to set some member variables.
$this->sHttpBasePath =
'';
$this->_bIsXHTML =
(getEffectiveSetting('generator', 'xhtml', 'false') ==
'false') ?
false :
true;
* Returns a instance of Contenido_UrlBuilder_MR
* @return Contenido_UrlBuilder_MR
if (self::$_instance ==
null) {
self::$_instance =
new Contenido_UrlBuilder_MR();
* Builds a URL based on defined mod rewrite settings.
* @param array $params Parameter array, provides only following parameters:
* $params[0] = 'front_content.php?idart=123...'
* @param boolean $bUseAbsolutePath Flag to use absolute path (not used at the moment)
* @return string New build url
public function buildUrl(array $params, $bUseAbsolutePath=
false) {
$this->_oDebug->addDebug($params, 'Contenido_UrlBuilder_MR::buildUrl() $params');
$urlDebug['in'] =
$params;
$aComp =
parse_url($hmlPath);
$urlPrefix =
$aComp['scheme'] .
'://' .
$aComp['host'];
$this->sUrl =
$urlPrefix .
$url;
$urlDebug['out'] =
$this->sUrl;
$this->_oDebug->addDebug($urlDebug, 'Contenido_UrlBuilder_MR::buildUrl() in -> out');
* Builds the SEO-URL by analyzing passed arguments (parameter value pairs)
* @param array $aParams Parameter array
* @return string New build pretty url
// language should changed, set lang parameter
if (isset
($aParams['changelang'])) {
$aParams['lang'] =
$aParams['changelang'];
$aPretty =
$oMRUrlStack->getPrettyUrlParts('front_content.php?' .
$sQuery);
// get all non contenido related query parameter
// some presettings of variables
// add client id/name if desired
// add language id/name if desired
// get path part of the url
$sPath =
implode('/', $aParts) .
'/';
// get pagename part of the url
$sFileExt =
$this->_aMrCfg['file_extension'];
$sPathAndArticle =
$sPath .
$sArticle .
$sFileExt;
if ($this->_aMrCfg['use_lowercase_uri'] ==
1) {
// $sUrl = $this->_aMrCfg['rootdir'] . $sPathAndArticle . $sQuery;
$sUrl =
$sPathAndArticle .
$sQuery;
// remove double or more join parameter
if (substr($sUrl, -
2) ==
'?=') {
// now convert Contenido url to an AMR url
* Loops thru passed parameter array and creates the query part of the URL.
* All non Contenido related parameter will be excluded from composition.
* @param array $aArgs Assoziative parameter array
* @return string Composed query part for the URL like '?foo=bar&param=value'
// set list of parameter which are to ignore while setting additional parameter
'idcat', 'idart', 'lang', 'client', 'idcatart', 'idartlang'
if ($this->_aMrCfg['use_language'] ==
1) {
$aIgnoredParams[] =
'changelang';
if ($this->_aMrCfg['use_client'] ==
1) {
$aIgnoredParams[] =
'changeclient';
// collect additional non contenido related parameters
foreach ($aArgs as $p =>
$v) {
* Returns client id or name depending on settings.
* @param array $aArgs Additional arguments
* @return mixed Client id, client name or null
if ($this->_aMrCfg['use_client'] ==
1) {
$iChangeClient =
(isset
($aArgs['changeclient'])) ? (int)
$aArgs['changeclient'] :
0;
$idclient =
($iChangeClient >
0) ?
$iChangeClient :
$GLOBALS['client'];
if ($this->_aMrCfg['use_client_name'] ==
1) {
* Returns language id or name depending on settings.
* @param array $aArgs Additional arguments
* @return mixed Language id, language name or null
// set language if desired
if ($this->_aMrCfg['use_language'] ==
1) {
$iChangeLang =
(isset
($aArgs['changelang'])) ? (int)
$aArgs['changelang'] :
0;
$idlang =
($iChangeLang >
0) ?
$iChangeLang :
$GLOBALS['lang'];
if ($this->_aMrCfg['use_language_name'] ==
1) {
* Returns composed path of url (normally the category structure)
* @param array $aPretty Pretty url array
private function _getPath(array $aPretty) {
$sPath =
(isset
($aPretty['urlpath'])) ?
$aPretty['urlpath'] :
'';
// check start directory settings
if ($this->_aMrCfg['startfromroot'] ==
0 &&
(strlen($sPath) >
0)) {
// splitt string in array
$aCategories =
explode('/', $sPath);
// implode array with categories to new string
$sPath =
implode('/', $aCategories);
* Returns articlename depending on current setting
* @param array $aPretty Pretty url array
* @param array $aArgs Additional arguments
* @return string Articlename
$sArticle =
(isset
($aPretty['urlname'])) ?
$aPretty['urlname'] :
'';
$iIdCat =
(isset
($aArgs['idcat'])) ? (int)
$aArgs['idcat'] :
0;
$iIdCatLang =
(isset
($aArgs['idcatlang'])) ? (int)
$aArgs['idcatlang'] :
0;
$iIdCatArt =
(isset
($aArgs['idcatart'])) ? (int)
$aArgs['idcatart'] :
0;
$iIdArt =
(isset
($aArgs['idart'])) ? (int)
$aArgs['idart'] :
0;
$iIdArtLang =
(isset
($aArgs['idartlang'])) ? (int)
$aArgs['idartlang'] :
0;
// category id was passed but not article id
if (($iIdCat >
0 ||
$iIdCatLang >
0) &&
$iIdCatArt ==
0 &&
$iIdArt ==
0 &&
$iIdArtLang ==
0) {
if ($this->_aMrCfg['add_startart_name_to_url']) {
if ($this->_aMrCfg['default_startart_name'] !==
'') {
// use default start article name
$sArticle =
$this->_aMrCfg['default_startart_name'];
$sArticle =
(isset
($aPretty['urlname'])) ?
$aPretty['urlname'] :
'';
// url is to create without article name
Documentation generated on Sun, 08 Feb 2009 22:00:50 +0100 by phpDocumentor 1.4.1