Нововведения на сайте. Анонсы опций, разделов, модулей, функций

Рейтинг лучших казино онлайн за 2020 год:
  • РОКС Казино
    РОКС Казино

    1 место из-за огромных бонусов и Джекпота 100 млн!

  • СОЛ Казино
    СОЛ Казино

    Приветственный бонус 30 000 руб + за каждый депозит до 300 000 руб!

  • ПИНАП Казино
    ПИНАП Казино

    Ретро-казино с огромными бонусами!

  • ФРЭШ Казино
    ФРЭШ Казино

    Свежий дизайн и моментальные выплаты!

Нововведения на форуме

Старожил

Поскольку с момента предыдущего обновления прошло 5 лет, настала пора обновить код форума, чтобы он стал умнее и удобнее.
Основная часть работ по обновлению и переносу завершена, остались лишь мелкие недочёты, которые мы постараемся поправить возможно оперативней.

А пока расскажу о том, что поменялось.

Реакции
Если не самое главное, то точно самое заметное — это появление реакций вместо «спасибок». Теперь можно выразить своё отношение к посту посредством целого спектра эмоций))

Сумма всех реакций называется Индексом заметности и видна в аккаунте пользователя.
Следует отметить, что оценки «Спасибо», «Супер» и «Ха-ха» добавляют к индексу заметности по одному баллу, а «Не согласен» — отнимает один балл.
Также реакции можно оставлять и в личных сообщениях.
Чтобы появилось соответствующее меню, надо подержать мышку над «спасибо». Если со смартфона — то длинное нажатие.

Названия реакций немного дурацкие, если у кого-то есть предложения — давайте обсуждать.

Предварительный просмотр сайтов
Ссылки на сайты сразу показывают содержимое, если это поддерживается сайтом. Пример:

СМИ узнали о заявке Индии к России на покупку комплектов для сборки Су-30

Push-уведомления
Появились push-уведомления. Можно включить в настройках. Следует заметить, что данная опция привязывается к конкретному браузеру, поэтому если вы хотите получать push-уведомления на компьютере и на смартфоне, включать эту опцию нужно и там, и там.

Новый спойлер
Появился еще один вариант спойлера — строчный спойлер . Для отображения необходимо кликнуть по нему.

Закладки
Рядом с каждой темой или сообщение появился флажок добавления в закладки

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

Заметки о пользователе
По наведению на аватар появляется всплывающее окно с профилем данного пользователя. В этом окне вы можете оставить заметку о пользователе, которая сохранится и будет видна при последующих просмотрах профиля. Это может быть всё, что угодно — настоящее имя, дата рождения, телефон.
Информация в заметке будет видна только вам!

Отправка ссылки в мессенджеры, на e-mail в социальные сети
Над каждым сообщением есть пиктограмма, вызывающая меню отправки ссылки.
На текущий момент реализованы инструменты перепоста ссылки в социальные сети Facebook,Twitter, Vk и Одноклассники. Также поддерживается отправка в мессенджеры Viber, Telegram, WhatsApp и отправка на почту. Можно и просто скопировать ссылку в буфер обмена — для этого следует нажать на кнопку слева от адреса ссылки.

Игнорирование разделов и тем
Добавлять в игнор-лист можно как темы, так и разделы (за исключением раздела «О сайте» и его содержимого)

Управление игнорируемым содержимым — в соответствующем пункте меню аккаунта.

Вопрос-Ответ

Модуль позволяет пользователям задавать вопросы на сайте, а администратору публиковать ответы на эти вопросы с возможностью отправки ответа на e-mail пользователя, задавшего вопрос.

Модуль относится к части CMS «Интерактив» и может быть установлен опционально.

Модуль «Вопрос-Ответ» можно прикреплять к различным страницам сайта. Если модуль прикреплен к нескольким страницам, в административной части модуля появляется специальный фильтр «Раздел сайта» с возможностью фильтрации вывода (списка вопросов, категорий и настроек) по принадлежности к странице.

Модуль состоит из двух частей: категории вопросов и вопросы-ответы.

Вопросы — ответы

В списке вопросы выводятся с приоритетом новизны.

Вопросы имеют следующие характеристики.

  • Дата и время – Дата и время поступления вопроса в формате дд.мм.гггг чч:мм, приходит с сайта.
  • Вопрос – Вопрос, который задал пользователь в форме в пользовательской части сайта. Параметр имеет разные значения для разных языковых версий сайта.
  • Опубликовать на сайте – Если отмечена, вопрос и ответ видны на сайте. Параметр имеет разные значения для разных языковых версий сайта.
  • Отправить ответ на e-mail – Если отмечена, после сохранения сообщения ответ будет послан на e-mail отправителя. Содержание письма, а также e-mail, указываемый в обратном адресе можно редактировать в настройках модуля. Письмо не может быть отправлено, если не заполнено текстовое поле для ответа, поле с вопросом или e-mail получателя.
  • Ответ – Текстовое поле для ответа. Параметр имеет разные значения для разных языковых версий сайта.
  • Часто задаваемый вопрос – Используется в шаблонной функции show_block.
  • Динамические блоки.
  • Вопрос задал.
  • Автор – Пользователь, создавший вопрос в форме на сайте.
  • Имя – Имя отправителя вопроса. Параметр имеет разные значения для разных языковых версий сайта.
  • Email – Электронный ящик получателя ответа.
  • Прикрепленные файлы.
  • Категория – Категория, к которой относится вопрос. Список категорий редактируется во вкладке выше. Возможно выбрать дополнительные категории, в которых вопрос также будет выводится. Чтобы выбрать несколько категорий, удерживайте CTRL. Параметр выводится, если в настройках модуля отмечена опция «Использовать категории».
  • Теги – Добавление тегов к вопросу. Можно добавить либо новый тег, либо открыть и выбрать из уже существующих тегов. Параметр выводится, если в настройках модуля включен параметр «Подключить теги».
  • Похожие вопросы – Выбор и добавление к текущему вопросу связей с другими вопросами. Похожие вопросы выводятся шаблонным тегом show_block_rel. По умолчанию связи между вопросами являются односторонними, это можно изменить, отметив опцию «В блоке похожих вопросов связь двусторонняя» в настройках модуля.
  • Счетчик просмотров – Количество просмотров на сайте текущего вопроса. Статистика ведется и параметр выводится, если в настройках модуля отмечена опция «Подключить счетчик просмотров».
  • Комментарии – Комментарии, которые оставили пользователи к текущему вопросу. Параметр выводится, если в настройках модуля включен параметр «Показывать комментарии к вопросам».
  • Рейтинг – Средний рейтинг, согласно голосованию пользователей сайта. Параметр выводится, если в настройках модуля включен параметр «Подключить рейтинг к вопросам».
  • Номер – Номер элемента в БД (веб-мастеру и программисту).
  • Редактор – Изменяется после первого сохранения. Показывает, кто из администраторов сайта первый правил текущую страницу.
  • Время последнего изменения – Изменяется после сохранения элемента. Отдается в заголовке Last Modify.
  • Раздел сайта – Перенос вопроса на другую страницу сайта, к которой прикреплен модуль. Параметр выводится, если в настройках модуля отключена опция «Использовать категории», если опция подключена, то раздел сайта задается такой же, как у основной категории.
  • Параметры SEO.
  • Заголовок окна в браузере, тег Title – Если не заполнен, тег Title будет автоматически сформирован как «Название страницы – Название сайта» Параметр имеет разные значения для разных языковых версий сайта.
  • Ключевые слова, тег Keywords – Если не заполнен, тег Keywords будет автоматически сформирован согласно шаблонам автоформирования из настроек модуля (SEO-специалисту). Параметр имеет разные значения для разных языковых версий сайта.
  • Описание, тег Description – Если не заполнен, тег Description будет автоматически сформирован согласно шаблонам автоформирования из настроек модуля (SEO-специалисту). Параметр имеет разные значения для разных языковых версий сайта.
  • Канонический тег – URL канонической страницы вида: http://site.ru/psewdossylka/, на которую переносится «ссылочный вес» данной страницы. Используется для страниц с похожим или дублирующимся контентом (SEO-специалисту). Параметр имеет разные значения для разных языковых версий сайта.
  • Псевдоссылка – ЧПУ (человеко-понятные урл url), адрес страницы вида: http://site.ru/psewdossylka/. Смотрите параметры сайта.
  • Редирект на текущую страницу со страницы – Позволяет делать редирект с указанной страницы на текущую.
  • Не индексировать – Запрет индексации текущей страницы, если отметить, у страницы выведется тег: name= «robots» content= «noindex» > (SEO-специалисту).
  • Changefreq – Вероятная частота изменения этой страницы. Это значение используется для генерирования файла sitemap.xml. Подробнее читайте в описании XML-формата файла Sitemap (SEO-специалисту).
  • Priority – Приоритетность URL относительно других URL на Вашем сайте. Это значение используется для генерирования файла sitemap.xml. Подробнее читайте в описании XML-формата файла Sitemap (SEO-специалисту).
  • Параметры показа.
  • Период показа – Если заполнить, текущий вопрос будет опубликована на сайте в указанный период. В иное время пользователи сайта вопрос не будут видеть, получая ошибку 404 «Страница не найдена» (администратору сайта).
  • Доступ – Если отметить опцию «Доступ только», вопрос и ответ увидят только авторизованные на сайте пользователи, отмеченных типов. Не авторизованные, в том числе поисковые роботы, увидят «404 Страница не найдена» (администратору сайта).
  • Не показывать на карте сайта – Скрывает отображение ссылки на вопрос в файле sitemap.xml и модуле «Карта сайта».
  • Оформление.
  • Шаблон страницы – Возможность подключить для страницы вопроса шаблон сайта отличный от основного (themes/site.php). Все шаблоны для сайта должны храниться в папке themes с расширением .php (например, themes/dizain_so_slajdom.php). Подробнее в разделе «Шаблоны сайта». (веб-мастеру и программисту, не меняйте этот параметр, если не уверены в результате!).
  • Шаблон модуля – Шаблон вывода контента модуля на странице отдельного вопроса (веб-мастеру и программисту, не меняйте этот параметр, если не уверены в результате!).
  • Индексирование для поиска – Вопрос автоматически индексируется для модуля «Поиск по сайту» при внесении изменений.
  • Индексирование для карты сайта – Вопрос автоматически индексируется для карты сайта sitemap.xml.

Категории

Категории вопросов могут иметь неограниченное число подкатегорий. При необходимости категории можно не использовать. Для этого нужно отключить параметр «Использовать категории» в настройках модуля.

При удалении категории удаляются все вложенные подкатегории и вопросы.

Категории имеют следующие характеристики.

  • Название – Используется в ссылках на категорию, заголовках. Параметр имеет разные значения для разных языковых версий сайта.
  • Опубликовать на сайте – Если не отмечена, категорию не увидят посетители сайта. Параметр имеет разные значения для разных языковых версий сайта.
  • Создать пункт в меню – Если отметить, в модуле «Меню на сайте» будет создан пункт со ссылкой на текущую категорию.
  • Комментарии – Комментарии, которые оставили пользователи к текущей категории. Параметр выводится, если в настройках модуля включен параметр «Показывать комментарии к категориям».
  • Рейтинг – Средний рейтинг, согласно голосованию пользователей сайта. Параметр выводится, если в настройках модуля включен параметр «Подключить рейтинг к категориям».
  • Динамические блоки.
  • Анонс – Краткое описание категории. Если отметить «Добавлять к описанию», на странице элемента анонс выведется вместе с основным описанием. Иначе анонс выведется только в списке, а на отдельной странице будет только описание. Если отметить «Применить типограф», контент будет отформатирован согласно правилам экранной типографики с помощью веб-сервиса «Типограф». Опция «HTML-код» позволяет отключить визуальный редактор для текущего поля. Значение этой настройки будет учитываться и при последующем редактировании. Параметр имеет разные значения для разных языковых версий сайта.
  • Описание – Если отметить «Применить типограф», контент будет отформатирован согласно правилам экранной типографики с помощью веб-сервиса «Типограф». Опция «HTML-код» позволяет отключить визуальный редактор для текущего поля. Значение этой настройки будет учитываться и при последующем редактировании. Параметр имеет разные значения для разных языковых версий сайта.
  • Индексирование для поиска – Категория автоматически индексируется для модуля «Поиск по сайту» при внесении изменений.
  • Индексирование для карты сайта – Категория автоматически индексируется для карты сайта sitemap.xml.
  • Номер – Номер элемента в БД (веб-мастеру и программисту).
  • Редактор – Изменяется после первого сохранения. Показывает, кто из администраторов сайта первый правил текущую страницу.
  • Время последнего изменения – Изменяется после сохранения элемента. Отдается в заголовке Last Modify.
  • Параметры SEO.
  • Заголовок окна в браузере, тег Title – Если не заполнен, тег Title будет автоматически сформирован как «Название категории – Название страницы – Название сайта», либо согласно шаблонам автоформирования из настроек модуля (SEO-специалисту). Параметр имеет разные значения для разных языковых версий сайта.
  • Ключевые слова, тег Keywords – Если не заполнен, тег Keywords будет автоматически сформирован согласно шаблонам автоформирования из настроек модуля (SEO-специалисту). Параметр имеет разные значения для разных языковых версий сайта.
  • Описание, тег Description – Если не заполнен, тег Description будет автоматически сформирован согласно шаблонам автоформирования из настроек модуля (SEO-специалисту). Параметр имеет разные значения для разных языковых версий сайта.
  • Канонический тег – URL канонической страницы вида: http://site.ru/psewdossylka/, на которую переносится «ссылочный вес» данной страницы. Используется для страниц с похожим или дублирующимся контентом (SEO-специалисту). Параметр имеет разные значения для разных языковых версий сайта.
  • Псевдоссылка – ЧПУ, т.е. адрес страницы вида: http://site.ru/psewdossylka/. Смотрите параметры сайта (SEO-специалисту).
  • Редирект на текущую страницу со страницы – Позволяет делать редирект с указанной страницы на текущую.
  • Не индексировать – Запрет индексации текущей страницы, если отметить, у страницы выведется тег: name= «robots» content= «noindex» > (SEO-специалисту).
  • Changefreq – Вероятная частота изменения этой страницы. Это значение используется для генерирования файла sitemap.xml. Подробнее читайте в описании XML-формата файла Sitemap (SEO-специалисту).
  • Priority – Приоритетность URL относительно других URL на Вашем сайте. Это значение используется для генерирования файла sitemap.xml. Подробнее читайте в описании XML-формата файла Sitemap (SEO-специалисту).
  • Параметры показа.
  • Раздел сайта – Перенос категории на другую страницу сайта, к которой прикреплен модуль (администратору сайта).
  • Сортировка: установить перед – Редактирование порядка следования категории в списке. Поле доступно для редактирования только для категорий, отображаемых на сайте.
  • Вложенность: принадлежит – Перемещение текущей категории и всех её подкатегорий в принадлежность другой категории (администратору сайта).
  • Доступ – Если отметить опцию «Доступ только», категорию увидят только авторизованные на сайте пользователи, отмеченных типов. Не авторизованные, в том числе поисковые роботы, увидят «404 Страница не найдена» (администратору сайта).
  • Не показывать на карте сайта – Скрывает отображение ссылки на категорию в файле sitemap.xml и модуле «Карта сайта».
  • Шаблоны.
  • Шаблон страницы – Возможность подключить для страницы категории шаблон сайта отличный от основного (themes/site.php). Все шаблоны для сайта должны храниться в папке themes с расширением .php (например, themes/dizain_so_slajdom.php). Подробнее в разделе «Шаблоны сайта». (веб-мастеру и программисту, не меняйте этот параметр, если не уверены в результате!).
  • Шаблон модуля – Шаблон вывода контента модуля на странице списка вопросов в категории (веб-мастеру и программисту, не меняйте этот параметр, если не уверены в результате!).
  • Шаблон списка элементов – Шаблон вывода контента модуля на странице элементов списка в категории (веб-мастеру и программисту, не меняйте этот параметр, если не уверены в результате!). Значение параметра важно для AJAX.
  • Шаблон страницы элемента – Шаблон вывода контента модуля на странице отдельного вопроса, вложенного в текущую категорию (веб-мастеру и программисту, не меняйте этот параметр, если не уверены в результате!).

Статистика

Настройки

  • Основные.
  • Количество вопросов на странице – Количество одновременно выводимых вопросов в списке.
  • Включить «Показать ещё» – На странице вопросов появится кнопка «Показать ещё». Увеличивает количество одновременно выводимых вопросов в списке.
  • Количество символов для сокращения вопроса и ответа в списке – Если не задано, вопрос и ответ не будут сокращаться.
  • Формат даты – Позволяет настроить отображение даты в модуле. Возможные значения:
    • 01.05.2020,
    • 01.05.2020 14:45,
    • 1 мая 2020 г.,
    • 1 мая,
    • 1 мая 2020, понедельник,
    • вчера 15:30,
    • не отображать.
  • Только зарегистрированные пользователи могут задавать вопросы – Вопросы могут добавлять только зарегистрированные пользователи.
  • Открывать вопрос на отдельной странице – Если не отмечена, вопросы будут одним списком без возможности открыть отдельную страницу.
  • Использовать защитный код (капчу) – Для добавления вопроса пользователь должен ввести защитный код.
  • Разрешить добавление файлов – Позволяет пользователям прикреплять файлы к вопросам.
  • Максимальное количество добавляемых файлов – Количество добавляемых файлов. Если значение равно нулю, то форма добавления файлов не выводится.
  • Доступные типы файлов (через запятую).

    doc, gif, jpg, mpg, pdf, png, txt, zip

    Здравствуйте, %name!
    > Вы задали вопрос на сайте %title (%url).
    > > Вопрос: > %question
    > > Ответ: > %answer.

    %title (%url). Новый вопрос в рубрике Вопрос-Ответ.

    Здравствуйте, администратор сайта %title (%url)!
    > В рубрике Впорос-Ответ появился новый вопрос:
    > %question.
    > %name
    > %email. Если включен параметр «Разрешить добавление файлов», то добавляется строка:
    > Прикреленные файлы: %files.

      %name – название категории,

    %parent – название категории верхнего уровня,

    %page – страница (текст можно поменять в интерфейсе «Языки сайта» – «Перевод интерфейса») (SEO-специалисту).

Параметр имеет разные значения для разных языковых версий сайта. Параметр появляется, если отмечена опция «Использовать категории».

  • Шаблон для автоматического генерирования Keywords – Если шаблон задан и для вопроса не заполнено поле Keywords, то поле Keywords автоматически генерируется по шаблону. В шаблон можно добавить:
    • %name – название,
    • %category – название категории,
    • %parent_category – название категории верхнего уровня (SEO-специалисту).

    Параметр имеет разные значения для разных языковых версий сайта.

  • Шаблон для автоматического генерирования Keywords для категории – Если шаблон задан и для категории не заполнено поле Keywords, то поле Keywords автоматически генерируется по шаблону. В шаблон можно добавить:
    • %name – название категории,
    • %parent – название категории верхнего уровня (SEO-специалисту).

    Параметр имеет разные значения для разных языковых версий сайта. Параметр появляется, если отмечена опция «Использовать категории».

  • Шаблон для автоматического генерирования Description – Если шаблон задан и для вопроса не заполнено поле Description, то поле Description автоматически генерируется по шаблону. В шаблон можно добавить:
    • %name – название,
    • %category – название категории,
    • %parent_category – название категории верхнего уровня,
    • %anons – краткое описание (SEO-специалисту).

    Параметр имеет разные значения для разных языковых версий сайта.

  • Шаблон для автоматического генерирования Description для категории – Если шаблон задан и для категории не заполнено поле Description, то поле Description автоматически генерируется по шаблону. В шаблон можно добавить:
    • %name – название категории,
    • %parent – название категории верхнего уровня,
    • %anons – краткое описание (SEO-специалисту).

    Параметр имеет разные значения для разных языковых версий сайта. Параметр появляется, если отмечена опция «Использовать категории».

  • Оформление.
  • Шаблон для списка элементов – По умолчанию modules/faq/views/faq.view.list.php. Параметр для разработчиков! Не устанавливайте, если не уверены в результате.
  • Шаблон для элементов в списке – По умолчанию modules/faq/views/faq.view.rows.php. Параметр для разработчиков! Не устанавливайте, если не уверены в результате. Значение параметра важно для AJAX.
  • Шаблон для первой страницы модуля (если подключены категории) – По умолчанию modules/faq/views/faq.view.fitst_page.php. Параметр для разработчиков! Не устанавливайте, если не уверены в результате.
  • Шаблон для элементов в списке первой страницы модуля (если подключены категории) – По умолчанию modules/faq/views/faq.view.fitst_page.php. Параметр для разработчиков! Не устанавливайте, если не уверены в результате. Значение параметра важно для AJAX.
  • Шаблон для страницы элемента – По умолчанию, modules/faq/views/faq.view.id.php. Параметр для разработчиков! Не устанавливайте, если не уверены в результате.
  • Дополнительно.
  • Отдельный пункт в меню администрирования для каждого раздела сайта – Если модуль подключен к нескольким страницам сайта, отметка данного параметра выведет несколько пунктов в меню административной части для удобства быстрого доступа (администратору сайта).
  • Индексирование для карты сайта – При изменении настроек, влияющих на отображение страницы, модуль автоматически переиндексируется для карты сайта sitemap.xml.
  • Шаблонные теги

    Для работы с модулем «Вопрос-ответ» служат следующие шаблонные теги:

    show_block – выводит последние вопросы. На странице вопросов, когда выводится список аналогичных вопросов, блок не выводится.

    count – количество выводимых вопросов (по умолчанию 3);

    site_id – страницы, к которым прикреплен модуль. Идентификаторы страниц перечисляются через запятую. Можно указать отрицательное значение, тогда будут исключены вопросы из указанного раздела. По умолчанию выбираются все страницы;

    cat_id – категории вопросов, если в настройках модуля отмечено «Использовать категории». Идентификаторы категорий перечисляются через запятую. Можно указать отрицательное значение, тогда будут исключены вопросы из указанной категории. Можно указать значение current, тогда будут показаны вопросы из текущей (открытой) категории или из всех категорий, если ни одна категория не открыта. По умолчанию категория не учитывается, выводятся все вопросы;

    sort – сортировка вопросов: date – по дате (по умолчанию), rand – в случайном порядке;

    often – часто задаваемые вопросы : true – выводятся только вопросы с пометкой «Часто задаваемый вопрос», по умолчанию пометка «Часто задаваемый вопрос» игнорируется;

    only_module – выводить блок только на странице, к которой прикреплен модуль «Вопрос-Ответ»: true – выводить блок только на странице модуля, по умолчанию блок будет выводиться на всех страницах;

    tag – тег, прикрепленный к вопросам;

    defer – маркер отложенной загрузки шаблонного тега: event – загрузка контента только по желанию пользователя при нажатии кнопки «Загрузить», emergence – загрузка контента только при появлении в окне браузера клиента, async – асинхронная (одновременная) загрузка контента совместно с контентом шаблонных тегов с тем же маркером, sync – синхронная (последовательная) загрузка контента совместно с контентом шаблонных тегов с тем же маркером, по умолчанию отложенная загрузка не используется, обычный вывод шаблонных тегов в коде страницы;

    Рейтинг онлайн казино на русском языке:
    • РОКС Казино
      РОКС Казино

      1 место из-за огромных бонусов и Джекпота 100 млн!

    • СОЛ Казино
      СОЛ Казино

      Приветственный бонус 30 000 руб + за каждый депозит до 300 000 руб!

    • ПИНАП Казино
      ПИНАП Казино

      Ретро-казино с огромными бонусами!

    • ФРЭШ Казино
      ФРЭШ Казино

      Свежий дизайн и моментальные выплаты!

    defer_title – текстовая строка, выводимая на месте появления загружаемого контента с помощью отложенной загрузки шаблонного тега;

    template – шаблон тега (файл modules/faq/views/faq.view.show_block_template.php; по умолчанию шаблон modules/faq/views/faq.view.show_block.php).

    Формат даты задается в настройках модуля.

    name= «show_block» module= «faq» >

    выведет 3 последниx активных вопроса сайта с ответами

    name= «show_block» module= «faq» count= «5» >

    выведет в ячейке таблицы 5 последних активных вопросов сайта с ответами

    name= «show_block» module= «faq» often= «1» >

    выведет часто задаваемые вопросы

    В шаблоне тега можно получить значение любого атрибута через переменную $result [ «attributes» ][ «название атрибута» ] .

    show_block_rel – на странице вопроса выводит похожие вопросы. По умолчанию связи между вопросами являются односторонними, это можно изменить, отметив опцию «В блоке похожих вопросов связь двусторонняя» в настройках модуля.

    count – количество выводимых вопросов (по умолчанию 3);

    defer – маркер отложенной загрузки шаблонного тега: event – загрузка контента только по желанию пользователя при нажатии кнопки «Загрузить», emergence – загрузка контента только при появлении в окне браузера клиента, async – асинхронная (одновременная) загрузка контента совместно с контентом шаблонных тегов с тем же маркером, sync – синхронная (последовательная) загрузка контента совместно с контентом шаблонных тегов с тем же маркером, по умолчанию отложенная загрузка не используется, обычный вывод шаблонных тегов в коде страницы;

    defer_title – текстовая строка, выводимая на месте появления загружаемого контента с помощью отложенной загрузки шаблонного тега;

    template – шаблон тега (файл modules/faq/views/faq.view.show_block_rel_template.php; по умолчанию шаблон modules/faq/views/faq.view.show_block_rel.php).

    Формат даты задается в настройках модуля.

    name= «show_block_rel» module= «faq» >

    выведет 3 вопроса, прикрепленные к текущему вопросу

    В шаблоне тега можно получить значение любого атрибута через переменную $result [ «attributes» ][ «название атрибута» ] .

    show_form – выводит форму добавления вопроса. Для правильной работы тега должна существовать страница, к которой прикреплен модуль Вопрос-Ответ.

    site_id – страница, к которой прикреплен модуль, по умолчанию выбирается одна страница;

    cat_id – категория вопросов (id категории, по умолчанию выбирается одна категория), если в настройках модуля отмечено «Использовать категории»;

    only_module – выводить форму только на странице, к которой прикреплен модуль «Вопрос-Ответ»: true – выводить форму только на странице модуля, по умолчанию форма будет выводиться на всех страницах;

    defer – маркер отложенной загрузки шаблонного тега: event – загрузка контента только по желанию пользователя при нажатии кнопки «Загрузить», emergence – загрузка контента только при появлении в окне браузера клиента, async – асинхронная (одновременная) загрузка контента совместно с контентом шаблонных тегов с тем же маркером, sync – синхронная (последовательная) загрузка контента совместно с контентом шаблонных тегов с тем же маркером, по умолчанию отложенная загрузка не используется, обычный вывод шаблонных тегов в коде страницы;

    defer_title – текстовая строка, выводимая на месте появления загружаемого контента с помощью отложенной загрузки шаблонного тега;

    template – шаблон тега (файл modules/faq/views/faq.view.form_template.php; по умолчанию шаблон modules/faq/views/faq.view.form.php).

    name= «show_form» module= «faq» >

    выведет форму добавления вопроса

    В шаблоне тега можно получить значение любого атрибута через переменную $result [ «attributes» ][ «название атрибута» ] .

    Подходы к управлению модулями в Angular (и не только)

    Понимание организации сущностей, с которыми работаешь — не то, что сразу получается у разработчика, пишущего свои первые проекты на Angular.

    И одна из проблем, к которой можно прийти — неэффективное использование Angular модулей, в частности — излишне перегруженный app модуль: создали новую компоненту, забросили в него, сервис — тоже туда. И вроде всё здорово, всё работает. Однако со временем такой проект станет тяжело поддерживать и оптимизировать.

    Благо, Angular предоставляет разработчикам возможность создавать свои модули, и ещё называет их feature модулями.

    Domain Feature Модули

    Перегруженный app модуль нужно дробить. Поэтому первое, что стоит сделать — выделить в приложении крупные куски и вынести их в отдельные модули.

    Популярный подход — разделение приложения на domain feature модули. Они призваны разделить интерфейс по признаку ключевой задачи (domain), которую выполняет каждая его часть. Примерами domain feature модулей могут быть страница редактирования профиля, страница с товарами и т.д. Проще говоря, всё, что могло бы оказаться под пунктом меню.

    Все объявления в синих рамках, а также контент других пунктов меню, заслуживают своих собственных domain feature модулей.

    Domain feature модули могут использовать неограниченное количество declarables (компоненты, директивы, пайпы), однако экспортируют только ту компоненту, что представляет UI данного модуля. Импортируются Domain feature модули, как правило, в один, больший модуль.

    Domain Feature модули обычно не объявляют внутри себя сервисы. Однако если и объявляют, то жизнь этих сервисов должна ограничиваться жизнью модуля. Достичь этого можно при помощи lazy loading’а или объявления сервисов во внешней компоненте модуля. Эти методы будут разобраны дальше в статье.

    Ленивая Загрузка

    Разделение приложения на Domain Feature модули позволит использовать lazy loading. Так, вы можете убрать из первоначального бандла то, что не нужно юзеру при первом открытии приложения: профиль пользователя, страничка товаров, страничка с фотографиями и т.д. Всё это можно подгрузить по требованию.

    Сервисы и Инжекторы

    Приложение разделено на крупные куски — модули, и некоторые из этих модулей загружаются по требованию. Вопрос: где следует объявлять глобальные сервисы? И что делать, если мы хотели бы ограничить область видимости сервиса?

    Инжекторы лениво загруженных модулей

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

    Получается, что сервисы можно объявлять в любом модуле и не беспокоиться? Не совсем так.

    Вышесказанное — правда, если в приложении используется только глобальный инжектор, однако зачастую всё несколько интереснее. Лениво загруженные модули имеют свой собственный инжектор (компоненты тоже, но об этом дальше). Почему вообще лениво загруженные модули создают свой собственный инжектор? Причина кроется в том, как работает dependency injection в Angular.

    Инжектор может пополняться новыми провайдерами до тех пор, пока он не начинает использоваться. Как только инжектор создаёт первый сервис, он закрывается для добавления новых провайдеров.

    Когда приложение запускается, Angular в первую очередь настраивает корневой инжектор, фиксируя в нём те провайдеры, которые были объявлены в App модуле и в импортированных в него модулях. Это просходит ещё до создание первых компонент и до предоставления им зависимостей.

    В ситуации, когда лениво подгружается модуль, глобальный инжектор уже много времени как был настроен и вступил в работу. Подгруженному модулю не остаётся ничего, кроме как создать собственный инжектор. Этот инжектор будет дочерним по отношению к инжектору, использовавшимся в модуле, который инициализировал загрузку. Это приводит к поведению, знакомому javascript разработчикам по цепочке прототипов: если сервис не был найден в инжекторе лениво загруженного модуля, DI фрэймворк пойдёт искать его в родительском инжекторе и т.д.

    Таким образом, лениво загруженные модули позволяют объявлять сервисы, которые будут доступны только в рамках данного модуля. Провайдеры также можно переопределять, опять же, прямо как в javascript прототипах.

    Возвращаясь к domain feature модулям, описанное поведение — один из способов ограничить жизнь объявленных в них провайдеров.

    Core Модуль

    Так всё-таки, где следует объявлять глобальные сервисы, такие как сервисы авторизации, API сервисы, Юзер сервисы и т.д.? Простой ответ — в App модуле. Однако в целях наведения порядка в App модуле (этим то мы и занимаемся), следует объявлять глобальные сервисы в отдельном модуле, получившем название Core модуль, и импортировать его ТОЛЬКО в App модуль. Результат будет тот же, как если бы сервисы были объявлены напрямую в App модуле.

    Начиная с версии 6, в ангуляре появилась возможность объявлять глобальные сервисы, никуда их не импортируя. Всё, что нужно сделать — добавить в Injectable опцию providedIn, и указать в ней значение ‘root’. Сервисы, объявленные таким образом, становятся доступными всему приложению, а потому отпадает необходимость объявлять их в модуле.

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

    Проверка на Синглтон

    Но что, если кто-то в проекте захочет импортировать Core модуль ещё куда-нибудь? Можно ли от этого защититься? Можно.

    Добавьте в Core модуль конструктор, который просит заинжектить в него Core модуль (всё верно, самого себя), и пометьте это объявление декораторами Optional и SkipSelf. Если инжектор положит в переменную зависимость, значит кто то пытается повторно объявить Core модуль.

    Использование описанного подхода в BrowserModule.

    Этот подход может использоваться как с модулями, так и с сервисами.

    Объявление Сервиса в Компоненте

    Мы уже рассмотрели способ ограничения области видимости провайдеров, используя lazy loading, но вот ещё один.

    Каждый инстанс компоненты имеет свой собственный инжектор, и для его настройки, прямо как декоратор NgModule, декоратор Component имеет свойство providers. А ещё — дополнительное свойство viewProviders. Они оба служат для настройки инжектора компоненты, однако провайдеры, объявленные каждым из способов, имеют разную область видимости.

    Для понимания разницы, нужна коротенькая предыстория.

    Компонента состоит из view и контента.

    Всё, что находится в html файле компоненты — это её view, тогда как то, что передаётся между открывающим и закрывающим тэгами компоненты, является её контентом.

    Так вот, провайдеры, добавленные в providers, доступны как во view компоненты, в которой они объявлены, так и для контента, который передан компоненте. Тогда как viewProviders, как и заложено в названии, делает сервисы видимыми только для вью и закрывает их для контента.

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

    Первый — это когда каждый новый экземпляр компоненты должен иметь свой собственный экземпляр сервиса. Например сервис, который хранит специфичные для каждого нового экземпляра компоненты данные.

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

    Например, domain feature module, отвечающий за профиль пользователя. Нужный только этой части приложения сервис мы объявим в providers самой внешней компоненты, UserProfileComponent. Теперь все declarables, которые объявлены в разметке этой компоненты, а также переданы ей в контенте, получат один и тот же экземпляр сервиса.

    Переиспользуемые Компоненты

    Что делать с компонентами, которые мы хотим переиспользовать? На этот вопрос также нет однозначного ответа, но есть наработанные подходы.

    Shared Модуль

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

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

    Такой модуль обычно имеет название SharedModule.

    При этом важно заметить, что SharedModule не должен объявлять сервисов. Или объявлять, используя forRoot подход. О нём поговорим чуть позже.

    Несмотря на то, что подход c SharedModules работает, к нему есть пара замечаний:

    1. Мы не сделали структуру приложения чище, мы просто переложили беспорядок из одного места в другое;
    2. Этот подход не смотрит в светлое будущее Angular, в котором не будет модулей.

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

    Module Per Component или SCAM (single component angular module)

    Создавая какую-либо новую компоненту, следует помещать её в свой собственный модуль. В этот же же модуль необходимо импортировать зависимости компоненты.

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

    На английском такой подход называется module per component или SCAM — single component angular module. Хотя в названии есть слово component, этот подход распространяется также на пайпы и директивы (SPAM, SDAM).

    Наверное самое значительное преимуществ данного подхода — облегчение тестирования компонент. Так как модуль, создаваемый для компоненты, экспортирует её, а также уже содержит все нужные ей зависимости, для настройки TestBed достаточно положить этот модуль в imports.

    Такой подход способствует порядку и структуре в коде проекта, а также готовит нас к будущему без модулей, где для использования одной компоненты в разметке другой нужно будет лишь объявить зависимости в директиве Component. Немного заглянуть в будущее можно через эту статью.

    Интерфейс ModuleWithProviders

    Если в проекте завёлся модуль, содержащий в себе объявление сервисов XYZ, и так получилось, что со временем этот модуль начал использоваться повсеместно, каждый импорт этого модуля будет пытаться добавить сервисы XYZ в соответствующий инжектор, что неизбежно приведёт к коллизиям. У Angular есть на этот случай набор правил, который может не соответствовать тому, что ожидает разработчик. Особенно это касается инжектора лениво загруженного модуля.

    Для избежания проблем с коллизией, Angular предоставляет интерфейс ModuleWithProviders, который позволяет прикрепить провайдеры к модулю, оставив при этом providers самого модуля нетронутым. И это именно то, что нужно в описанном выше случае.

    Стратегии forRoot(), forChild()

    Для того, чтобы сервисы точно были зафиксированы в глобальном инжекторе, модуль с провайдерами импортируется только в AppModule. Со стороны импортируемого модуля нужно лишь создать статический метод, возвращающий ModuleWithProviders, который исторически получил название forRoot.

    Методов, возвращающих ModuleWithProviders, может быть сколько угодно, и названы они могут быть как угодно. forRoot — это скорее удобная условность, чем требование.

    Например, RouterModule имеет статический метод forChild, который используется для настройки роутинга в лениво загруженных модулях.

    ТОП онлайн казино с моментальными выплатами:
    • РОКС Казино
      РОКС Казино

      1 место из-за огромных бонусов и Джекпота 100 млн!

    • СОЛ Казино
      СОЛ Казино

      Приветственный бонус 30 000 руб + за каждый депозит до 300 000 руб!

    • ПИНАП Казино
      ПИНАП Казино

      Ретро-казино с огромными бонусами!

    • ФРЭШ Казино
      ФРЭШ Казино

      Свежий дизайн и моментальные выплаты!

    Добавить комментарий