Плагин TopicIntro - работаем с анонсами

После статьи Плагин TopicIntro — автопревью к статье, анонс статьи и прочие «плюшки» я так и так собирался написать более подробно, как максимально эффективно использовать все возможности этого плагина, но планировал сначала написать про превью-изображения, а потом уже про интротекст (или анонсы). Но, видимо, работа с анонсами вызывает больше вопросов, поэтому сейчас я расскажу именно об этом. В этой статье, говоря о настройках, я буду иметь ввиду настройки в конфиг-файле плагина. Напомню, что менять лучше всего не оригинальный конфиг-файл, который находится в папке /common/plugins/topicintro/config/config.php, а его копию, которую нужно поместить в папку /app/plugins/topicintro/config/.

Создание интротекста
Для начала, чтобы плагин начал работать с интро-текстом, нужно включить эту возможность в конфигурации:
$config['introtext']['enable'] = true;
После этого в форме редактирования топика (перед вводом основного текста) появится поле для ввода Анонса. Это и есть интро-текст (вступительный, ознакомительный текст или анонс), который, в дальнейшем, можно получить с помощью метода getIntroText(), например, в шаблоне:
{$oTopic->getIntroText();}
На тот случай, если вы подключаете плагин, когда на сайте уже много контента (т.е. есть много статей, где анонс никто не вводил), то можно включить опцию автосоздания интро-текста:
$config['introtext']['autocreate'] = true;
Теперь каждый раз при обращении к методу getIntroText(), если анонс к статье не создавался, он будет создаваться автоматически из нескольких начальных предложений основного текста. При этом обрезание текста будет идти всегда по границе слов (т.е. слово никогда не будет оборвано на середине). И в конце будет добавлено многоточие — «...». Если вы хотите, чтобы при обрезании текста были добавлены другие символы, то надо их указать при вызове метода, если нужно, чтобы ничего не добавлялось, то надо передать в метод пустую строку, например:
$oTopic->getIntroText('>>>'); // вместо многоточия будет три символа >>>
$oTopic->getIntroText('');    // после обрезаемого текста не будет ничего дополнительно выводится

Интротекст и краткий текст топика
Плагин позволяет решить еще одну проблему, которая нередко встречается на сайтах, где пользователи сами создают статьи — длинные тексты без ката.
$config['introtext']['text_short'] = true;
С этой настройкой в том случае, когда запрашивается короткий текст топика (это текст перед тегом <cut>, который возвращается методом getTextShort()), а его нет, то будет возвращаться интротекст (который, как описано выше, может создаваться автоматически).

Короче, если на сайте много текста, который вы хотите принудительно убирать под кат, то:
$config['introtext']['enable'] = true;     // включаем использование интротекста
$config['introtext']['max_size'] = 200;    // длина интротекста
$config['introtext']['autocreate'] = true; // включаем автосоздание интротекста
$config['introtext']['text_short'] = true; // использование интротекста, если нет короткого текста
И все, ваша проблема решена.

Автоматический вывод интротекста
В заключение еще пара настроек в конфиг-файле, которые позволяют автоматически выводить интротекст на страницах сайта:
$config['introtext']['hook_list'] = 'template_topic_content_begin';
Здесь указан шаблонный хук, по которому будет выводиться интротекст. Это значит, что если в шаблоне есть такая строка:
{hook run='topic_content_begin' topic=$oTopic bTopicList=true}
то в это месте будет выведен интротекст топика. Как именно он будет выводиться, задается в шаблоне плагина field.intro_text-list.tpl. Хотите, чтобы интротекст выводился как-то иначе? Создайте папку /common/plugins/topicintro/templates/skin/<ваш_скин>/tpl/fields/ скопируйте туда файл field.intro_text-list.tpl и внесите туда нужные исправления.

Если не хотите, чтобы интротекст выводился автоматически, то просто закомментируйте в конфиг-файле строку с хуком, добавив двойной слеш в начале строки, вот так:
//$config['introtext']['hook_list'] = 'template_topic_content_begin';
Все то же самое касается и хука для вывода интротекста при просмотре топика (параметр $config['introtext']['hook_show']).

Похожие статьи


16 комментариев

0
После установки плагина и его активации, сайт выдает ошибку
Exception: Fatal error

С чем связано могло быть?
0
Как минимум, надо обязательно сообщать версию движка и шаблон.
И более подробная информация об ошибке обычно находится в файле /_tmp/logs/error.log
0
И в конце будет добавлено многоточие — "..."
Почему то нет в конце многоточия(
+1
Короче, если на сайте много текста, который вы хотите принудительно убирать под кат, то:

$config['introtext']['enable'] = true; // включаем использование интротекста
$config['introtext']['max_size'] = 200; // длина интротекста
$config['introtext']['autocreate'] = true; // включаем автосоздание интротекста
$config['introtext']['text_short'] = true; // использование интротекста, если нет короткого текста

И все, ваша проблема решена.
Протестировал предложенное решение для автоката с использованием getTextShort(). Есть несколько проблем:

1. Во-первых если не включить создание анонса метод не работает. Должно быть
$config['introtext']['enable'] = true;


А при включенном этом параметре, при создании топика выводится дополнительное тестовое поле «анонс». Но это усложняет процесс, и я не хотел бы чтобы пользователи создавали интротекст отдельным текстом, плюс при использовании getTextShort() эту же функцию выполнет тег cut. Я бы хотел, чтобы при создании топика они по-прежнему писали только текст топика и если требуется ставили тег cut в нужное место.

2. Если используется автопревью и разрешены html теги, и картинка из топика попадает в первые 200-300 символов текста, получается что выводится и превью и текст с картинкой. Приходится html теги обязательно запрещать, если используется автопревью. В принципе не критично.

3. Что более критично, так это то, что когда я редактирую статью которая создавалась без интротекста, в поле «анонс» автоматически заносится полный текст статьи. В результате, если я допустим нажал «редактировать», внес небольшие исправления, нажал «опубликовать» — ожидаю что все сохранится, но у меня вылезает сообщение, что размер аноанса превысил 200 символов.

4. Многоточие у меня тоже не выводится (getTextShort()).
Отредактирован:
0
В дополнение к посту выше — думаю имеет смысл также задать параметр, определяющий максимальную длину поста до тега cut, для getTextShort(). Если этого не сделать то пользователь может поставить cut например после 5000 знаков, и getTextShort() вернет очень длинное превью.
0
Да, интересная мысль добавить вариативности в Topicintro и через это реализовать более элегантную схему, когда анонс определяется не отдельным окном, а лишь типом тега обрезки (cut — стандарное поведение, annonce — вывод только в превью).
Можно продолжить далее и для администраторов/модераторов ввести возможность расширенного опционального управления .html|nohtml позволяющего в частном порядке переопределить дефолтную настройку конфига.
+1
Как улучшить качество превью картинок? Сейчас сильное сжатие
0
Если правильно понял, то стоит в конфиге посмотреть.
/common/config/config.php, строка 414 ('jpg_quality' => 80)
+я бы использовал Imagick, т.к. у GD картинки режутся в качестве. Но тут уже придётся ставить Imagick ручками, на шаредах обычно GD.
Отредактирован:
0
$config['introtext']['max_size'] = 200; // длина интротекста

У меня почему то не работает, ставлю 300-500 и все равно обрезает под 200
0
Если я не ошибаюсь, то данное условие срабатывает только при использовании анонсов.
Т.е. при
/*
 * Разрешить анонсы топиков (интротекст)
 */
$config['introtext']['enable'] = true; // true - активно; false - отключено
0
Он у меня включен
0
Можно сделать что бы при загрузки картинки, можно выбирать область?
Отредактирован:
+1
Ребята, вот такая ошибка про добавлении видео с vimeo (появляется только один раз после сохранения топика, при последующих загрузках страницы ошибки нет)



log
E_NOTICE [8] Undefined variable: nH (/common/plugins/topicintro/classes/modules/videoinfo/Videoinfo.class.php on line 101)

E_NOTICE [8] Undefined variable: nW (/common/plugins/topicintro/classes/modules/videoinfo/Videoinfo.class.php on line 101)

E_WARNING [2] simplexml_load_file(): I/O warning : failed to load external entity "http://vimeo.com/api/v2/video/22439234.xml" (/common/plugins/topicintro/classes/modules/videoinfo/Videoinfo.class.php on line 67)

E_WARNING [2] simplexml_load_file(http://vimeo.com/api/v2/video/22439234.xml): failed to open stream: no suitable wrapper could be found (/common/plugins/topicintro/classes/modules/videoinfo/Videoinfo.class.php on line 67)

E_WARNING [2] simplexml_load_file(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0 (/common/plugins/topicintro/classes/modules/videoinfo/Videoinfo.class.php on line 67)
0
Как убрать поле с анонсом?
0
Здесь: common/plugins/topicintro/config/config.php
/*
 * Разрешить анонсы топиков (интротекст)
 */
$config['introtext']['enable'] = true;

true поменять на false
0
...и сохранить возможность автосоздания интротекста.

При таком способе интротекст не создаётся.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.