Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

отобразить префикс языка в url сроке сайта


Vasiliyn1

Recommended Posts

Доброе время суток уважаемые знатоки. Прошу помочь или подсказать возможно ли:

1.требуется отобразить в url строке префик языка"украинского" по умолчанию. 

2.требуется спрятать префик языка"русского" - когда он выбран

При стандартной настрйке по умолчанию "префикс языка" не отображается.

https://toper.specznak.com.ua/contact-us

Надіслати
Поділитися на інших сайтах


Вот реализация моего модуля. можно жестко прописать $include_lang_code=true;

ссылка получается типа домен/iso языка/(порядковый номер из массива $preg, что исключает обращение к БД при переходе по ссылке)-категория (товар)

это немного устаревшая версия модуля.

Спойлер

 

class ControllerStartupSeoUrl extends Controller
   {
     private $ext='';
     private $lang_code='';
     private $langid=1;
     private $include_lang_code=false;
     private $include_pref=false;
     private $table='url_alias';
     private $preg=array('category_id'=>'product/category','product_id'=>'product/product','manufacturer_id'=>'product/manufacturer/info','information_id'=>'information/information');
     private $indexes=array();
     private $rev_indexes=array();
     private $settings=array();
# for development
 private function log_write($message)
     {
       $handle=fopen('seo.log', 'a');
       fwrite($handle, date('Y-m-d G:i:s').'-'.print_r($message, true)."\n");
       fclose($handle);
     }

 public function index()
     {
     if($this->config->get('config_seo_url'))
       {
         $this->url->addRewrite($this);
       }
     if(VERSION>=3)
       {
         $this->table='seo_url';
       }
     if($this->include_lang_code)
       $this->lang_code = '/'.$this->language->get('code');
     if(count($this->rev_indexes)==0)$this->getParams();
        if(count($this->settings)==0)$this->settings=$this->getSeo();
        if(isset($this->request->get['_route_']))
       {
         $parts=explode('/', $this->request->get['_route_']);
         if($this->include_lang_code)
          array_shift($parts);
         $parts=preg_replace('/'.$this->ext.'/','',$parts);
       if(utf8_strlen(end($parts))==0)
         {
           array_pop($parts);
         }
        foreach($parts as $part)
         {
           $index=explode('-', $part);
         if(!array_key_exists($index[0],$this->rev_indexes))
           {
           if(!array_key_exists($part,$this->settings))
             {
               $query=$this->db->query("SELECT * FROM ".DB_PREFIX.$this->table." WHERE keyword='".$this->db->escape($part)."'");
             if($query->num_rows)
               {
                 $this->request->get['route']=$query->row['query'];
               }
                else
               {
                 $this->request->get['route']='error/not_found';
                   break  ;
               }
             }
              else
                $this->request->get['route']=$this->settings[$part];
           }
            else
           {
           if($this->rev_indexes[$index[0]]=='category_id')
             {
             if(!isset($this->request->get['path']))
               {
                 $this->request->get['path']=$index[1];
               }
                else
               {
                 $this->request->get['path'].='_'.$index[1];
               }
             }
              else
                $this->request->get[$this->rev_indexes[$index[0]]]=$index[1];
           }
         }
       if(!isset($this->request->get['route']))
         {
         if(isset($this->request->get['path']))
           {
             $this->request->get['route']='product/category';
           }
            else
           {
            foreach($this->preg as $key=>$value)
             {
             if(isset($this->request->get[$key]))
               {
                 $this->request->get['route']=$value;
                   break  ;
               }
             }
           }
         }
       if(isset($this->request->get['route']))
         {
         return new Action($this->request->get['route']);
         }
       }
     }

 public function rewrite($link)
     {
     if(count($this->settings)==0){
      $this->langid = $this->getLangId($this->language->get('code'));
      $this->settings=$this->getSeo();
     }
       $url_info=parse_url(str_replace('&', '&', $link));
       $url='';
       $data=array();
       parse_str($url_info['query'], $data);
      foreach($data as $key=>$value)
       {
         switch($key)
         {
             case 'route':
         if(isset($this->settings[$value]))
              $url.='/'.$this->settings[$value];
            else
           {
             $url='';
           }
           unset($data['route']);
             break  ;
             case 'path':
           $array_categories=explode('_', $value);
          foreach($array_categories as $category_id)
           {
           if(isset($this->settings["category_id=".$category_id]))
                $url.='/'.$this->indexes["category_id"].'-'.$category_id.'-'.$this->settings["category_id=".$category_id];
              else
                $url='';
           }
           unset($data['path']);
             break  ;
             case 'product_id':
            if(VERSION<3)
              $query=$this->db->query("SELECT * FROM `".DB_PREFIX.$this->table."` WHERE `query`='".$this->db->escape('product_id='.(int)$value)."'");
             else {
              $query=$this->db->query("SELECT * FROM `".DB_PREFIX.$this->table."` WHERE `query`='".$this->db->escape('product_id='.(int)$value)."' AND `language_id`='".(int)$this->langid."' AND `store_id`='".(int)$this->config->get('config_store_id')."'");
           }
         if($query->num_rows && $query->row['keyword'])
              $url.='/'.$this->indexes["product_id"].'-'.$value.'-'.$query->row['keyword'];
           unset($data['product_id']);
             break  ;
           default:
         if(isset($this->settings[$key.'='.$value]))
              $url.='/'.$this->indexes[$key].'-'.$value.'-'.$this->settings[$key.'='.$value];
            else
           {
             $url='';
           }
           unset($data[$key]);
             break  ;
         }
       }
     if($url)
       {
         $query='';
       if($data)
         {
          foreach($data as $key=>$value)
           {
             $query.='&'.rawurlencode((string)$key).'='.rawurlencode((string)$value);
           }
         if($query)
           {
             $query='?'.str_replace('&', '&amp;', trim($query, '&'));
           }
         }
       return $url_info['scheme'].'://'.$url_info['host'].(isset($url_info['port'])?':'.$url_info['port']:'').str_replace('/index.php', '', $this->lang_code.$url_info['path']).$url.$query.$this->ext;
       }
        else
       {
       return $link;
       }
     }

 private function getLangId($l)
     {
       $sql="SELECT `language_id` FROM `".DB_PREFIX."language` WHERE `code` LIKE '%".$l."%'" ;
       $query=$this->db->query($sql);
     return $query->row['language_id'];
     }
     
 private function getSeo()
     {
     if(file_exists(DIR_CACHE.'seotools_sef_seo'.'_'.$this->language->get('code')))
       {
         $content=file_get_contents(DIR_CACHE.'seotools_sef_seo'.'_'.$this->language->get('code'));
       return unserialize($content);
       }
       $arr=array();
       if(VERSION<3)
       $query=$this->db->query("SELECT `query`,`keyword` FROM `".DB_PREFIX.$this->table."` WHERE `query` NOT LIKE '".$this->db->escape('%product_id%')."'");
       else {
           $query=$this->db->query("SELECT `query`,`keyword` FROM `".DB_PREFIX.$this->table."` WHERE `query` NOT LIKE '".$this->db->escape('%product_id%')."' AND `language_id`='".(int)$this->langid."' AND `store_id`='".(int)$this->config->get('config_store_id')."'");
       }
     if($query->num_rows)
       {
        foreach($query->rows as $key=>$row)
         {
           $arr[$row["query"]]=$row["keyword"];
         }
       }
       $this->settings=$arr;
       file_put_contents(DIR_CACHE.'seotools_sef_seo'.'_'.$this->language->get('code'),serialize($arr));
     return $arr;
     }

 private function getParams()
     {
     if(file_exists(DIR_CACHE.'seotools_sef_params'))
       {
         $content=file_get_contents(DIR_CACHE.'seotools_sef_params');
         $params=unserialize($content);
         $this->preg=$params['preg'];
         $this->indexes=$params['indexes'];
         $this->rev_indexes=$params['rev_indexes'];
         $this->include_lang_code=$params['include_lang_code'];
         if($this->include_lang_code) $this->lang_code = '/'.$this->language->get('code');
         $this->ext=$params['ext'];
       }
        else
       {
       $sql="SELECT `value` FROM `".DB_PREFIX."setting` WHERE `code`='supertools_seo' AND `key`='supertools_seo_lang'" ;
       $query=$this->db->query($sql);
       $this->include_lang_code=(isset($query->row['value']))?$query->row['value']:0;
       $sql="SELECT `value` FROM `".DB_PREFIX."setting` WHERE `code`='supertools_seo' AND `key`='supertools_seo_ext'" ;
       $query=$this->db->query($sql);
       if(isset($query->row['value'])&&$query->row['value']==1)
       $this->ext='.html';
       $sql="SELECT `value` FROM `".DB_PREFIX."setting` WHERE `code`='supertools_seo' AND `key`='supertools_seo_custom_tabs'" ;
       $query=$this->db->query($sql);
      if($query->num_rows)
       {
        foreach(json_decode($query->row['value']) as $key=>$val)
         {
          foreach($val as $_key=>$_val){
           $this->preg=array_merge($this->preg,array($_key=>$_val));    
          }
         }
       }
         $i=1;
        foreach($this->preg as $key=>$value)
         {
           $this->indexes=array_merge($this->indexes,array($key=>$i));
           $i++;
         }
         $this->rev_indexes=array_flip($this->indexes);
         file_put_contents(DIR_CACHE.'seotools_sef_params',serialize(array('ext'=>$this->ext,'include_lang_code'=>$this->include_lang_code,'preg'=>$this->preg,'indexes'=>$this->indexes,'rev_indexes'=>$this->rev_indexes)));
       }
     }
   }

 

 

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.