Главная/Портфолио/Веб-портал для “Космолаб”: система хранения научных статей

Космолаб

Веб-портал для “Космолаб”: система хранения научных статей

С чего всё начиналось

Веб-разработка портала для хранения научных статей — такой была задача от наших новых партнеров, компании «Космолаб». Клиент решил выстроить статьи на портале в виде дерева. Эта структура казалась наиболее удачной и наглядной, чтобы студенты и сотрудники научных институтов могли читать и комментировать тексты, искать нужные сведения, присваивать материалам разные степени достоверности.

Вариант дерева статей — сложный с точки зрения разработки, но куда удобнее для пользователей. Мы пошли навстречу клиенту и всё закрутилось.

Решение

Мы проанализировали требования к веб-порталу и составили подробное ТЗ с мокапами. Обсудили с заказчиком технологии, которые будем использовать на проекте. Изначально планировали работать на Drupal — он поддерживает версионирование статей и переводов. Но, детально изучив документацию, поняли, что лучше справится фреймворк Yii2: работает на порядок быстрее Drupal, использует меньше ресурсов и проще в поддержке и дальнейших доработках. Затем оценили проект и выделили два ключевых направления в работе:

  • построить дерево научных статей
  • сегментировать юзеров и каждому сегменту присвоить свои фичи

Дерево статей — задача с высоким приоритетом. И мы начали именно с неё.

Как делали дерево статей

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

  • у каждой статьи есть только одна родительская статья
  • у статьи может быть от нуля до бесконечности дочерних статей
  • в иерархии статей возможно сколько угодно уровней вложенности

Мы исследовали 4 паттерна для работы с деревьями:

  • Adjacency list. В таблицу с данными добавляется ID записи предка. Плюсы: простое наследование от предка к потомку. Минусы: нельзя получить полную структуру дерева статей и построить путь от корня дерева до конкретного элемента.
  • Nested Sets. В таблицу с данными добавляются сразу три поля: ID предка, ID потомка, уровень элемента. Плюсы: паттерн подходит для хранения направленных деревьев. Минусы: сложно удалять и перемещать отдельные элементы.
  • Materialized Path. В таблицу вносится текстовая строка, которая содержит полный путь — от корня дерева до текущего элемента. Плюсы: быстрая выборка части дерева. Минусы: сложно удалить или переместить узел дерева.
  • Closure Table. Создается отдельная таблица, которая хранит ID текущей записи и ID записи прямого потомка. По сути это вариант паттерна Adjacency List, но с использованием сторонней таблицы.

Взвесили все плюсы и минусы паттернов и остановились на Materialized Path — он максимально соответствовал нашим требованиям. Для реализации паттерна выбрали ltree, модуль PostgreSQL, который ускоряет и упрощает работу с иерархическими структурами. А для отрисовки дерева в 2D формате использовали библиотеку Viz.js. Она легко настраивается и может быстро отрисовать до 1500-2000 узлов дерева статей.

 

Веб-портал для "Космолаб"

Пока работали над деревом статей столкнулись с вопросом: сколько уровней вложенности отображать в окне, чтобы сохранить читабельность информации? В итоге сделали 4 уровня вложенности. Затем создали для статей стандартные компоненты:

  • название научной работы
  • автор: имя, научное звание
  • даты создания и последних изменений текста
  • собственно текст научной статьи
  • степень достоверности и её обоснование
  • комментарии к тексту
  • место статьи в иерархии всех материалов

Как сегментировали пользователей

Мы разделили пользователей системы на три сегмента, каждый со своим уровнем доступа.

  • Читатели — неавторизованные юзеры. Используют веб-портал, чтобы найти и почитать научные статьи. Могут оставить запрос на сайте “Хочу стать автором”.
  • Авторы/Редакторы — авторизуются через логин и пароль. Могут оставлять комментарии к статьям, добавлять и редактировать материалы ниже того узла, к которому имеют доступ, то есть, в пределах своего поддерева.
  • Администраторы — авторизованные пользователи. Управляют системой целиком. Добавляют, редактируют и удаляют статьи по всему дереву, модерируют списки авторов.

Для сегментации юзеров использовали подход к разделению прав доступа RBAC (Role Based Access Control) из ядра Yii2.

 

Веб-портал для "Космолаб"

Результат

Система хранения статей — нестандартный проект. Мы постоянно экспериментировали с альтернативными библиотеками для работы с деревом статей — пробовали Cytoscape.js, Sigma js, Alchemy js, D3.js. Изучили новые технологии: ltree — модуль PostgreSQL для хранения дерева статей, и библиотеку Viz.js для отрисовки дерева в формате 2D. Чтобы вписаться в ограниченный бюджет, обсудили с клиентом и убрали из проекта несколько второстепенных фич: тэги по статьям, историю поиска, FAQ, но основной функционал реализовали в полном объёме:

  • пользователи в системе регистрируются и проходят авторизацию
  • просматривают и редактируют статьи
  • ищут нужные материалы по ключевому слову
  • создают обзоры статей — материалы, объединённые одной темой
  • добавляют обоснования к статьям

Итогом разработки веб-портала стал удобный инструмент для научных организаций, копилка ценной информации. Веб-портал поддерживает два языка — русский и английский, в будущем планируется расширить мультиязычность. Сейчас заказчик наполняет систему контентом.

Стек технологий

PostgreSQL, PHP 7.2, Yii2, Bootstrap, ltree, Viz.js, Sphinx

Примеры проектов

Запросите консультацию эксперта

Отправить заявку

Вы можете загружать файлы до 200 Мб в форматах doc, docx, pdf, odt, ott, txt, jpeg, xls, rar, zip, 7z

Фильтр

Закрыть

Технологии

Индустрии