Преглед изворни кода

#3936 SEO links: rewrites for pages URIs

Alex Trofimov пре 4 година
родитељ
комит
da9f97c29e
3 измењених фајлова са 33 додато и 0 уклоњено
  1. 18 0
      inc/classes/BxDolPage.php
  2. 6 0
      inc/classes/BxDolPageQuery.php
  3. 9 0
      install/sql/system.sql

+ 18 - 0
inc/classes/BxDolPage.php

@@ -299,6 +299,21 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
         if (!$a || empty($a[0]))
             return false;
 
+        // check page URI rewrite redirect
+        $aSeoUriRewrites = BxDolPageQuery::getSeoUriRewrites();
+        if (isset($aSeoUriRewrites[$a[0]])) {
+            unset($_GET['_q']);
+            $a[0] = $aSeoUriRewrites[$a[0]];
+            $sUrl = BX_DOL_URL_ROOT . bx_append_url_params(mb_strtolower(implode('/', $a)), $_GET);
+            header('Location:' . $sUrl, true, 301);
+            exit;            
+        }
+
+        // check page URI rewrite
+        $aSeoUriRewritesInv = array_flip($aSeoUriRewrites);
+        if (isset($aSeoUriRewritesInv[$a[0]]))
+            $a[0] = $aSeoUriRewritesInv[$a[0]];
+
         // get page
         $sPageName = BxDolPageQuery::getPageObjectNameByURI($a[0]);
         $aPage = $sPageName ? BxDolPageQuery::getPageObject($sPageName) : false;
@@ -367,6 +382,9 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
             return false;
 
         $sSeoPageUri = $sPageUri;
+        $aSeoUriRewrites = BxDolPageQuery::getSeoUriRewrites();
+        if (isset($aSeoUriRewrites[$sSeoPageUri]))
+            $sSeoPageUri = $aSeoUriRewrites[$sSeoPageUri];
 
         if ($sSeoParamName && $sSeoParamValue) { // process page with SEO param
             $sPageName = BxDolPageQuery::getPageObjectNameByURI($sPageUri);

+ 6 - 0
inc/classes/BxDolPageQuery.php

@@ -128,6 +128,12 @@ class BxDolPageQuery extends BxDolDb
         return $this->getRow($sQuery);
     }
 
+    static public function getSeoUriRewrites()
+    {
+        $oDb = BxDolDb::getInstance();
+        return $oDb->fromCache('sys_seo_uri_rewrites', 'getPairs', 'SELECT `uri_orig`, `uri_rewrite` FROM `sys_seo_uri_rewrites`', 'uri_orig', 'uri_rewrite');
+    }
+
     static public function getSeoLink($sModule, $sPageUri, $aCond = [])
     {
         $oDb = BxDolDb::getInstance();

+ 9 - 0
install/sql/system.sql

@@ -5850,6 +5850,15 @@ CREATE TABLE `sys_seo_links` (
   KEY `param_name_value` (`param_name`,`param_value`)
 );
 
+CREATE TABLE `sys_seo_uri_rewrites` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `uri_orig` varchar(255) NOT NULL,
+  `uri_rewrite` varchar(255) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uri_orig` (`uri_orig`(191)),
+  UNIQUE KEY `uri_rewrite` (`uri_rewrite`(191))
+);
+
 -- --------------------------------------------------------
 
 --