Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Стол заказов » Добавление класса с учетом parentid категории

Добавление класса с учетом parentid категории


 finik    24.02.2019    Стол заказов    252    15 комментариев

В сайдбаре вывожу список категорий/подкатегорий через catmenu:

[root]<ul>[/root]
[item]
	<li[active] class="cat-active"[/active]><a class="linkincode[isparent] spoiler_links[/isparent]" href={url}"}">{name}</a>
	[sub-prefix]<ul class="spoiler_body">[/sub-prefix]{sub-item}[sub-suffix]</ul>[/sub-suffix]</li>
[/item]
[root]</ul>[/root]



Так как список длинный, для родительских категорий сделал спойлеры. Скрипт спойлера:

	$(document).ready(function() {
		$('.spoiler_links').click(function() {
			$("ul[class^='spoiler_body']").hide('normal');
			if ($(this).parent().children('ul.spoiler_body').css("display") == "none") {
				$("ul[class^='spoiler_body']").hide('normal');
				$(this).parent().children('ul.spoiler_body').toggle('normal');
			} else $("ul[class^='spoiler_body']").hide('normal');
			return false;
		});
	});




Надо, чтобы при нахождении в родительской категории, подкатегории или на странице, принадлежащей этой подкатегории, список родительской категории был открытым. То есть, в:
<ul class="spoiler_body"> 

добавлялся класс:
<ul class="spoiler_body spoiler_open">

В коде шаблона это может выглядеть так:
<ul class="spoiler_body {catmenu-open}">

, где {catmenu-open} заменяется на spoiler_open только для конкретного списка подкатегорий и родительской категории.


<ul>
<li>Категория ID=1
<ul class="spoiler_body spoiler_open">
<li>Подкатегория ID=2</li>
<li>Подкатегория ID=3</li>
<li>Подкатегория ID=4</li>
<li>Подкатегория ID=5</li>
<li>Подкатегория ID=6</li>
</ul>
</li>
<li>Категория ID=7
<ul class="spoiler_body">
<li>Подкатегория ID=8</li>
<li>Подкатегория ID=9</li>
<li>Подкатегория ID=10</li>
<li>Подкатегория ID=11</li>
<li>Подкатегория ID=12</li>
</ul>
</li>
<li>Категория ID=13</li>
<li>Категория ID=14</li>
</ul>


Выше пример: spoiler_open будет прописан, если пользователь находится в категории id=1, либо в подкатегориях с id=2 по id=6, или на страницах, принадлежащих этим подкатегориям.

Понимаю, что "копать" надо в сторону parentid, но сам реализовать этого не смогу.

Стоимость по договоренности.

15 комментариев

LazyDev
php-developer

LazyDev - 24 февраля 2019 18:51 -

JS код
<script>
$(function() {
	if ($('.cat-active').attr('data-catid') == {category-id}) {
		if ($('.cat-active').parent('.spoiler_body').length>0) {
			$('.cat-active').parent('.spoiler_body').addClass('spoiler_open');
		} else {
			$('.cat-active > ul.spoiler_body').addClass('spoiler_open');
		}
	}
});
</script>

TPL файл
[root]<ul>[/root]
	[item]
		<li [active]class="cat-active"[/active] data-catid="{id}">
			<a class="linkincode[isparent] spoiler_links[/isparent]" href="{url}">{name}</a>
			[sub-prefix]<ul class="spoiler_body">[/sub-prefix]{sub-item}[sub-suffix]</ul>[/sub-suffix]
		</li>
	[/item]
[root]</ul>[/root]

Мой блог: LazyDev.pro

finik
Юзер

finik - 24 февраля 2019 20:06 -

1) spoiler_open не прописывается
2) спойлер не открывается
3) нарушилась работа остальных скриптов

в консоли SyntaxError: missing : after property id

LazyDev
php-developer

LazyDev - 24 февраля 2019 20:34 -

Мне лень ставить демо и показывать что все работает

Мой блог: LazyDev.pro

finik
Юзер

finik - 24 февраля 2019 20:51 -

если в JS меняем {category-id} на {id}, остальное на сайте возобновляет работу, но в консоли ошибка именно на эту строку JS - ReferenceError: id is not defined
спойлер по прежнему не работает

LazyDev
php-developer

LazyDev - 24 февраля 2019 21:04 -

finik,
27. Добавлен новый глобальный тег для шаблонов {category-id}, который выводит ID просматриваемой посетителем сайта категории. Данный тег будет полезен при организации меню на сайте, а также когда нужно быстро переназначить какие-либо CSS классы или сами имена файлов шаблонов, при оформлении шаблонов вывода публикаций.
- DLE 12.0

Мой блог: LazyDev.pro

finik
Юзер

finik - 24 февраля 2019 22:00 -

знаю я про данный тег, а выше указал, что ошибка в этой строке.

сейчас внес правки в чистый шаблон Default, чтобы исключить конфликты со стороны моего шаблона - спойлер не работает, а в консоли - SyntaxError: missing : after property id

LazyDev
php-developer

LazyDev - 24 февраля 2019 22:16 -


Мой блог: LazyDev.pro

finik
Юзер

finik - 25 февраля 2019 09:21 -

Да, работает, но с одним НО. Если ваш скрипт добавляю в файл js сразу после/перед скрипта спойлера, то не работает, если добавляю в main.tpl, то работает. Предположу, что из-за {category-id}

finik
Юзер

finik - 25 февраля 2019 09:25 -

Ошибка возможно из-за того, что {category-id} в js файле не обрабатывается и её можно использовать только в .tpl

LazyDev
php-developer

LazyDev - 25 февраля 2019 16:53 -

finik, ни один тег не работает в js файлах. Это нужно знать.

Мой блог: LazyDev.pro

finik
Юзер

finik - 25 февраля 2019 17:07 -

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

serg91100
Юзер

serg91100 - 25 февраля 2019 09:58 -

Прошу прощение, что не по теме. Но устал ловить уже PunPun

Добрый день, Владимир Щербинин (PunPun). Почему Вы игнорируете письма? Обещали подправить заказанный мною модуль еще 2 недели назад. Я жду ответа.

dj-avtosh
php-developer

dj-avtosh - 25 февраля 2019 10:29 -

Доброго времени суток, если обещал - значит ваш тикет уже в тайм-трекере. Невозможно все делать мгновенно. Пожалуйста, не нужно писать не по теме, уважайте себя и пользователей сайта.

telegram: @blob42
skype: elhan.isaev (seldom)

serg91100
Юзер

serg91100 - 25 февраля 2019 10:31 -


Если бы это действительно было так, моего комментария тут и не было. На скриншоте дату посмотрите.

dj-avtosh
php-developer

dj-avtosh - 25 февраля 2019 10:33 -

это не дает вам право писать не по теме.

telegram: @blob42
skype: elhan.isaev (seldom)

Чтобы комментировать - войдите или зарегистрируйтесь на сайте
наверх