Вы не зашли.
обновлено еще раз:
1. оптимизирован код.
2. изменен css. теперь текущая категория выделяется жирным.
3. перезалит архив: оптимизирован ява-скрипт(оптимизирована выдача куков в google chrome) и изменена картинка линии соединения.
я и panoptus обновили код:
1. корректно выдаются куки для firefoх 3.6.12.
2. теперь менюшка валидная.
обновил вывод main.tpl.
проблему решил. оставляю решение для будущих поколений:
$tpath = locatePluginTemplates(array('torrent'), 'torrent');
$tdata = array();
$tdata['vars']['total_size'] = $total_size;
$tdata['vars']['torrent_size_in_bytes'] = $torrent_size_in_bytes;
$tdata['vars']['creator'] = $creator;
$tpl -> template('torrent', $tpath['torrent']);
$tpl -> vars('torrent', $tdata);
$tvars['vars']['plugin_torrent'] = $tpl->show('torrent');
Wolverine,
про выключение/включение плагина знал. насчет $template - спасибо!
Amarelius, делал, не помогло.
Доброго времени суток. Пытаюсь создать плагин вывода информации о торренте (кол-во сидов, личей, размер, время и т.д.). Что делал, по порядку:
1. создал в каталоге /engine/plugins/ каталог torrent
2. отредактировал файл version:
;
; Version description file for plugin @@ Next Generation CMS
;
ID: torrent
Name: xbt tracker decode
Version: 0.1
;Acts: news_full
File: torrent.php
;Config: config.php
Type: plugin
Description: Декодирует информацию о торренте
Author: nnq
Preinstall: no
3. код самого плагина (неполный, чтобы не замусоривать форум, все ключевые аспекты сохранены)
<?
if (!defined('NGCMS')) die ('Galaxy in danger');
class PluginNewsFilter extends NewsFilter
{
function showNews($newsID, $SQLnews, &$tvars, $mode) //был show_attach
{
global $tpl, $config, $mysql, $lang;
$tpath = locatePluginTemplates(array('torrent'), 'torrent');
$general_torrent_query="
SELECT
*
FROM fb_files
LEFT JOIN xbt_files ON (fb_files.info_hash = xbt_files.info_hash)
WHERE fb_files.linked_id = '$newsID'
";
$result=mysql_query($general_torrent_query);
$row=mysql_fetch_array($result);
//проверяем, выбрался ли id файла.
if ($row['id'])
{
//id файла (для передачи в download)
$fileid=$row['id'];
//размер торрента
$torrent_size_in_bytes = filesize ($config['attach_dir'].$row['folder']."/".$row['name'] );
$torrent_size = formatsize($torrent_size_in_bytes);
(и прочие)
if($row['decoded_hash'])
{
$decoded_hash = $row['decoded_hash'];
$binary_hash = $row['hash'];
//$escaped_binary_hash = mysql_real_escape_string($binary_hash);
if ($row['torrent_comment']=='')
$comment = 'нет';
else
$comment = $row['torrent_comment'];
(и прочие)
}
$tpl -> template('torrent', $tpath['torrent']);
$tpl -> vars('torrent', array ('vars' => array (
'$total_size' => $total_size,
'$torrent_size_in_bytes' => $torrent_size_in_bytes
$comment' => $comment
)));
$template['vars']['torrent'] = $tpl -> show('torrent');
////////////////
//делал и так:
$tvars['vars']['total_size'] = $total_size;
$tvars['vars']['torrent_size_in_bytes'] = $torrent_size_in_bytes;
$tvars['vars']['creator'] = $creator;
$tpl -> vars('torrent', $tvars);
$tpl -> show('torrent');
return $result;
} //конец if($row['id'])
} //конец showNews (бывшая show_attach)
} //конец класса PluginNewsFilter
register_filter('news', 'torrent', new PluginNewsFilter)
?>
4. создал файл plugins/torrent/tpl/torrent.tpl
код пока предварительный, но что-то выводить(по идее) должен:
размер {total_size}
размер в торренте {torrent_size_in_bytes}
генератор торрента {creator}
5. прописывал в news.full.tpl своего шаблона {torrent} и {plugin_torrent}
В итоге:
в полной новости отображается только {torrent} или {plugin_torrent} (то, что прописывал в 5м пункте), но ничего не выводится. Код рабочий, проверял, вопрос только в шаблонизаторе: где я ошибся/недосмотрел/недопонял? Мануалы/вики как мог - курил.
unnamed,
куки очищали?
прошу прощения за изначально неверное руководство. обновил. теперь точно все работает.
возможно ли переделать плагин для поиска не по тегам, а полнотекстовым поиском?
вопрос касательно ютуба(как самого используемого):
запретил пользователям(кроме редакторов и админов) делать HTML-вставки в новость. как теперь простому журналисту вставить превью/ролик с ютуба?
nnq11, минусиком не сворачиваются категории, сделал все, как написано. Что я мог не так сделать?
за сворачивание/разворачивание отвечает js-ка. проверьте - полностью ли вы скопировали код, впихнули ли js-ку в нужное вам место.
(умвр: http://freebtt.net/ )
{if_active} не отрабатывает в данном случае, т.е. подкатегория подсвечивается, а сама категория родительская -- нет. В результирующем хтмл так и остается {if_active}. В результате, и категории, в которых нет дочерних, не подсвечиваются тоже.
да, было дело, недосмотрел. накидал костылей, исправил код.
Возьмёшься?
с радостью бы так и сделал, если бы была документация до движку, какие переменные(и массивы) откуда тянутся, что с чем работает. а так, увы, приходится угадывать и методом тыка вставлять.
Представим, что у вас много категорий (100, 150, ...) - родительские, дочерние(которые надо сворачивать). Базовое отображение категорий ngcms, как все мы знаем, очень посредственное (в нашем случае список категорий будет длиннее новостей на страницу) и подходит для маленьких сайтов. Плагин "менеджер меню" тоже как-то не очень подходит - все ссылки надо забивать руками (или я что-то не так понял?). Задача стояла сделать сворачивающееся меню, поэтому нами был "разработан" плохой, грязный хак-костыль, речь о котором ниже.
Результат выглядит так:
Как сделать такое же:
1. содержимое приложенного архива (каталог cat_img и файл cat_menu.js) положить в каталог /engine/includes/js/
1.1 в cat_menu.js сменить адрес сайта http://freebtt.net на свой.
2. в каталоге /engine/includes/inc/ редактируем functions.inc.php:
где-то в конце 900-х строк находим функцию function generateCategoryMenu() - ее и будем редактировать.
быдлокод выглядит так:
function generateCategoryMenu()
{
global $mysql, $catz, $tpl, $config, $CurrentHandler, $SYSTEM_FLAGS;
$result = '';
$tpl -> template('categories', tpl_site);
//основной большой цикл
foreach ($catz as $k=>$v)
{
if (!substr($v['flags'],0,1)) continue;
//проход дочерних категорий
foreach ($catz as $k1=>$v1)
{
if($v1['parent'] == $v['id'])
{
//делаем текущую категорию активной(подсвеченной в меню)
if (isset($SYSTEM_FLAGS['news']['currentCategory.id']) && ($v1['id'] == $SYSTEM_FLAGS['news']['currentCategory.id']))
$span=" class=\"active_cat\"";
else $span='';
$temp_child_catz[]="<li><img src='{$config['admin_url']}/includes/js/cat_img/join.gif' alt='join' /><a href='{$config['home_url']}/{$v1['alt']}.html'><span$span>".htmlspecialchars($v1['name'], ENT_QUOTES, 'utf8')."</span></a></li>";
$lastchild_cat = "<li><img src='{$config['admin_url']}/includes/js/cat_img/joinbottom.gif' alt='joinbottom' /><a href='{$config['home_url']}/{$v1['alt']}.html'><span$span>".htmlspecialchars($v1['name'], ENT_QUOTES, 'utf8')."</span></a></li>";
}
}
if($temp_child_catz) $temp_child_catz[count($temp_child_catz)-1] = $lastchild_cat;//если есть массив дочерних - меняем последний элемент
//если родительская категория
if($v['parent']==0)
{
if (isset($SYSTEM_FLAGS['news']['currentCategory.id']) && ($v['id'] == $SYSTEM_FLAGS['news']['currentCategory.id']))
$span=" class=\"active_cat\"";
else $span='';
//если в родителе были дети - выводим начало группы (+)
if (count ($temp_child_catz)>0)
{
$cat_menu[]="<li class='ogroup' style='list-style-type: none;' id='{$v['alt']}'><img src='{$config['admin_url']}/includes/js/cat_img/gpg-minus.gif' alt='minus' onclick='toggleMenuItems(this);' /> <a href='{$config['home_url']}/{$v['alt']}.html'><span$span>".htmlspecialchars($v['name'], ENT_QUOTES, 'utf8')."</span></a>\n<ul><li><span class='cat_line_img'></span>".implode("\n<li><span class='cat_line_img'></span>", $temp_child_catz)."</ul></li>";
$last_cat="<li class='ogroup' style='list-style-type: none;' id='{$v['alt']}'><img src='{$config['admin_url']}/includes/js/cat_img/gpg-minus.gif' alt='minus' onclick='toggleMenuItems(this);' />
{$config['home_url']}/{$v['alt']}.html'><span$span>".htmlspecialchars($v['name'], ENT_QUOTES, 'utf8')."</span></a>\n
<ul><li><span class='cat_blank'></span>".implode("\n<li><span class='cat_blank'></span>", $temp_child_catz)."</ul></li>";
}
//если в родителе не было детей, то без "+"
else
{
$cat_menu[]="<li><img src='{$config['admin_url']}/includes/js/cat_img/join.gif' alt='join' /><a href='{$config['home_url']}/{$v['alt']}.html'><span$span>".htmlspecialchars($v['name'], ENT_QUOTES, 'utf8')."</span></a></li>\n";
$last_cat ="<li><img src='{$config['admin_url']}/includes/js/cat_img/joinbottom.gif' alt='joinbottom' /><a href='{$config['home_url']}/{$v['alt']}.html'><span$span>".htmlspecialchars($v['name'], ENT_QUOTES, 'utf8')."</span></a></li>\n";
}
}
unset ($temp_child_catz);
//********* продолжение ng
$tvars['regx']['[\[icon\](.*)\[/icon\]]'] = trim($v['icon'])?'$1':'';
switch (intval(substr($v['flags'],1,1)))
{
case 0: $rmode = true; break;
case 1: $rmode = ($v['posts'])?true:false; break;
case 2: $rmode = false; break;
}
//$tvars['regx']['#\[if_link\](.+?)\[/if_link\]#is'] = $rmode?'$1':'';
}
if($cat_menu)
$cat_menu[count($cat_menu)-1] = $last_cat;//если есть массив - меняем последний элемент
foreach ($cat_menu as $key=>$value)
{
$tvars['vars']['cat'].=$value;
}
//выводим все сразу
$tpl -> vars('categories', $tvars);
$result .= $tpl -> show('categories');
return $result;
//$tvars['vars']['cat']
}
3. т.к. весь вывод мы формируем уже в движке, то categories.tpl вашего шаблона редактируем самым неприличным образом:
{cat}
4. в main.tpl вашего шаблона прикручиваем такое:
после
<script type="text/javascript" src="{admin_url}/includes/js/functions.js"></script>
<script type="text/javascript" src="{admin_url}/includes/js/ajax.js"></script>
вставляем
<script type="text/javascript" src="{admin_url}/includes/js/cat_menu.js"></script>
4.1. блок вывода категорий в main.tpl
<div class="menuTree">
<ul id="superMenu">
{categories}
</ul>
</div>
4.2. после блока с категориями вставляем
<script type="text/javascript">superStart();</script>
это установит параметры открытости/закрытости категорий
5. в style.css вашего шаблона вставляем
.menuTree UL
{
list-style-type: none;
padding-left: 15px;
padding-top: 3px;
padding-bottom: 3px;
margin: 0px;
white-space: nowrap;
}
.cgroup UL{ display: none; }
.menuTree img{border:0;vertical-align:middle;}
.menuTree span.active_cat {font-weight: bold;}
Достоинства этой менюшки: она выдает html-ссылки, а не js; открытые/закрытые категории запоминаются (пользователю выдаются куки).
За сим все. Повторюсь: этот код - вынужденная мера, реализация оставляет желать лучшего. Если у вас есть какие-то мысли, предложения как улучшить/преобразовать все это безобразия - буду очень-очень рад(да и сообщество тоже скажет спасибо).
обновлено 11.12.2010
остается небольшая недоработка - нет линии соединяющей родительские категории. как дойдут руки - выложу исправления.
Провёл небольшое исследование - сделать так, чтобы двиг при генерации ссылок разделял категории символом "/" можно изменив всего 2 байта,.. но есть одна загвоздка - такие ссылки не обрабатываются корректно
Но есть и хорошая новость - я приблизительно представляю в какую сторону надо копать, чтобы такой вариант заработал, буду дальше разбираться
Прошло уже порядочно времени. Есть мысли по этому вопросу?
2. Ретрекер PanoptuS'a на ngcms - http://freebtt.net/ - исходники предоставитть отказался.
1. сайт не panoptus-a, а мой.
2. не ретрекер, а трекер.
3. исходники у меня, вобщем-то, никто и не просил.
работает связка xbtt+писаный panoptus-ом скрипт интеграции с xbtt. скрипт прилеплен довольно костыльно (когда-то создавал тему в форуме о конкатенации к полной новости).
Amarelius, спасибо
Amarelius, ссылки в теме не работают, можно перезалить/прикрепить к форуму?
Будут и на NG скоро Как только Евгений меня проспонсирует
ждем с нетерпением
а у DLE нормальные "приватные сообщения", например.
не знаю, насколько это правильно, но прилепил вот такой костыль:
$tvars['vars']['full-story']= $tvars['vars']['full-story']."<br><br>".attach($row['id'], $row['title']);
и вроде работает.
Собственно, сабж. В каком файле, в какой переменной содержится вывод полной новости? Хочу конкатенировать вывод сапописного скрипта к полной новости.