форум vBSupport.ru > vBulletin > Вопрос — Ответ
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
Лео
В Черном списке
 
Лео's Avatar
Question Переключения языков на сайте
0

Недавно передомной была поставлена задача создать сайт на нескольких языках. Я раньше уже такой делал, но тогда я не учел поисковых роботов.
Проблема в том, что на моём старом скрипте для всех языков URL сайта будет выглядеть одинаково. И так как поисковики будут шнырять по сайту на котором в этот момент стоит основной язык, то и по запросам пользователей они выдатут только страницы на этом языке, а если пользователь будет запрашивать на другом языке, то бот ему мой сайт не покажет.
Тоесть, нужно чтоб скрипт при заходе на сайт постоянно добавлял что-то типа /ru/ или ?langid=ru к URL в адрессной строке браузера.
Если кто-то с таким уже сталкивался или может быть знает решение, ХЕЛП.
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
kerk
k0t
 
kerk's Avatar
Default
1

http://www.phpclasses.org/
там много чего есть, можешь подписаться на рассылку, иногда приходят нужные вещи =)
 
 
Лео
В Черном списке
 
Лео's Avatar
Default
0

Вот.
Вроде дописал этот класс. Работает всё замечательно. Пока
Возможности:
1. Сохраняет выбранный посетителем язык в куки и при следующем его посещении сразу включает этот язык;
2. При вводе в адрессную строку браузера корневого URL сайта ( http://yourdomain.com/ ), автоматически переадресовывает на http://yourdomain.com/langid/, где langid - это идентификатор языка который вы зарегистрировали первым в списке или язык который сохранился в куках у посетителя;

Сначала нужно проинициализировать все необходимые переменные. Тоесть Массив с идентификаторами существующих языков и их именами, корневым URL сайта и разрешени ли альтернативные ссылки (вкл. ЧПУ). Вот...
PHP Code:
$config = array(
    
'langs' => array(
        
'ids' => "ru,en"// зарегистрированные языковые пакеты
        
'names' => "русский,english" // имена зарегистрированных языков
        
),
    
'home_url' => "http://".$_SERVER['HTTP_HOST']."/"// корневой URL сайта
    
'alt_url' => "yes"// альтернативные ссылки (включить блок ЧПУ)
); 
Далее сам класс:
PHP Code:
<?php
/*
=====================================================
 Created by ...boonya... (http://triallart.com)
=====================================================
 Файл: lang.class.php
-----------------------------------------------------
 Назначение: подключение и управление языками
=====================================================
*/
class language {
    
// инициализация
    
var $langs = array(); // содержит названия доступных языков. $tpl->langs['0']; $tpl->langs['ru'];
    
var $id ''// идентификатор текущего языка $tpl->id;
    
var $reg FALSE;
    
// конструктор
    
function language () {
        global 
$config;
        
$ids explode(','$config['langs']['ids']);
        
$names explode(','$config['langs']['names']);
        
// проверка присутствия языков и их названий
        
if (!count($ids)) die("registered languages packs does not exist");
        if (
count($ids) != count($names)) die("количество языков не соответствует количеству их имён");
        
// определяем текущий язык
        
if ($_POST['langid'] != '')
            
$this->id strtolower($_POST['langid']);
        elseif (
$_GET['langid'] != '')
            
$this->id strtolower($_GET['langid']);
        elseif (
$_COOKIE['langid'] != '')
            
$this->id strtolower($_COOKIE['langid']);
        elseif (
$_SESSION['langid'] != '')
            
$this->id strtolower($_SESSION['langid']);
        else
            
$this->id reset($ids);
        
// помещаем идентификаторы и названия языков в массив $this->langs и проверяем текущий язык
        
$c 0;
        foreach (
$ids as $id) {
            
$this->langs[$c]['name'] = $names[$c];
            
$this->langs[$c]['id'] = $id;            
            if(
$this->reg != TRUE)
                
$this->reg = ($this->id == $id) ? TRUE FALSE// проверяем существует ли запрошенный язык
            
$c++;
        }
        
$this->id $this->reg $this->id reset($ids);
    }
    
// ===============================================================
    
function include_file() {
        global 
$lang;
        if (
file_exists(ROOT_DIR."/languages/$this->id.php")) { // проверяем, есть ли необходимый языковый пакет
            
include_once(ROOT_DIR ."/languages/$this->id.php"); // подключаем языковый файл
            
set_cookie('langid'$this->id365); // устанавливаем куки
            
session_register('langid'); // регистрируем сессию
            
$_SESSION['langid'] = $this->id// устанавливаем сессию
        
} else // если такого файла нет, то кричим об ошибке
            
die("language pack &quot;".$this->id.".php&quot; not exist!");
    }
    
// ===============================================================
    
function tpl() {
        global 
$tpl;
        
$tpl->load_template('lang.html');
        foreach (
$this->langs as $langid) {
            
$tpl->set('{link}'$this->set_link($langid['id']));
            
$tpl->set('{id}'$langid['id']);
            
$tpl->set('{name}'$langid['name']);
            
$tpl->compile('lang');
        }
        
$tpl->clear();
    }
    
// ===============================================================
    
function set_link($langid) {
        global 
$config;
        if (
$config['alt_url'] == 'yes') {
            if(
preg_match("'langid=([^\/\&\?\.\=\+]*)'i"$_SERVER['QUERY_STRING'], $mat))
                
$url "$config[home_url]".preg_replace("#^/?[^\/\&\?\.\=\+]*#i"$langid$_SERVER['REQUEST_URI']);
            else
                
$url "$config[home_url]$langid$_SERVER[REQUEST_URI]";                    
        } else {
            if(
preg_match("'langid=([^\/\&\?\.\=\+]*)'i"$_SERVER['QUERY_STRING']))
                
$url "$config[home_url]index.php?".preg_replace("'langid=([^\/\&\?\.\=\+]*)'i""langid=$langid"$_SERVER['QUERY_STRING']);
            else
                
$url "$config[home_url]index.php?langid=$langid&$_SERVER[QUERY_STRING]";
        }
        return 
$url;    
    }
    
// ===============================================================
    
function redirect() {
        if(!
$_GET['langid'] or !$this->reg)
            
header("Location:".$this->set_link($this->id));
    }
}
?>
И наконец нужно создать объект, и запустить необходимые функции
PHP Code:
require_once ENGINE_DIR.'/classes/lang.class.php';
$lng = new language();
// переадресовываем
$lng->redirect();
// подключаем языковый пакет
$lng->include_file();
// генерируем меню выбора языков
if(count($lng->langs) > 1)
    
$lng->tpl(); 
Вот вроде и ффсё. Если будут проблемы, вопросы или ошибки - пишите
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 10:29 PM.


Powered by vBulletin® Version 3.0.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.