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
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
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
00082 $sOldSeoUrl = $this->_loadFromDb( 'dynamic', $sObjectId, $iLang );
00083 if ( $sOldSeoUrl === $sSeoUrl ) {
00084 $sSeoUrl = $sOldSeoUrl;
00085 } else {
00086
00087 if ( $sOldSeoUrl ) {
00088
00089 $this->_copyToHistory( $sObjectId, $iShopId, $iLang, 'dynamic' );
00090 }
00091
00092 $oTagCloud = oxNew('oxtagcloud');
00093 $sTag = $oTagCloud->prepareTags($sTag);
00094
00095 $sLangExt = oxLang::getInstance()->getLanguageTag( $iLang );
00096 $sQ = "select 1 from oxartextends where match ( oxartextends.oxtags{$sLangExt} )
00097 against( ".oxDb::getDb()->quote( "\"".$sTag."\"" )." IN BOOLEAN MODE )";
00098
00099 if ( $sOxid ) {
00100 $sQ .= " and oxid = " . oxDb::getDb()->quote( $sOxid );
00101 }
00102
00103 if ( oxDb::getDb()->getOne( $sQ ) ) {
00104
00105 $sSeoUrl = $this->_processSeoUrl( $sSeoUrl, $sObjectId, $iLang );
00106
00107
00108 $this->_saveToDb( 'dynamic', $sObjectId, $sStdUrl, $sSeoUrl, $iLang, $iShopId );
00109 } else {
00110 $sSeoUrl = false;
00111 }
00112 }
00113
00114 return $sSeoUrl;
00115 }
00116
00124 protected function _prepareTag( $sTag )
00125 {
00126 if ( $this->_oTagPrepareUtil == null ) {
00127 $this->_oTagPrepareUtil = oxNew('oxtagcloud');
00128 }
00129
00130 return $sTag = $this->_oTagPrepareUtil->prepareTags($sTag);
00131 }
00132
00141 public function getStdTagUri( $sTag, $blIncludeIndex = true )
00142 {
00143
00144 $sUri = "cl=tag&searchtag=" . rawurlencode( $sTag );
00145 if ( $blIncludeIndex ) {
00146 $sUri = "index.php?" . $sUri;
00147 }
00148 return $sUri;
00149 }
00150
00159 public function getTagUrl( $sTag, $iLang = null)
00160 {
00161 if (!isset($iLang)) {
00162 $iLang = oxLang::getInstance()->getBaseLanguage();
00163 }
00164 return $this->_getFullUrl( $this->getTagUri( $sTag, $iLang ), $iLang );
00165 }
00166
00177 public function getTagPageUrl( $sTag, $iPage, $iLang = null, $blFixed = false )
00178 {
00179 if (!isset($iLang)) {
00180 $iLang = oxLang::getInstance()->getBaseLanguage();
00181 }
00182 $sStdUrl = $this->getStdTagUri( $sTag ) . '&pgNr=' . $iPage;
00183 $sParams = (int) ($iPage + 1);
00184
00185 $sStdUrl = $this->_trimUrl( $sStdUrl, $iLang );
00186 $sSeoUrl = $this->getTagUri( $sTag, $iLang ) . $sParams . "/";
00187
00188 return $this->_getFullUrl( $this->_getDynamicTagUri( $sTag, $sStdUrl, $sSeoUrl, $iLang ), $iLang );
00189 }
00190 }