Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#26 Re: "А как сделать..." » Разворачивающееся меню категорий (грязный хак) » 2010-11-11 18:55:25

обновлено еще раз:
1. оптимизирован код.
2. изменен css. теперь текущая категория выделяется жирным.
3. перезалит архив: оптимизирован ява-скрипт(оптимизирована выдача куков в google chrome) и изменена картинка линии соединения.

#27 Re: "А как сделать..." » Разворачивающееся меню категорий (грязный хак) » 2010-11-11 16:56:56

я и panoptus обновили код:
1. корректно выдаются куки для firefoх 3.6.12.
2. теперь менюшка валидная.

обновил вывод main.tpl.

#28 Re: "А как сделать..." » создание плагина, вывод данных в шаблон » 2010-11-09 23:18:52

проблему решил. оставляю решение для будущих поколений:

$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 - спасибо!

#30 "А как сделать..." » создание плагина, вывод данных в шаблон » 2010-11-09 20:58:22

nnq11
Ответов: 5

Доброго времени суток. Пытаюсь создать плагин вывода информации о торренте (кол-во сидов, личей, размер, время и т.д.). Что делал, по порядку:

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м пункте), но ничего не выводится. Код рабочий, проверял, вопрос только в шаблонизаторе: где я ошибся/недосмотрел/недопонял? Мануалы/вики как мог - курил.

#32 Re: "А как сделать..." » Разворачивающееся меню категорий (грязный хак) » 2010-11-08 18:38:33

прошу прощения за изначально неверное руководство. обновил. теперь точно все работает.

#33 Re: Страницы плагинов » similar :: Похожие новости » 2010-11-08 03:19:14

возможно ли переделать плагин для поиска не по тегам, а полнотекстовым поиском?

#34 Re: "У меня не работает..." » не работает видео » 2010-10-25 11:01:26

вопрос касательно ютуба(как самого используемого):

запретил пользователям(кроме редакторов и админов) делать HTML-вставки в новость. как теперь простому журналисту вставить превью/ролик с ютуба?

#35 Re: "А как сделать..." » Разворачивающееся меню категорий (грязный хак) » 2010-09-30 02:09:46

lexuv пишет:

nnq11, минусиком не сворачиваются категории, сделал все, как написано. Что я мог не так сделать?

за сворачивание/разворачивание отвечает js-ка. проверьте - полностью ли вы скопировали код, впихнули ли js-ку в нужное вам место.
(умвр: http://freebtt.net/ )

#36 Re: "А как сделать..." » Разворачивающееся меню категорий (грязный хак) » 2010-09-27 16:08:39

lexuv пишет:

{if_active} не отрабатывает в данном случае, т.е. подкатегория подсвечивается, а сама категория родительская -- нет. В результирующем хтмл так и остается {if_active}. В результате, и категории, в которых нет дочерних, не подсвечиваются тоже.

да, было дело, недосмотрел. накидал костылей, исправил код.

#37 Re: "А как сделать..." » Разворачивающееся меню категорий (грязный хак) » 2010-09-26 00:36:14

vitaly пишет:

Возьмёшься? smile

с радостью бы так и сделал, если бы была документация до движку, какие переменные(и массивы) откуда тянутся, что с чем работает. а так, увы, приходится угадывать и методом тыка вставлять.

#38 "А как сделать..." » Разворачивающееся меню категорий (грязный хак) » 2010-09-25 22:11:33

nnq11
Ответов: 69

Представим, что у вас много категорий (100, 150, ...) - родительские, дочерние(которые надо сворачивать). Базовое отображение категорий ngcms, как все мы знаем, очень посредственное (в нашем случае список категорий будет длиннее новостей на страницу) и подходит для маленьких сайтов. Плагин "менеджер меню" тоже как-то не очень подходит - все ссылки надо забивать руками (или я что-то не так понял?). Задача стояла сделать сворачивающееся меню, поэтому нами был "разработан" плохой, грязный хак-костыль, речь о котором ниже.
Результат выглядит так:

6bsbtlc9tnyg.png

Как сделать такое же:

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
остается небольшая недоработка - нет линии соединяющей родительские категории. как дойдут руки - выложу исправления.

#39 Re: "А как сделать..." » Редактирование ЧПУ » 2010-09-21 17:19:21

vitaly пишет:

Провёл небольшое исследование - сделать так, чтобы двиг при генерации ссылок разделял категории символом "/" можно изменив всего 2 байта,.. но есть одна загвоздка - такие ссылки не обрабатываются корректно sad

Но есть и хорошая новость - я приблизительно представляю в какую сторону надо копать, чтобы такой вариант заработал, буду дальше разбираться smile

Прошло уже порядочно времени. Есть мысли по этому вопросу?

#40 Re: Вопросы функционирования системы в целом » tracker 0.2 » 2010-05-19 14:29:23

infinity237 пишет:

2. Ретрекер PanoptuS'a на ngcms - http://freebtt.net/ - исходники предоставитть отказался.

1. сайт не panoptus-a, а мой.
2. не ретрекер, а трекер.
3. исходники у меня, вобщем-то, никто и не просил.

работает связка xbtt+писаный panoptus-ом скрипт интеграции с xbtt. скрипт прилеплен довольно костыльно (когда-то создавал тему в форуме о конкатенации к полной новости).

#42 Re: "А как сделать..." » HTML/JS menu - особенности работы IE/Opera/FF » 2010-03-22 12:30:06

Amarelius, ссылки в теме не работают, можно перезалить/прикрепить к форуму?

#43 Re: Вопросы функционирования системы в целом » NG против DLE » 2010-03-21 22:18:27

Wolverine пишет:

Будут и на NG скоро smile Как только Евгений меня проспонсирует lol

ждем с нетерпением smile

#45 Re: "А как сделать..." » Конкатенация к полной новости » 2010-03-18 10:23:16

не знаю, насколько это правильно, но прилепил вот такой костыль:

$tvars['vars']['full-story']= $tvars['vars']['full-story']."<br><br>".attach($row['id'], $row['title']);

и вроде работает.

#46 "А как сделать..." » Конкатенация к полной новости » 2010-03-13 16:25:51

nnq11
Ответов: 2

Собственно, сабж. В каком файле, в какой переменной содержится вывод полной новости? Хочу конкатенировать вывод сапописного скрипта к полной новости.

Подвал раздела

Работает на FluxBB