Title Control

Title Control 1.7

Нет прав для скачивания

Hope

Premium
Сообщения
48,305
Решения
22
Реакции
71,882
Баллы
40,905
Пользователь Hope разместил новый ресурс:

Title Control - Полный контроль над заголовками тем.

Возможности плагина:
  • Возможность задать максимальную длину для заголовка темы
  • Принудительный перевод первой буквы темы в верхний регистр
  • Возможность использования внешнего php файла для управления заголовками тем

Путь к PHP: данная опция позволит администраторам создавать дополнительный PHP файл, который может управлять любым аспектом заголовков тем. Вот пример кода для php файла, который позволит автоматически удалять все кавычки из заголовков тем:...

Узнать больше об этом ресурсе...
 
А вот интересно, как бы выглядел внешний PHP-файл, если бы я хотел запретить использовать в заголовке не кавычки, а, например, слово "велосипед" ?
 
Возможно как-то так:
PHP:
<?php

// get title
$title = $this->get('title');

// remove quotes
if (substr_count($title, 'велосипед;') > 0){
    $patterns[0] = '/\велосипед;/';
    $replacements[0] = '';
    $title = preg_replace($patterns, $replacements, $title);
}

// set title
$this->set('title', $title);
?>

Но не факт, возможно конструкция будет вообще другой. :)
 
  • Мне нравится
Реакции: fau
Но не факт, возможно конструкция будет вообще другой.

Вечером попробую - отпишусь. Спасибо, как всегда ! :)
Кстати, а если, скажем, два слова (если я не слишком много от вас хочу :x3:)?
 
Не знаю даже... Я не уверен, что с одним словом заработает даже. :-D
 
  • Мне нравится
Реакции: fau
Доброго всем субботнего утра! :-)

Ну, вот что удалось узнать интересного. Все оказалось просто.

Как подключить внешний PHP-файл, ясно указано в настройках плагина

pic001.jpg

Берем и указываем здесь абсолютный путь на вашем сервере к файлу TitleControl.php (его почему-то нет в установочном архиве, но он волшебным образом появляется по адресу library/Andy/TitleControl/).
А в этом файле чего только не прописано :-)

Код:
<?php

// get userId
$visitor = XenForo_Visitor::getInstance();
$userId = $visitor['user_id'];

if ($userId != 1)
{
    // get title
    $title = $this->get('title');

    // get userId
    $visitor = XenForo_Visitor::getInstance();
    //$userId = $visitor['user_id'];
    $permission_combination_id = $visitor['permission_combination_id'];

    //########################################
    // remove trailing period

    // declare variable
    $done = '';
    while ($done != 'yes') {

      $length = strlen($title);
      $length = $length - 1;
      $lastchar = substr($title, $length, 1);

      if ($lastchar != '.') {
        $done = 'yes';
      }

      if ($lastchar == '.') {
        $title = substr($title, 0, $length);
      }

    }

    // prevent majority all caps
    if (strlen($title) > 20){
        $pattern[0] = '/[^a-z]/';
        $replacement[0] = '';
        $parsed = preg_replace($pattern, $replacement, $title);
        $lower_count = strlen($parsed);
  
        $pattern[0] = '/[^A-Z]/';
        $replacement[0] = '';
        $parsed = preg_replace($pattern, $replacement, $title);
        $upper_count = strlen($parsed);
  
        if ($upper_count > $lower_count) {
            $title = strtolower($title);
            $title = ucfirst($title);
        }
    }

    if (substr_count($title, '.') > 2){
      $patterns[0] = '/\./';
      $replacements[0] = '';
      $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '..') == 1){
        $patterns[0] = '/\.\./';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '?') > 1){
        $patterns[0] = '/\?/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '/') > 2){
      $patterns[0] = '/\//';
      $replacements[0] = ' ';
      $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '\'') > 2){
        $patterns[0] = '/\'/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, ':') > 2){
        $patterns[0] = '/\:/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }


    if (substr_count($title, '-') > 1){
        $patterns[0] = '/\-/';
        $replacements[0] = ' ';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, ',') > 1){
        $patterns[0] = '/\,/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    $pos = strpos($title, "irthday");

    if ($pos === false) {
  
        if ($permission_combination_id != 8) {

            if (substr_count($title, '(') > 0){
                $patterns[0] = '/\(/';
                $replacements[0] = '';
                $title = preg_replace($patterns, $replacements, $title);
            }
  
            if (substr_count($title, ')') > 0){
                $patterns[0] = '/\)/';
                $replacements[0] = '';
                $title = preg_replace($patterns, $replacements, $title);
            }
        }
    }

    if (substr_count($title, '$') > 1){
        $patterns[0] = '/\$/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '&amp;') > 1){
        $patterns[0] = '/\&amp;/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '&quot;') > 0){
        $patterns[0] = '/\&quot;/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '_') > 1){
        $patterns[0] = '/\_/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '!') > 0){
        $patterns[0] = '/\!/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '&lt;') > 0){
        $patterns[0] = '/\&lt;/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '&gt;') > 0){
        $patterns[0] = '/\&gt;/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '@') > 0){
        if (substr_count($title, 'K@TT') == 0){
            $patterns[0] = '/\@/';
            $replacements[0] = '';
            $title = preg_replace($patterns, $replacements, $title);
        }
    }

    if (substr_count($title, '%') > 1){
        $patterns[0] = '/\%/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, 'HH') > 0){
        $patterns[0] = '/\bHH\b/';
        $replacements[0] = 'Hollister Hills';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, 'WTF') > 0){
        $patterns[0] = '/WTF/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, 'wtf') > 0){
        $patterns[0] = '/wtf/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '"') > 0){
        $patterns[0] = '/\"/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '“') > 0){
        $patterns[0] = '/\"/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '”') > 0){
        $patterns[0] = '/\"/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '‘') > 0){
        $patterns[0] = '/\"/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '*') > 0){
        $patterns[0] = '/\*/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, '[') > 0){
        $patterns[0] = '/\[/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    if (substr_count($title, ']') > 0){
        $patterns[0] = '/\]/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

    // set title
    $this->set('title', $title);
}
?>

Тут вам и автозамена (HH на Hollister Hills), и удаление слов (WTF), кавычек, ненужых знаков и символов, защита от капслока и т.д.
Сами посмОтрите, как это лучше настроить для ваших нужд.
С русскими буквами и словами тоже все корректно. То есть своих целей я достиг.

Код:
    if (substr_count($title, 'велосипед') > 0){
        $patterns[0] = '/велосипед/';
        $replacements[0] = '';
        $title = preg_replace($patterns, $replacements, $title);
    }

И никакого велосипеда больше в названиях вновь создаваемых тем не будет :-)

Жаль, конечно, что нельзя все, что можно настроить в этом внешнем файле, указать в настройках самого плагина...

----------

И заодно уже. Если не трудно, поясните мне, неучу, почему у меня ничего не работало, пока я не удалил из этого внешнего файла

Код:
// get userId
$visitor = XenForo_Visitor::getInstance();
$userId = $visitor['user_id'];

if ($userId != 1)
{

********** тут остальное содержимое, которое я оставил

}
 
Последнее редактирование модератором:
fau, всё оказалось куда проще, чем мы тут мудрили. :-D Ну вот так всегда и бывает. Спасибо за отличный и понятный мануал! :thumbsup:
 
Добрый день, друзья!

И все-таки не так все безоблачно...

В некоторых случаях (закономерности пока не вывил) у некоторых пользователей при ответе в собственной теме (например, при ее подъеме) вылазит вот такая ошибка

Mysqli statement execute error : Incorrect string value: '\xD1' for column 'title' at row 1

Есть какие-нибудь мысли на этот счет?
Отключение плагина устраняет ошибку. Так что где-то здесь собака зарыта.

---

Кстати, тема этой ошибки на мгновение поднималась и тут же закрылась
http://xenforo.info/threads/Проблема-с-перестраиванием.3034/
 
А вот интересно, как бы выглядел внешний PHP-файл, если бы я хотел запретить использовать в заголовке не кавычки, а, например, слово "велосипед" ?
а пользоваться стандартным цензором не вариант?)))
слово для замены пробел=)
 
а пользоваться стандартным цензором не вариант?)))
слово для замены пробел:-)

Дык цензором оно будет заменяться не только в заголовке, но и в самой теме.
А мне надо контролировать ТОЛЬКО в заголовке.

======
Добавляю позже:

помогло комментирование в файле /library/Andy/TitleControl/DataWriter/Discussion/Thread.php вот этого куска кода
Код:
        // maximum length
        if ($maxLength != '')
        {
            $title = $this->get('title');
           
            $currentTitleLength = strlen($title);
           
            if ($currentTitleLength > $maxLength)
            {
                $title = substr($title, 0, $maxLength);
                $this->set('title', $title);           
            }           
        }

Но теперь, разумеется, не работает ограничение на число символов в заголовке... Что не есть правильно. А хотелось бы все же правильно :)
 
Последнее редактирование:
fau, посмотрите таблицы в БД от этого плагина и проверьте, что они все в UTF8
 
  • Мне нравится
Реакции: fau
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу