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

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

Вы не зашли.

#1 2010-01-05 02:19:39

Live
Участник
Зарегистрирован: 2009-12-04
Сообщений: 181
Рейтинг :   

Переменная {if_active}

сабж ето работает? когда я нахожусь в какой нибудь категории - етой категории не присвается класс active_cat как написано в доках.
если это работает - можно пример реализации

Не в сети

#2 2010-01-05 02:30:30

infinity237
Модератор
Откуда Russia, Moscow
Зарегистрирован: 2008-11-09
Сообщений: 2,674
Рейтинг :   176 
Сайт

Re: Переменная {if_active}

Версия? Качайте fixpack1.

Не в сети

#3 2010-01-05 05:11:44

Live
Участник
Зарегистрирован: 2009-12-04
Сообщений: 181
Рейтинг :   

Re: Переменная {if_active}

версия - Актуальная версия
0.9.1 Release
24 октября 2009

Не в сети

#4 2010-01-05 06:09:06

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Переменная {if_active}

Live, официально ещё не выложен, это версия "для тестирования", успешно прошедшая тесты.
Можешь взять из этой темы

p.s. Чуть позже будет выложен сам FixPack 01, но туда будут включены ещё пара дополнительных правок. Поэтому после выхода тебе надо будет его заново скачать и установить.

Не в сети

#5 2010-01-05 07:30:23

Live
Участник
Зарегистрирован: 2009-12-04
Сообщений: 181
Рейтинг :   

Re: Переменная {if_active}

vitaly, спасибо! Очень оперативно работаете smile
Последний вопрос - если я хардкорно пропишу в шаблоне ссылку на категорию, будет ли работать {if_active} в этом случае? или только в {categories} это работает?

проверил - не работает sad возможно ли это каким нибудь образом реализовать?

Изменено Live (2010-01-05 08:18:17)

Не в сети

#6 2010-01-05 15:26:41

Евгений
Модератор
Откуда Россия
Зарегистрирован: 2009-04-08
Сообщений: 1,014
Рейтинг :   38 
Сайт

Re: Переменная {if_active}

vitaly, тоже очень интересует этот вопрос, возможно ли в шаблоне так же реализовать?


I NGeneration CMS

Не в сети

#7 2010-01-05 18:02:19

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Переменная {if_active}

Live, нельзя.
Но есть очень хочется, то можно.
1. открываем engine/includes/inc/functions.inc.php

2. находим (строка ~935):

//
// New category menu generator
function generateCategoryMenu(){
	global $mysql, $catz, $tpl, $config, $CurrentHandler, $SYSTEM_FLAGS;

последнюю строку меняем на:

	global $mysql, $catz, $tpl, $template, $config, $CurrentHandler, $SYSTEM_FLAGS;

3. чуть ниже находим:

		$tvars['vars'] = array(
			'if_active'	=>	(isset($SYSTEM_FLAGS['news']['currentCategory.id']) && ($v['id'] == $SYSTEM_FLAGS['news']['currentCategory.id']))?'active_cat':'',

перед ней вставляем:

		$template['vars']['ifactive:'.$v['alt']] = (isset($SYSTEM_FLAGS['news']['currentCategory.id']) && ($v['id'] == $SYSTEM_FLAGS['news']['currentCategory.id']))?'active_cat':'';

После этого в шаблоне main.tpl должны появиться переменные вида ifactive:альт_имя, которые будут принимать значение 'active_cat' для активной категории и '' (т.е. пустое) для остальных категорий.

Например, есть категории с альт. именами abc, def, news.
Тогда появятся переменные: {ifactive:abc}, {ifactive:def}, {ifactive:news}

p.s. Не проверял, но 90% должно работать сходу smile

Не в сети

#8 2010-01-06 17:09:48

Live
Участник
Зарегистрирован: 2009-12-04
Сообщений: 181
Рейтинг :   

Re: Переменная {if_active}

спасибо, работает smile

работает если категория отображается на главной. если не отображается - то не работает

Изменено Live (2010-01-06 17:49:12)

Не в сети

#9 2010-01-06 18:18:03

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Переменная {if_active}

Live, тогда код из п. 3 размести перед строкой:

		if (!substr($v['flags'],0,1)) continue;

и будет работать для всех категорий

Не в сети

#10 2010-01-07 02:32:19

Live
Участник
Зарегистрирован: 2009-12-04
Сообщений: 181
Рейтинг :   

Re: Переменная {if_active}

еще раз спасибо smile


появился еще один вопрос - а если ссылка на статичную страницу или плагин - такое можно как то реализовать? smile

Изменено Live (2010-01-07 05:13:42)

Не в сети

#11 2010-01-11 06:21:03

hot
Участник
Откуда Россия
Зарегистрирован: 2008-10-26
Сообщений: 173

Re: Переменная {if_active}

Live пишет:

еще раз спасибо smile
появился еще один вопрос - а если ссылка на статичную страницу или плагин - такое можно как то реализовать? smile

---> пример : http://pupkin_vasya.xxx/plugin/feedback/?id=1

Изменено hot (2010-01-11 06:38:17)

Не в сети

#12 2010-01-11 13:39:09

Live
Участник
Зарегистрирован: 2009-12-04
Сообщений: 181
Рейтинг :   

Re: Переменная {if_active}

hot пишет:

---> пример : http://pupkin_vasya.xxx/plugin/feedback/?id=1

Не понял, к чему это ты написал?

Не в сети

#13 2010-01-11 14:19:24

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Переменная {if_active}

Live, нет.
Но такое делается достаточно просто средствами JS - ведь достаточно проверить равенство текущего URL'а и URL'а, прописанного в ссылке и на основании этого менять стиль (класс) ссылки.

Не в сети

#14 2010-01-11 16:28:44

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Переменная {if_active}

Лови. Проверялось под FF, "полёт нормальный":

<html>
<body>
<!-- описание стилей. есс-но лучше делать во внешней CSS, но для демонстрации можно и тут -->
<style>
.linkActive { background: red; }
</style>

<!-- блоку со ссылками даём идентификатор. если блок будет в виде <ul><li>..</li></ul>, то работать надо будет немного по другому -->
<span id="mLinks">
<a href="/">Home</a><br/>
<a href="/guest.html">Guest</a><br/>
<a href="/mail">Mailbox</a><br/>
<a href="/x.html">my active link</a><br/>
</span>

<!-- вот этот скрипт пихаем _обязательно_ после блока с ссылками -->
<script language="javascript">
{
	// Открываем блок со ссылками (тот у которого id="mlinks")
	var llist = document.getElementById('mLinks');
	if (llist) {
	
		// Берём список вложенных объектов
		var children = llist.childNodes;
		
		// Проходим по списку
		var i;
		for (i=0; i<children.length; i++) {
			// Пропускаем всё кроме ссылок (тег: `A`)
			if ((children[i].nodeName != 'A')&&(children[i].nodeName != 'a'))
				continue;
			
			// !!! Проверяем текущий URL !!!
			if (children[i].href == document.location) {
				// А вот тут - прописываем стиль - `linkActive`
				children[i].className = 'linkActive';
			}
		}
	}
} 
</script>

Не в сети

#15 2010-01-12 11:37:14

Live
Участник
Зарегистрирован: 2009-12-04
Сообщений: 181
Рейтинг :   

Re: Переменная {if_active}

vitaly, спасибо, имено то что нужно cool
если работать со списком - то нужно пропускать все, кроме тега А и li ? или разница в чем то другом?

Не в сети

#16 2010-01-12 14:13:46

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Переменная {if_active}

Live, тут древовидная структура, поэтому надо будет сначала найти UL (если id назначать ему, то искать уже не надо), потом в нём найти все li, а потом в каждом LI искать A ... в общем, получится несколько вложенных циклов.

Не в сети

#17 2010-01-17 16:43:16

Live
Участник
Зарегистрирован: 2009-12-04
Сообщений: 181
Рейтинг :   

Re: Переменная {if_active}

Может вопрос не совсем по теме
можно подкатегориям присвоить свои классы или ид?
например подкатегории 2 уровня свой класс или ид, 3 - свои

Не в сети

#18 2010-01-19 01:54:42

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Переменная {if_active}

Live, можно почти так как ты хочешь.
В шаблоне categories.tpl есть переменная {level} (уже минут 5 как есть в SVN версии - changeset 521), категории назначается либо пустой класс, либо - класс active_cat (в зависимости от того активна ли категория)
Зная всё это ты легко сможешь создать нужные классы.

Не в сети

#19 2012-09-13 17:21:17

StiCh
Участник
Зарегистрирован: 2012-09-13
Сообщений: 2
Рейтинг :   

Re: Переменная {if_active}

vitaly пишет:

Лови. Проверялось под FF, "полёт нормальный":

<html>
<body>
<!-- описание стилей. есс-но лучше делать во внешней CSS, но для демонстрации можно и тут -->
<style>
.linkActive { background: red; }
</style>

<!-- блоку со ссылками даём идентификатор. если блок будет в виде <ul><li>..</li></ul>, то работать надо будет немного по другому -->
<span id="mLinks">
<a href="/">Home</a><br/>
<a href="/guest.html">Guest</a><br/>
<a href="/mail">Mailbox</a><br/>
<a href="/x.html">my active link</a><br/>
</span>

<!-- вот этот скрипт пихаем _обязательно_ после блока с ссылками -->
<script language="javascript">
{
	// Открываем блок со ссылками (тот у которого id="mlinks")
	var llist = document.getElementById('mLinks');
	if (llist) {
	
		// Берём список вложенных объектов
		var children = llist.childNodes;
		
		// Проходим по списку
		var i;
		for (i=0; i<children.length; i++) {
			// Пропускаем всё кроме ссылок (тег: `A`)
			if ((children[i].nodeName != 'A')&&(children[i].nodeName != 'a'))
				continue;
			
			// !!! Проверяем текущий URL !!!
			if (children[i].href == document.location) {
				// А вот тут - прописываем стиль - `linkActive`
				children[i].className = 'linkActive';
			}
		}
	}
} 
</script>

А можно такой же пример, но для <ul><li>..</li></ul>?

Не в сети

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

Работает на FluxBB