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 $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
00104 $sSeoUrl = $this->_processSeoUrl( $sSeoUrl, $sObjectId, $iLang );
00105
00106
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
00143 $sUri = "cl=tag&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 ) . '&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 }