Редактируем вывод Title и Description полной новости DLE

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

Начнем с title. Открываем файл engine/engine.php Находим:

$metatags = <<<HTML

Выше добавляем:

//Редактирование вывода тайтла полной новости
if ($subaction == "showfull") {
    if (strlen($metatags['header_title']) > 5) 
        // Выводим уникальный тайтл, если он заполнен
        {
        $metatags['title'] = str_replace ( ' &raquo; '.$config['home_title']  , " " , $metatags['header_title'] );
        }
    else 
        // Если нет то добавляем свой текст в зависимости от длины
        {
        if (mb_strlen($titl_e, 'UTF-8') < 23) 
            {
            $metatags['title'] = str_replace ( ' &raquo; '.$config['home_title']  , " " , $metatags['title'] ). "играть онлайн бесплатно на site.ru";
            }
        else 
            {
            if (mb_strlen($titl_e, 'UTF-8') < 31)
                {
                $metatags['title'] = str_replace ( ' &raquo; '.$config['home_title']  , " " , $metatags['title'] ). "онлайн бесплатно на site.ru";
                }
            else
                {
                if (mb_strlen($titl_e, 'UTF-8') < 38)
                    {
                    $metatags['title'] = str_replace ( ' &raquo; '.$config['home_title']  , " " , $metatags['title'] ). "бесплатно на site.ru";
                    }
                else 
                    {
                    $metatags['title'] = str_replace ( ' &raquo; '.$config['home_title']  , " " , $metatags['title'] ). "на site.ru";
                    }
                }
            }
        }
}
//Редактирование вывода тайтла полной новости

Текст можно писать любой. Я сделал ограничение заголовка до 60 символов. Данный код сохраняет вывод уникального тайтла, если он заполнен. Изначально использовалась функция strlen, но кириллицу в utf8 она считала некорректно (1 символ за 2). Можно было бы поделить результат на 2, но тогда названия постов на латинице будут неправильно считаться, поэтому применил функцию mb_strlen($var, ‘UTF-8’) Получилось неплохо.

UPD 04.03.2015:

Пришлось еще больше заморочиться по поводу тайтла, поскольку текст добавлялся как после названия поста, так и до. Получалось некрасиво «Смотреть Фильм бла бла бесплатно». начал искать функции, которые помогли бы перевести весь заголовок в нижний регистр, а первую букву сделать заглавной и все это в кодировке UTF8. Кстати все ее так хвалят, но я пока ни одного преимущества по сравнению с 1251 не нахожу. Win 1251 работает быстрее, 1 символ = 1байт и т.д. В итоге для перевода в нижний регистр достаточно было указать кодировку, а для заглавной буквы нужна своя функция. Ее я нашел на просторах интернета.

    // функция для перевода первого символа в верхний регистр utf-8
    function ucfirst_utf8($str) 
    {return mb_substr(mb_strtoupper($str, 'utf-8'), 0, 1, 'utf-8') . mb_substr($str, 1, mb_strlen($str)-1, 'utf-8');}
    
    $metatags['title'] = mb_strtolower($metatags['title'],'utf-8'); //сначала переводим весь заголовок в нижний регистр
    $metatags['title'] = ucfirst_utf8($metatags['title']); // После применяем написанную выше функцию

Добавляем этот код после редактирования Тайтла, в зависимости от длины. Профит 🙂

Теперь займемся тегом Description

Открываем engine/modules/show.full.php,ищем:

if( $row['descr'] ) $metatags['description'] = $row['descr']; else $metatags['description'] = $row['title'];

Заменяем на:

if( $row['descr'] ) $metatags['description'] = $row['descr']; else $metatags['description'] = ''.substr(strip_tags($row['short_story']),0,230).'...'; //вывод своего тега description

По сути можно написать что угодно, например

if( $row['descr'] ) $metatags['description'] = $row['descr']; else $metatags['description'] = 'Классная игра '.$row['title'].' из категории '.$my_cat.', В которую можно играть бесплатно и без регистрации прямо сейчас.';

Но пока мне подходит вариант с кратким описанием с обрезкой по символам и удаления html тегов.

Кстати не разобрался только с одним. При обрезке до 230 символа выводит примерно 140, непонятно почему. Скорее всего ситуация такая же, как и с тайтлом, т.е. дело в кодировке.

Навигация

Предыдущая статья: ←

Следующая статья:

Обсуждение: 2 комментария
  1. Владимир:

    Спасибо большое, очень выручили ваши рекомендации по Description.
    Один момент, если новость относится к нескольким категориям, то для нормального вывода этих категорий (через запятую) нужно еще изменить строки в /engine/modules/show.full.php — «$my_cat_link = implode( ‘, ‘, $my_cat_link ); » и $my_cat = implode( ‘, ‘, $my_cat );

  2. fedi:

    Здравствуйте. У меня почему-то не работает Description. дле11.1, включены мультикатегории.

Поделитесь своим мнением
Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Виджеты

Это место для ваших персональных виджетов. Ставьте из админки - рубрики, архивы, метки, календарь, свежие комментарии, произвольное меню и др.

© 2019 Интернет медиа системы  Войти