CollapseCategoriesLight

Обсуждение новой системы расширения функциональности phpBB 4.0-dev, разработки новых расширений.
Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

CollapseCategoriesLight

Сообщение Alecto »

Collapse Categories под версию PHPBB3.1

Решили с Алг не делать выборку вариантов "база/локалсторе" в админке, а просто разнести на два альтернативных решения.

Версия Light

Что умеет CollapseCategoriesLight:
- сворачивает/разворачивает категории на главной странице списка форумов
- работает с блоком recent topics
- запоминает состояние
- проверяет установку расширения CollapseCategories (полная версия работает с БД) и не включается, если альтернативный коллапс установлен

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

По-умолчанию блок recent topics не сворачивается, чтобы включить сворачивание блока и запоминание состояния - откройте файл jquery.collapsel.js и раскомментируйте следующие за указанной строки (2 вхождения)

Код: Выделить всё

// для recent topics - раскомментировать
закомментируйте следующую за этой строку

Код: Выделить всё

// только категории - закомментировать, если включается recent topics
Мой выбор - облегченная версия CollapseCategoriesLight
https://github.com/Alecto/CollapseCategoriesLight

Альтернативная версия CollapseCategories
viewtopic.php?p=2621#p2621
Алг писал(а):сделала сохранение состояния категорий. можно попробовать, взяв экст тут https://github.com/alg5/CollapseCategories
Обязательно отключить, если уже ставили, удалить данные, подключить и очистить кэш
И ещё, для того, чтобы экст заработал, надо изменить содержимое файла includes/functions_display.php
код брать отсюда https://github.com/rxu/phpbb3/blob/0aa7 ... isplay.php
Последний раз редактировалось Alecto 28 авг 2014, 18:00, всего редактировалось 9 раз.

Алг
Сообщения: 645
Зарегистрирован: 18 фев 2014, 17:28

Collapse Categories 3.1

Сообщение Алг »

Alecto писал(а):не смог найти подходящее событие для списка форумов на index.php
надо искать события в темплейтах
все существующие на сегодняшний день события находятся тут https://wiki.phpbb.com/Event_List#Template_Events
наиболее подходящим выглядит "forumlist_body_category_header_after" ( не проверяла)

Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

Collapse Categories 3.1

Сообщение Alecto »

Алг писал(а):надо искать события в темплейтах
искал
Алг писал(а):forumlist_body_category_header_after
пробовал - вставляет код не туда куда нужно.
Алг писал(а):все существующие на сегодняшний день события находятся
жаль, значит пока не реализовать задуманное
в код шаблонов залезть можно но не хочется и не правильно это

:(

Алг
Сообщения: 645
Зарегистрирован: 18 фев 2014, 17:28

Collapse Categories 3.1

Сообщение Алг »

да, не хватает там, да плюс нужно иметь возможность добавлять столбцы
Нужна пара событий

Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

Collapse Categories 3.1

Сообщение Alecto »

получилось по совету Татьяны в соседней теме

Код: Выделить всё

	$(".topiclist").before("<div class=collapsetrigger'>Тест</div>");
результат
<div class="collapsetrigger">Тест</div>
<ul class="topiclist">
<div class="collapsetrigger">Тест</div>
<ul class="topiclist topics">
правда, мне надо получить вот такой результат
<div class="collapsetrigger">Тест</div>
<ul class="topiclist">
<div class="collapsethis">
<ul class="topiclist topics">
</div>
не пойму, как разделить условия, если в UL используются одни и те же классы.

Дмитрий Николаевич
Сообщения: 54
Зарегистрирован: 22 июл 2014, 09:46
Откуда: из мамы
Контактная информация:

Collapse Categories 3.1

Сообщение Дмитрий Николаевич »

Вот это не работает?
$(".topiclist").before("<div class='collapsethis'>");
или же
$(".topiclist topics").before("<div class='collapsethis'>");

Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

Collapse Categories 3.1

Сообщение Alecto »

Дмитрий Николаевич писал(а):Вот это не работает?
работает. я вроде так и написал.
первый блок вставляет так как нужно и там где нужно.
проблема со вторым блоком, поскольку перед ним вставляется тот же див collapsethis изза класса topiclist, мне же нужно взять второй UL в див с другим классом.
постом выше я писал.

может както через флиги попробовать?
хотя опять же - циклов никаких нет. есть фукция, которая обрабатывает все элементы.

Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

Collapse Categories 3.1

Сообщение Alecto »

пытаюсь делать так

Код: Выделить всё

	$(".topiclist").before(function(){
		if($(this).hasClass('topics'))
			return '<div class="collapsethis">';
		else
			return '<div class="collapsetrigger">Тест</div>';
	});

	$(".topiclist").after(function(){
		if($(this).hasClass('topics'))
			return '</div>';
		else
			return '';
	});
но, проблема в том, что первый открывающий див <div class="collapsethis"> автоматически закрывается, в итоге получаю
<div class="collapsethis"></div>
<ul class="topiclist topics">
</div>
вместо
<div class="collapsethis">
<ul class="topiclist topics">
</div>
как побороть?

Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

Collapse Categories 3.1

Сообщение Alecto »

поборол

Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

Collapse Categories 3.1

Сообщение Alecto »

сейчас обрабатывается только первый заголовок

Код: Выделить всё

	$(".topiclist").before(function(){
		if($(this).hasClass('topics'))
			return '<div class="collapsetrigger collapseactive"></div>';
	});


	$(".topics").wrap('<div class="collapsethis" aria-hidden="false"></div>');

как сделать, чтобы проход был по всем элементам на странице?

и, наверное, надо добавить условие, чтобы скрипт подключаелся только на главной странице?
как записать такое условие?

Ответить