Sphynkx (обсуждение | вклад) Нет описания правки Метка: визуальный редактор отключён |
Sphynkx (обсуждение | вклад) Нет описания правки Метка: визуальный редактор отключён |
||
| Строка 45: | Строка 45: | ||
Входные данные ('''videoid''') считываются из GET-запроса, далее производятся запросы к БД для получения остальных необходимых данных. | Входные данные ('''videoid''') считываются из GET-запроса, далее производятся запросы к БД для получения остальных необходимых данных. | ||
Фция template_files() объявляет файл шаблона ('''gen_sub.html'''), задает имя и путь к нему. | |||
Фция '''subtitles_set_video()''' выводит некие тестовые строки, которые размещаются на странице в соответствии с анкорами шаблона. В тестовых целях там производится запрос к БД и вывод полученной структуры на страницу. | Фция '''subtitles_set_video()''' выводит некие тестовые строки, которые размещаются на странице в соответствии с анкорами шаблона. В тестовых целях там производится запрос к БД и вывод полученной структуры на страницу. | ||
<div {{DivWrapOpts}}>[[Категория:WrapBlock]] | |||
'''plugins/subtitles/gen_sub.php''' | |||
<div class="mw-collapsible-content"> | |||
<syntaxhighlight lang="php" line> | |||
<?php | |||
//require_once('../includes/common.php'); | |||
global $db; | |||
$template_dir = realpath(dirname(__FILE__)); | |||
## Plug files with template_files(), assign(), register_anchor_function(), display_it() .. | |||
require_once dirname(__DIR__, 2) . '/includes/admin_config.php'; | |||
require_once dirname(__DIR__, 2) . '/includes/common.php'; | |||
## Plug parent plugin's file | |||
require_once $template_dir . '/subtitles.php'; | |||
## Set some value that will transmit to template to construction `{$subtitles_head}` | |||
assign('subtitles_head', "Subtitles Header"); | |||
## Declare some var. It may be transmitted to another func in other file. | |||
$gen_sub_val="gensubval"; | |||
## Plug the template file | |||
template_files('gen_sub.html', $template_dir); | |||
## Get parameter transmited from previous page ( see admin_area/styles/cb_2014/layout/ video_manager.html:136) in construction: | |||
## {ANCHOR place="subtitles_menu" data={$video.videoid}} | |||
$video = $_GET['video']; | |||
## Function output will display at place in template, that placed anchor. | |||
## Function may have parameter, this parameter comes from anchor, from `data=` construction. | |||
function subtitles_set_video() | |||
{ | |||
global $video, $db; | |||
## Request to DB - get all ifo about video with certain videoid. Params are available as $dd[0]['description'] etc | |||
## Simple request | |||
// $dd = $db->select(tbl('video'), '*', 'videoid='.$video); | |||
## More complicated - request from 2 tables - gets videofile params, also thumbs params | |||
$ddd = $db->select(tbl('video')." LEFT JOIN ".tbl('video_thumbs'). " ON ".tbl('video').".videoid=".tbl('video_thumbs').".videoid", tbl('video').".videoid,title,file_name, echo "echo from subtitles_set_video()"; | |||
echo "<br>Videoid=".$video.";<br>\$ddd:<pre>".print_r($ddd, true)."</pre>;<br>\$ddd[0]['description']=".$ddd[0]['description']; | |||
} | |||
## Assign some function to anchor. Anchor have to set in template file. | |||
register_anchor_function('subtitles_set_video', 'set_video'); | |||
## Apply template and display result code. | |||
display_it(); | |||
</syntaxhighlight> | |||
</div></div> | |||
В конце регистрируется анкор ('''set_video'''), в который выводится выхлоп фции '''subtitles_set_video()'''. Файлу '''gen_sub.php''' соответствует шаблон '''gen_sub.html''' (см.ниже), в котором и расположен этот зарегистрированный анкор. | |||
В самом конце расположена фция '''display_it()''' - она запускает финальный рендеринг кода и шаблона и выводит результат на страницу. Ошибки с несрабатыванием шаблона чвсто были следствием пропуска этой фции. | |||
=== gen_sub.html === | |||
Файл шаблона. Представляет из себя текст, в котором в фигурных скобках расположены вставки - анкоры, команды, переменные. В данном случае шаблон минимален - несколько анкоров, переменная и образец редактируемой формы с подключаемым редактором текста. | |||
<div {{DivWrapOpts}}>[[Категория:WrapBlock]] | |||
'''plugins/subtitles/gen_sub.html''' | |||
<div class="mw-collapsible-content"> | |||
<syntaxhighlight lang="html" line> | |||
{ANCHOR place='set_video'} | |||
<h2>{$subtitles_head}</h2> | |||
{ANCHOR place='subtitles_menu' data="Message1"} | |||
<table style="width:100%;"> | |||
<tr> | |||
<td> | |||
<form id="form1" name="form1" method="post"> | |||
<textarea name="text" id="page_content" cols="75" rows="6">{$announcement}</textarea> | |||
<br/> | |||
<input type="submit" class="btn btn-primary btn-xs" name="update" value="{lang code='update'}"/> | |||
</form> | |||
</td> | |||
</tr> | |||
</table> | |||
{ANCHOR place='subtitles_menu' data="Message2<br>"} | |||
<script> | |||
$(document).ready(function() { | |||
$('#page_content').summernote(); | |||
}); | |||
</script> | |||
</syntaxhighlight> | |||
</div></div> | |||
Текущая версия от 21:43, 18 марта 2024
В данном случае - плагин subtitles на начальной стадии, когда уже стало понятно как устроена система работы плагина, шаблонов итп, но еще не написан целевой функционал. Снипет ничего полезного не делает, лишь содержит образцы.
Плагин встраивает доп.пункт меню опций видеофайлов в Videos -> Video Manager (реализация в subtitles.php). Необходима доработка стандартного шаблона admin_area/styles/cb_2014/layout/video_manager.html: в строке 136 надо добавить анкор:
{ANCHOR place="subtitles_menu" data={$video.videoid}}
В этом месте меню будет появляться пункт плагина (и исчезать, если плагин деактивировать).
subtitles.php[править | править код]
Стартовый файл плагина. Содержит в коменте инфо-блок, отображаемый потом в админке в информации о плагине (назв., верси, авторы итп). Также в нем расплоложена фция, выдающая строку с форматированным текстом. Этот текст потом вставится в место анкора в admin_area/styles/cb_2014/layout/video_manager.html. Также вызывается процедура регистрации анкора - в ней указаны имя функции и имя анкора.
plugins/subtitles/subtitles.php
<?php
/*
Plugin Name: Subtitles
Description: Generates subtitles for videos
Author: Sphynkx
Version: 0.0
Website: https://github.com/sphynkx/clipbucket-v5/
ClipBucket Version: 5.5.1
*/
## This file set menu item in videofile options at admin_area/video_manager.php
## Item has link to pen_sub.php and sent it videoid of apropriate videofile
## Function insertes item in the videofile options list at admin_area/video_manager.php
## $vid comes from anchor parameter `data={$video.videoid}` ( see admin_area/styles/cb_2014/layout/video_manager.html:136)
function subtitles_insert_menuitem($vid)
{
global $gen_sub_val; ## declared in gen_sub.php
// TODO: further change `GenSub` to {lang code='gen_sub'} and add apropriate translations to DB
echo "<li><a role=\"menuitem\" tabindex=\"-1\" href=\"../plugins/subtitles/gen_sub.php?video=".$vid."\">Generate Subtitles</a></li>";
}
register_anchor_function('subtitles_insert_menuitem', 'subtitles_menu');
gen_sub.php[править | править код]
Вставляемая в меню ссылка ведет к файлу gen_sub.php и передает ему параметр videoid (в зависимости от того, из меню какого видеофайла был вызов). В данном файле расположен весь основной функционал.
Входные данные (videoid) считываются из GET-запроса, далее производятся запросы к БД для получения остальных необходимых данных.
Фция template_files() объявляет файл шаблона (gen_sub.html), задает имя и путь к нему.
Фция subtitles_set_video() выводит некие тестовые строки, которые размещаются на странице в соответствии с анкорами шаблона. В тестовых целях там производится запрос к БД и вывод полученной структуры на страницу.
plugins/subtitles/gen_sub.php
<?php
//require_once('../includes/common.php');
global $db;
$template_dir = realpath(dirname(__FILE__));
## Plug files with template_files(), assign(), register_anchor_function(), display_it() ..
require_once dirname(__DIR__, 2) . '/includes/admin_config.php';
require_once dirname(__DIR__, 2) . '/includes/common.php';
## Plug parent plugin's file
require_once $template_dir . '/subtitles.php';
## Set some value that will transmit to template to construction `{$subtitles_head}`
assign('subtitles_head', "Subtitles Header");
## Declare some var. It may be transmitted to another func in other file.
$gen_sub_val="gensubval";
## Plug the template file
template_files('gen_sub.html', $template_dir);
## Get parameter transmited from previous page ( see admin_area/styles/cb_2014/layout/ video_manager.html:136) in construction:
## {ANCHOR place="subtitles_menu" data={$video.videoid}}
$video = $_GET['video'];
## Function output will display at place in template, that placed anchor.
## Function may have parameter, this parameter comes from anchor, from `data=` construction.
function subtitles_set_video()
{
global $video, $db;
## Request to DB - get all ifo about video with certain videoid. Params are available as $dd[0]['description'] etc
## Simple request
// $dd = $db->select(tbl('video'), '*', 'videoid='.$video);
## More complicated - request from 2 tables - gets videofile params, also thumbs params
$ddd = $db->select(tbl('video')." LEFT JOIN ".tbl('video_thumbs'). " ON ".tbl('video').".videoid=".tbl('video_thumbs').".videoid", tbl('video').".videoid,title,file_name, echo "echo from subtitles_set_video()";
echo "<br>Videoid=".$video.";<br>\$ddd:<pre>".print_r($ddd, true)."</pre>;<br>\$ddd[0]['description']=".$ddd[0]['description'];
}
## Assign some function to anchor. Anchor have to set in template file.
register_anchor_function('subtitles_set_video', 'set_video');
## Apply template and display result code.
display_it();
В конце регистрируется анкор (set_video), в который выводится выхлоп фции subtitles_set_video(). Файлу gen_sub.php соответствует шаблон gen_sub.html (см.ниже), в котором и расположен этот зарегистрированный анкор.
В самом конце расположена фция display_it() - она запускает финальный рендеринг кода и шаблона и выводит результат на страницу. Ошибки с несрабатыванием шаблона чвсто были следствием пропуска этой фции.
gen_sub.html[править | править код]
Файл шаблона. Представляет из себя текст, в котором в фигурных скобках расположены вставки - анкоры, команды, переменные. В данном случае шаблон минимален - несколько анкоров, переменная и образец редактируемой формы с подключаемым редактором текста.
plugins/subtitles/gen_sub.html
{ANCHOR place='set_video'}
<h2>{$subtitles_head}</h2>
{ANCHOR place='subtitles_menu' data="Message1"}
<table style="width:100%;">
<tr>
<td>
<form id="form1" name="form1" method="post">
<textarea name="text" id="page_content" cols="75" rows="6">{$announcement}</textarea>
<br/>
<input type="submit" class="btn btn-primary btn-xs" name="update" value="{lang code='update'}"/>
</form>
</td>
</tr>
</table>
{ANCHOR place='subtitles_menu' data="Message2<br>"}
<script>
$(document).ready(function() {
$('#page_content').summernote();
});
</script>