Организация иерархических списков элементов курса

Организация иерархических списков элементов курса

от Alex Nemch -
Количество ответов: 10

Уважаемые коллеги, хочется получить то, что написано в теме поста.

Пример:

Здесь moodle.mgimo.an2k.ru (логин: pupkin пароль: 123)

есть курс moodle.mgimo.an2k.ru/course/view.php?id=5

(пардон за ссылки, если это считается спамом)

Должен открыться Unit 1, если не открылся, можно вручную.

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

Примерно, как в блоке навигации, но в центре, прямо в курсе.

Технические данные: выделенный сервер, debian, mysql, moodle: $release = '2.2.3+ (Build: 20120612)'

Заранее благодарю за ответы.

Александр Немченко

В ответ на Alex Nemch

Re: Организация иерархических списков элементов курса

от Petr Zakharov -

Переписать php, отвечающий за отрисовку (course/view.php?). Добавить js и раскрывающиеся блоки.

В ответ на Petr Zakharov

Re: Организация иерархических списков элементов курса

от Alex Nemch -

Спасибо. Ответ понятен.

Значит ли это, что другого пути нет?

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

Может быть лучше написать модуль (или найти готовый, но мне не удалось)?

Возможно есть у мудла стандартная процедура/формат накладывания патча?

В ответ на Alex Nemch

Re: Организация иерархических списков элементов курса

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Готового решения для такого вроде нет. Но вы можете написать свой модуль формата курса. Другие лежат в moodle/course/format, там есть файл, отвечающий за отрисовку страницы курса и файл в js-функциями. Тогда никаких патчей не нужно будет. 

Но возьметесь писать модуль формат курса, базируйтесь на версии не ниже 2.4, при переходе с 2.3 на 2.4 там сильные изменения были.

Но то, что вы видите на сайте по ссылке, это не особый формат курса, а особая тема, в которой написан дополнительный js-код, который позволяет сворачивать секции. Обратите внимание - оформление этого курса отличается от оформления остального сайта. Поиск по html по слову theme показывает, что основная тема сайта называется bbytefusionmod, о со сворачиваемыми секциями - fdpeng, видимо она написана именно для этого курса.

В ответ на Vadim Dvorovenko

Re: Организация иерархических списков элементов курса

от Alex Nemch -

Вы правы, с темами все именно так.

Для решения сабжа мы уже склоняемся к тому, чтобы в тему fdpeng
инкюдить js со следующим функционалом:

  1. Сканирование элементов <li> в центре страницы и складывание их классов в массив так, чтобы получилась иерархия
  2. Создание на каждом уровне js-кнопки для сворачивания-разворачивания.
  3. Запись в таблицу БД текущего состояния (что открыто, что закрыто) для последующего восстановления сеанса.

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

Ваше предложение о модуле формата курса очень кстати - обмозгуем это дело.

Спасибо Вадим.

В ответ на Alex Nemch

Re: Организация иерархических списков элементов курса

от Maks Mokriev -

Я так думаю, то что вы ищите тут. Это специальный формат курса.

Еще посмотрите на это. Насколько я понял, что-то подобное вы хотите реализовать.

В ответ на Maks Mokriev

Re: Организация иерархических списков элементов курса

от Alex Nemch -

Спасибо.

Collapsed Topics мы юзаем успешно, но он открывает/закрывает только верхний уровень - Unit`ы, остальные вложенные элементы открываются/закрываются сразу все, а нужно, чтобы каждый уровень в отдельности (ну так хочет заказчик!)

Flexible sections format у нас тоже стоит, но как его юзать я пока не понял, в config что-ли лезть? В администрировании не нашел его настроек грущу

В ответ на Alex Nemch

Re: Организация иерархических списков элементов курса

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Как мне кажется, использовать JS в это единственно правильное решение. А вот писать на php здесь совершенно не стоит - будете грузить сервер бесполезными ajax-запросами, мучать БД moodle этой ерундой.

Воспользуйтесь js переменной localstorage для хранения данных об открытых/закрытых ветках. Поддерживают все современные браузеры, информация сохранится в браузере пользователя. Конечно, если пользователь много бегает с компьютера на компьютер, это не поможет. Но пока он работает на одном компьютере у него будет всё сохраняться.

Плюс я бы на вашем месте пока ограничился только первым уровнем иерархии, болле сложное на практике, скорее всего не потребуется. Такие элементы легко вычислить по <div class="mod-indent">. У других уровней ещё присутствует классс mod-indent-1, mod-indent-2 и т.д..

В ответ на Vadim Dvorovenko

Re: Организация иерархических списков элементов курса

от Alex Nemch -

localstorage - для меня откровение - спасибо,

в остальном мы именно так и решили писать как вы предлагаете, вот только...

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

В ответ на Alex Nemch

Re: Организация иерархических списков элементов курса

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Alex, если преподаватели сядут Вам на шею, вы от них уже не отвяжетесь. Как можно быстрее доведите до руководства мысль о том, что преподаватели должны отвечать за свой контент сами. Обучить преподавателя размещать файлы в уже созданный заранее курс занимает 2 часа, а размещать за него файлы можно годами.

Почти все, кто внедряли moodle, в один голос говорят, что система начинает работать как следует только тогда, когда преподаватели сами начинают вносить в неё материалы. 

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

В ответ на Vadim Dvorovenko

Re: Организация иерархических списков элементов курса

от Alex Nemch -

Кхе... я 25 лет разработчик... проблема общая и на все времена, независимо от названия системы.
В этот раз, нас заманили разработкой, а потом выяснилось, что и вводить нам. Пришлось в виде исключения согласиться, но только на один курс.

Я согласен сколь угодно терпеливо учить преподавателей - это окупится.