Небольшой лайф-хак владельцам сайтов на Cotonti, как к топикам на форуме добавить возможность вставлять видео с YouTube по ID-идентификатору этого видео.
Эта доработка проверена на собственном опыте и является полностью рабочим инструментом для внедрения прямо в тело топика желаемого видео, используя любой скин котонти.
Инструкция, по внедрению функционала встраивания видео, в первое сообщение темы форума, не является прямым или косвенным руководством от официальных разработчиков.
1. В базе данных создаем поле для ID-идентификатора видео з YouTube
Варинат №1.
Через phpmyadmin в таблице `cot_forum_topics` создаем столбец (колонку) `ft_youtubevideoid`.
Вариант №2.
Через патч. В папке /modules/forums/setup/ находим самую последнюю версию патча, например видим `patch_1.1.8.sql`. Значит создаем новый файл патча и "по-старшенству" - `patch_1.1.8.1.sql`.
В этот патч прописуем сценарий создания новой колонки в нужной таблице:
ALTER TABLE `cot_forum_topics` ADD COLUMN `ft_youtubevideoid` varchar(36) NOT NULL DEFAULT '';
Идем в админку и открываем модуль форумов по ссылке
https://my-project.ltd/admin/extensions?a=details&mod=forums
только в ссылке нужно заменить `my-project.ltd` домен вашего сайта.
жмем кнопку "обновить" и тут же проверяем в phpmyadmin, наличие в таблице `cot_forum_topics` колонки с именем - `ft_youtubevideoid`.
2. Модифицирем файл создания новой темы "forums.newtopic.php".
Вносим собственные правки. Номера строк указанные здесь и у вас могут отличаться.
Идем в папку /modules/forums/inc/ и открываем файл forums.newtopic.php.
2.1 Строка документа № 38.
находим
$rtopic = [
'ft_title' => '',
'ft_desc' => '',
'ft_mode' => '',
];
и после "режима темы"
'ft_mode' => '',
добавляем
'ft_youtubevideoid' => '',
и получаем в итоге
$rtopic = [
'ft_title' => '',
'ft_desc' => '',
'ft_mode' => '',
'ft_youtubevideoid' => '',
];
2.2 Строка № 63
Находим строку
$rtopic['ft_desc'] = cot_import('rtopicdesc','P','TXT', 255);
и сразу после неё добавляем строку
$rtopic['ft_youtubevideoid'] = cot_import('rtopicyoutubevideoid','P','TXT', 36);
2.3. В районе строки 175 находим
'FORUMS_NEWTOPIC_DESC' => cot_inputbox('text', 'rtopicdesc', $rtopic['ft_desc'], array('size' => 56, 'maxlength' => 255)),
добавляем
'FORUMS_NEWTOPIC_TOPIC_YOUTUBEVIDEOID' => cot_inputbox('text', 'rtopicyoutubevideoid', $rtopic['ft_youtubevideoid']),
2.3 Добавляем тег в шаблон.
Открываем шаблон создания новой темы forums.newtopic.tpl
и в теле формы
<form action="{FORUMS_NEWTOPIC_SEND}" method="post" name="newtopic" class="uk-margin-large">
....
</form>
добавляем поле для ввода идентификатора
<div>
<div class="uk-form-label">
{PHP.L.New_Topic_youtubevideoid}:
</div>
<div class="uk-form-controls">
{FORUMS_NEWTOPIC_TOPIC_YOUTUBEVIDEOID}
</div>
</div>
3. Файл редактирования постов "forums.posts.php".
3.1. Открываем "forums.posts.php" и идем в район строки №54.
находим
$sql_forums = Cot::$db->query("SELECT ft_state, ft_mode, ft_title, ft_desc FROM $db_forum_topics WHERE ft_id = $q LIMIT 1");
добавляем в неё `, ft_youtubevideoid` или просто комментируем строку, и за ней сразу добавляем
$sql_forums = Cot::$db->query("SELECT ft_state, ft_mode, ft_title, ft_desc, ft_youtubevideoid FROM $db_forum_topics WHERE ft_id = $q LIMIT 1");
3.2 Строка №72
находим
$rtopic['ft_desc'] = cot_import('rtopicdesc', 'P', 'TXT', 255);
сразу за ней добавляем
$rtopic['ft_youtubevideoid'] = cot_import('rtopicyoutubevideoid','P','TXT');
3.3 Строка №179
находим
'FORUMS_EDITPOST_TOPICDESCRIPTION' => cot_inputbox('text', 'rtopicdesc', $rowt['ft_desc'], array('size' => 56, 'maxlength' => 255)),
сразу за ней добавляем
'FORUMS_EDITPOST_TOPICSTART_YOUTUBEVIDEOID' => cot_inputbox('text', 'rtopicyoutubevideoid', $rowt['ft_youtubevideoid']),
3.4 Открываем шаблон редактирования постов и топика модуля "Forums" - forums.editpost.tpl
Здесь в теле формы
<form action="{FORUMS_EDITPOST_SEND}" method="post" name="editpost" class="uk-form-stacked">
...
</form>
в участке кода, который внутри CoTemplate-блока:
<!-- BEGIN: FORUMS_EDITPOST_FIRSTPOST --> ... <!-- END: FORUMS_EDITPOST_FIRSTPOST -->
добавляем поле редактирования
<div>
<div class="uk-form-label">
{PHP.L.New_Topic_youtubevideoid}:
</div>
<div class="uk-form-controls">
{FORUMS_EDITPOST_TOPICSTART_YOUTUBEVIDEOID}
</div>
</div>
4. Открываем файл сценариев для списка постов forums.posts.php
4.1 Идем в район строки №392
находим
'FORUMS_POSTS_ROW_TEXT' => cot_parse($row['fp_text'], (Cot::$cfg['forums']['markup'] && Cot::$cfg['forums']['cat_' . $s]['allowbbcodes'])),
сразу за ней добавляем
'FORUMS_POSTS_ROW_TOPIC_YOUTUBEVIDEOID' => $rowt['ft_youtubevideoid'],
4.2 Открываем шаблон списка постов и самой темы - forums.posts.tpl
и в нужном месте, например перед тегом
<div class="uk-margin">
{FORUMS_POSTS_ROW_TEXT}
</div>
добавляем код вывода видео с YouTube в теле топика/темы форума
<!-- IF {FORUMS_POSTS_ROW_TOPIC_YOUTUBEVIDEOID} -->
<div class="uk-margin">
<iframe src="https://www.youtube-nocookie.com/embed/{FORUMS_POSTS_ROW_TOPIC_YOUTUBEVIDEOID}?autoplay=0&showinfo=0&rel=0&modestbranding=1&playsinline=1&enablejsapi=1" allowfullscreen="" uk-responsive="" uk-video="autoplay: false" class="uk-responsive-width" style="height: 394px;" width="1920" height="1080" frameborder="0"></iframe>
</div>
<!-- ENDIF -->
P.S.
1. Приведенная HTML- разметка в этой теме из фронт-энд фреймворка UIkit 3.
2. Если кто решит сделать или уже делал через экстраполя - для вас отдельный раздел по оригинальному модулю форумов из коробки котонти.