under discussion Пожелания zxc

Еще одна идея по языкам. Допустим, если на сайт заходят помимо русскоязычных пользователей, немало англоязычных, то им русское оформление раздачи бесполезно (особенно если в релизе файлы исключительно на иностранном языке).

При оформлении раздачи я определяю какой язык раздачи установлен ( по name="msg[lang][]) и тогда подкидываю соответсвующие переменные.

Либо определяю какой язык преобладает в тексте с помощью GitHub - patrickschur/language-detection: A language detection library for PHP. Detects the language from a given text string.
А текст раздачи и её описание - переводите как-то на язык пользователя который зашёл? Или как?
 
А текст раздачи и её описание - переводите как-то на язык пользователя который зашёл? Или как?
Если эта либа определяет, что большая часть текста description на русском, но при этом у раздачи Язык: Английский, то оставляю как есть на русском.
Если всё на забугорном, то подставляю языковые переменные на английском
 
Last edited:
Если эта либа определяет, что большая часть текста на русском, но при этом у раздачи Язык: Английский, то оставляю как есть на русском.
Если всё на забугорном, то подставляю языковые переменные на английском
А, вот оно как. Ну достаточно умно вы придумали) возьму на заметку.
 
Ну это для гугла больше придумано. Если забугорный товарищ приходит из поиска за книгой, то русские кракозябры ну совсем ему ни к чему. Еще в SEO есть такая тема, что если в тексте присутсвуtn криллица, то у страницы меньше шансов попасть в англоязычную выдачу
 
Last edited:
Продолжим тему языков :LOL:

tqR7hD4.jpeg


Делается это очень просто. Добавляется класс .selectpicker (нужно подключать jquery selectpicker js) в <select и меняется msg[lang] на msg[lang][]

Code:
<tr>
    <td><b>{L_LANG}</b> <sup><i class="fa fa-asterisk red" aria-hidden="true"></i></sup></td>
    <td colspan="2"><select required multiple="multiple" data-live-search="true" class="form-control selectpicker" name="msg[lang][]" title="{L_NOT_SELECTED}"><script type="text/javascript">document.writeln(make_format_list(lang));</script></select></td>
</tr>

includes/topic_templates/....php меняем на
Code:
$msg[$item] = (is_array(@$_POST['msg'][$item])) ? implode(', ',@$_POST['msg'][$item]) : @$_POST['msg'][$item];

Увы, старая ревизия, пути уже давно не те, кто не поймет - тот не поймет
 
Last edited:
Немного про систему банов. Если мы забанили пользователя, что ему мешает зарегистрироваться снова?

usercp_register.php
после
$tp_data = array(); // данные для tpl
добавляем
PHP:
// НЕ ДАЕМ СНОВА РЕГИСТРИРОВАТЬСЯ ТЕМ, КТО ЗАБАНЕН

    $result = DB()->fetch_rowset("SELECT ban_userid FROM ". BB_BANLIST ." WHERE 1");

    if(!empty($result)){
        foreach($result AS $k=>$v){
            $ids[]=$v['ban_userid'];
        }

        if(!empty($ids)){
            $result = DB()->fetch_rowset("SELECT user_last_ip, user_reg_ip FROM ". BB_USERS ." WHERE user_id IN(".implode(',',$ids).")");


            foreach($result AS $k=>$v){
                $ips[]=$v['user_last_ip'];
                $ips[]=$v['user_reg_ip'];
            }

            if (in_array(USER_IP,array_unique($ips)) AND !IS_AM){

                message_die(GENERAL_ERROR, $lang['REGISTER_DISABLED'].
                    '<!--br><br>
                    <form method="post" action="/profile.php?mode=register" class="form-group" style="max-width:25%">
                        <div class="input-group input-group-sm">
                            <input class="post form-control" type="text" size="16" maxlength="25" name="invite" value="" placeholder="'.$lang['INVITE_CODE'].'">
                            <span class="input-group-btn">
                                <button type="submit" class="btn btn-default " title="Send">'.$lang['SUBMIT'].'</button>
                            </span>
                        </div>
                    </form-->');
            }
        }
    }

// НЕ ДАЕМ СНОВА РЕГИСТРИРОВАТЬСЯ ТЕМ, КТО ЗАБАНЕН
Этот код выдает забаненым, что регистрация временно недоступна.

Можно конечно банить последний ip пользователя вместе с его аккаунтом, но это неправильно. Сейчас у провайдеров дефицит айпишников и они сажают сотни, а то и тысячи юзеров на один айпи.

Как вариант, можно добавить условие: если айпи пользователя встречается единожды в базе всех пользователей, то запрещаем ему регистрацию.

Либо можно уже реализовать как отдельный мод с помощью GitHub - fingerprintjs/fingerprintjs: The most advanced browser fingerprinting library. - получаем набор параметров браузера пользователя + ip и формируем уникальный хэш из этого и так отлавиливаем мультиаккаунты кроном или в момент авторизации
 
Last edited:
Сейчас у провайдеров дефицит айпишников и они сажают сотни, а то и тысячи юзеров на один айпи.
Да, всё верно. Такая тенденция у провайдеров уже лет так 10, поэтому способ бана по айпи сразу отметаем.

Насчёт использования отпечатка браузера - как вариант, вполне хороший. Так можно и авторизацию в движке сделать, вполне эффективно будет.

Спасибо за идею!
 
Last edited:
Отпечаток тоже не всегда идеален. Были случаи, когда владельцы одних и тех же айфонов на одном айпи жаловались на бан.
Есть еще вариант с библиотекой вечных кукис GitHub - samyk/evercookie но к ним уже негативно относятся поисковики и adguard банит
 
Last edited:
Обязательно переносите анонсер /announce.php на отдельный домен + абузоустойчивый хостинг. Сейчас копирастеры (особенно зарубежные) умеют отслеживать p2p трафик и шлют жалобы на автомате.

Варианты:
создать домен на своем сервере, скопировать на него папку /bt/ и в announce.php и scrape.php прописать строку
define('TR_ROOT', str_ireplace('bt-site.ru','site.ru',$_SERVER['DOCUMENT_ROOT']).'/bt/');

Тоже самое можно реализовать через /etc/fstab прописав относительные пути. Пример:
/var/www/site/data/www/site.ru/bt /var/www/site/data/www/site/bt-site.ru/bt none bind 0 0

Либо админы подскажите как это правильнее сделать
 
Back
Top