oxseoencodertag.php

Go to the documentation of this file.
00001 <?php
00002 
00007 class oxSeoEncoderTag extends oxSeoEncoder
00008 {
00012     protected static $_instance = null;
00013 
00019     protected $_oTagPrepareUtil = null;
00020 
00026     public static function getInstance()
00027     {
00028         // disable caching for test modules
00029         if ( defined( 'OXID_PHP_UNIT' ) ) {
00030             self::$_instance = modInstances::getMod( __CLASS__ );
00031         }
00032 
00033         if ( !self::$_instance instanceof oxSeoEncoderTag ) {
00034             self::$_instance = oxNew( 'oxSeoEncoderTag' );
00035             if ( defined( 'OXID_PHP_UNIT' ) ) {
00036                 modInstances::addMod( __CLASS__, self::$_instance);
00037             }
00038         }
00039 
00040         if ( defined( 'OXID_PHP_UNIT' ) ) {
00041             // resetting cache
00042             self::$_instance->_aSeoCache = array();
00043         }
00044 
00045         return self::$_instance;
00046     }
00047 
00057     public function getTagUri( $sTag, $iLang = null, $sOxid = null )
00058     {
00059         return $this->_getDynamicTagUri( $sTag, $this->getStdTagUri( $sTag ), "tag/{$sTag}/", $iLang, $sOxid );
00060     }
00061 
00073     protected function _getDynamicTagUri( $sTag, $sStdUrl, $sSeoUrl, $iLang, $sOxid = null )
00074     {
00075         $iShopId = $this->getConfig()->getShopId();
00076 
00077         $sStdUrl   = $this->_trimUrl( $sStdUrl );
00078         $sObjectId = $this->getDynamicObjectId( $iShopId, $sStdUrl );
00079         $sSeoUrl   = $this->_prepareUri( $sSeoUrl );
00080 
00081         //load details link from DB
00082         $sOldSeoUrl = $this->_loadFromDb( 'dynamic', $sObjectId, $iLang );
00083         if ( $sOldSeoUrl === $sSeoUrl ) {
00084             $sSeoUrl = $sOldSeoUrl;
00085         } else {
00086 
00087             if ( $sOldSeoUrl ) {
00088                 // old must be transferred to history
00089                 $this->_copyToHistory( $sObjectId, $iShopId, $iLang, 'dynamic' );
00090             }
00091 
00092             $oTagCloud = oxNew('oxtagcloud');
00093             $sTag = $oTagCloud->prepareTags($sTag);
00094             $sViewName = getViewName( 'oxartextends', $iLang );
00095             $sQ = "select 1 from {$sViewName} where match ( {$sViewName}.oxtags )
00096                    against( ".oxDb::getDb()->quote( "\"".$sTag."\"" )." IN BOOLEAN MODE )";
00097 
00098             if ( $sOxid ) {
00099                 $sQ .= " and oxid = " . oxDb::getDb()->quote( $sOxid );
00100             }
00101 
00102             if ( oxDb::getDb()->getOne( $sQ ) ) {
00103                 // creating unique
00104                 $sSeoUrl = $this->_processSeoUrl( $sSeoUrl, $sObjectId, $iLang );
00105 
00106                 // inserting
00107                 $this->_saveToDb( 'dynamic', $sObjectId, $sStdUrl, $sSeoUrl, $iLang, $iShopId );
00108             } else {
00109                 $sSeoUrl = false;
00110             }
00111         }
00112 
00113         return $sSeoUrl;
00114     }
00115 
00123     protected function _prepareTag( $sTag )
00124     {
00125         if ( $this->_oTagPrepareUtil == null ) {
00126            $this->_oTagPrepareUtil = oxNew('oxtagcloud');
00127         }
00128 
00129         return $sTag = $this->_oTagPrepareUtil->prepareTags($sTag);
00130     }
00131 
00140     public function getStdTagUri( $sTag, $blIncludeIndex = true )
00141     {
00142         // while tags are just strings, standard ulrs formatted stays here
00143         $sUri = "cl=tag&amp;searchtag=" . rawurlencode( $sTag );
00144         if ( $blIncludeIndex ) {
00145             $sUri = "index.php?" . $sUri;
00146         }
00147         return $sUri;
00148     }
00149 
00158     public function getTagUrl( $sTag, $iLang = null)
00159     {
00160         if (!isset($iLang)) {
00161             $iLang = oxLang::getInstance()->getBaseLanguage();
00162         }
00163         return $this->_getFullUrl( $this->getTagUri( $sTag, $iLang ), $iLang );
00164     }
00165 
00176     public function getTagPageUrl( $sTag, $iPage, $iLang = null, $blFixed = false )
00177     {
00178         if (!isset($iLang)) {
00179             $iLang = oxLang::getInstance()->getBaseLanguage();
00180         }
00181         $sStdUrl = $this->getStdTagUri( $sTag ) . '&amp;pgNr=' . $iPage;
00182         $sParams = (int) ($iPage + 1);
00183 
00184         $sStdUrl = $this->_trimUrl( $sStdUrl, $iLang );
00185         $sSeoUrl = $this->getTagUri( $sTag, $iLang ) . $sParams . "/";
00186 
00187         return $this->_getFullUrl( $this->_getDynamicTagUri( $sTag, $sStdUrl, $sSeoUrl, $iLang ), $iLang );
00188     }
00189 }