Перейти к содержанию
Сайт в скором времени будет закрыт, спасибо что были с нами! ×

Поиск сообщества

Показаны результаты для тегов 'content items'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Invision Community
    • Дизайн и стилизация
    • Приложения и плагины
    • Помощь и поддержка
    • Миграция на Invision Community
    • IP.Board 3.x
    • Разработка
  • invisionbyte.ru
    • Обратная связь
    • Тестовые посты
    • Обо всём

Категории

  • Начало работы
  • Администрирование
    • Интернет-магазин (Commerce)
    • Страницы (Pages)
    • Форумы (Forums)
    • Галерея (Gallery)
    • Загрузки (Files)
    • Блоги (Blogs)
    • Пользователи
  • Модерирование
  • Кастомизация
    • Дизайн и стилизация
    • Локализация
  • Антиспам и безопасность
  • Приложения сторониих разработчиков
  • Разработчику
  • База знаний
  • Общее
    • Хостинг
    • Домены
    • Поисковая оптимизация

Категории

  • Новое сообщество
    • Лицензия
    • Системные требования
    • Установка
    • Обновление
    • Перенос с других платформ
  • Приложения
    • Форумы
    • Страницы
    • Галерея
    • Загрузки
    • Блоги
    • Календарь
    • Коммерция
  • Продвижение
    • Продвижение в социальных сетях
  • Общее использование
    • Знакомство
    • Общие настройки
    • Контент
    • Пользователи
    • Модерация
    • Авторизация через сайты
    • СЕО оптимизация
    • Управление файлами
  • Индивидуализация
    • Темы и дизайн
    • Языки и переводы
    • Редактор сообщений
    • Синтаксис шаблонов
    • CSS фреймворк
    • Javascript
    • Советы и трюки
  • Расширение возможностей
    • Конфигурация
    • Управление сервером
    • IPS Connect
  • Разработка
    • Приложения
    • Плагины
  • Сторонние приложения
    • Automation Rules

Категории

  • Темы и дизайн
  • Дополнительные возможности
  • Обновление Invision Community
  • Безопасность
  • Миграция на Invision Community
  • Ошибки

Категории

  • Русский язык для Invision Community
  • Плагины
  • Темы
  • Модули оплаты

Категории

  • Общее
  • Разработка
    • Приложения
    • Плагины
    • Расширения
  • Фреймворк
    • Ноды
    • Элементы контента
    • Комментарии
    • Отзывы
  • Пользователи и аутентификации
  • Другие возможности
    • Уведомления и E-mail
    • Формы
    • Коммерция
  • Документация разработчика
  • REST API
    • Система
    • Загрузки
    • Страницы
    • Форумы
    • Галерея
    • Календарь
    • Блоги
    • Магазин

Категории

  • Успешные истории и интервью с владельцами сообществ на Invision Community

Категории

  • Локализция Invision Community
  • Коммерция
  • Антиспам и безопасность
  • Темы и дизайн
  • Интерфейс
  • Модерирование
  • Дополнительно
  • Локализация

Блоги

  • Мой тестовый блог
  • IPS 4 и контентные проекты
  • Блог начинающего сисадмина или идеальный сервер для IPS4
  • Подробнее о IPS4
  • Продвижение городского форума на Invision Community

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


Адрес сайта

Найдено: 2 результата

  1. Введение в Content Items. Часть 1 Содержимое В некоторых областях потребуется содержимое (content) элемента. Для некоторых элементов, это будет описание, а для других, которым требуются комментарии (см. объяснение свойства $firstCommentRequired в главе 3), это будет содержимое первого комментария. Другие требования Нет Дополнительно Комментарии Что меняется после внедрения Нет Дополнительные методы, доступные после внедрения content() Возвращает содержимое. truncated( bool $oneLine=FALSE ) Возвращает содержимое в формате, в котором его можно поместить в элемент <div data-ipsTruncate> для обрезки. Как применить ЛИБО Добавьте элемент content к $databaseColumnMap с указанием колонки в базе данных, в которой содержится контент. ЛИБО Реализуйте комментарии (см. главу 3) для возвращения первого комментария. Рекомендуемое Введение Элементы контента можно помечать как рекомендуемое и отображать на главной странице или в других местах. Другие требования Нет Дополнительно Права доступа. Полномочия модератора. Что меняется после внедрения Пользователи с соответствующими правами модератора увидят инструмент для пометки таблиц элементов содержимого в качестве рекомендуемых/не рекомендуемых. Дополнительные методы, доступные после внедрения static featured( int $limit=10, string $order=‘RAND()’ ) Отображает рекомендуемое. Если включены Права Доступа, будут возвращены только те элементы, на просмотр которых есть права у вошедшего в данный момент пользователя. canFeature( \IPS\Member $member=NULL ) Возвращает логическое значение, указывающее может ли $member (вошедший пользователь, если NULL) помечать элемент как рекомендуемый. Принимает во внимание, если он уже рекомендуемый. canUnfeature( \IPS\Member $member=NULL ) Возвращает логическое значение, указывающее может ли $member (вошедший пользователь, если NULL) снимать с элемента пометку рекомендуемый. Принимает во внимание, если он уже рекомендуемый. Как применить 1. Добавить интерфейс: implements \IPS\Content\Featurable2. Добавьте элемент featured к $databaseColumnMap, указывая колонку в базе данных, которая содержит данные о том рекомендуемый элемент или нет. 3. Добавляет кнопку рекомендовать/отменить рекомендацию в шаблоне для просмотра элемента содержимого. {{if $item->canFeature()}} <a href='{$item->url()->setQueryString( array( 'do' => 'moderate', 'action' => 'feature' ) )}'>{lang="feature"}</a> {{endif}} {{if $item->canUnfeature()}} <a href='{$item->url()->setQueryString( array( 'do' => 'moderate', 'action' => 'unfeature' ) )}'>{lang="unfeature"}</a> {{endif}} Закрепление Элементы содержимого можно закрепить, чтобы они отображались в верхней части списков. Требования Контейнеры Необязательно Права модераторов Что меняется после внедрения • Закрепленные элементы будут отображаться в верхней части таблиц элементов содержимого. • Пользователи с соответствующими правами модератора увидят инструмент для пометки таблиц элементов содержимого в качестве рекомендуемых/не рекомендуемых. Дополнительные методы, доступные после внедрения canPin( \IPS\Member $member=NULL ) Возвращает логическое значение, указывающее может ли $member (вошедший пользователь, если NULL) закрепить элемент. Учитывает является ли элемент уже Рекомендуемым. canUnpin( \IPS\Member $member=NULL ) Возвращает логическое значение, указывающее может ли $member (вошедший пользователь, если NULL) отменять закрепление элемента. Учитывает является ли элемент уже Рекомендуемым. Как применить 1. Добавьте интерфейс: implements \IPS\Content\Pinnable2. Добавляет pinned элемент к $databaseColumnMap с указанием колонки в базе данных, которая содержит данные о том закреплен элемент содержимого или нет. 3. Добавляет кнопку поднять/опустить к шаблону для просмотра элемента содержимого: {{if $item->canPin()}} <a href='{$item->url()->setQueryString( array( 'do' => 'moderate', 'action' => 'pin' ) )}'>{lang="pin"}</a> {{endif}} {{if $item->canUnpin()}} <a href='{$item->url()->setQueryString( array( 'do' => 'moderate', 'action' => 'unpin' ) )}'>{lang="unpin"}</a> {{endif}}Закрыть Материалы могут быть закрыты, что означает, что в дальнейшем к ним нельзя добавлять комментарии. Другие требования Комментарии Дополнительно Права модераторов Что меняется после внедрения Заблокированные элементы больше не будут получать комментарии, если только у пользователя нет прав оставлять комментарии к заблокированным элементам.Пользователи, имеющие соответствующие права модератора, увидят инструмент для блокировки/разблокировки таблиц элементов содержимого.Дополнительные методы, доступные после внедрения canLock( \IPS\Member $member=NULL ) Возвращает логическое значение, указывающее может ли $member (пользователь, вошедший в данный момент, если NULL) заблокировать элемент. Принимает во внимание, если он уже заблокирован. canUnlock( \IPS\Member $member=NULL ) Возвращает логическое значение, указывающее может ли $member (пользователь, вошедший в данный момент, если NULL) разблокировать элемент. Учитывает, если он уже заблокирован. Как применить 1. Добавить интерфейс: implements \IPS\Content\Lockable2. Добавляет элемент locked к $databaseColumnMap с указанием колонки в базе данных, которая содержит данные о том заблокирован ли элемент содержимого или нет. Или элемент locked для текстовой колонки. 3. Добавляет кнопку поднять/опустить к шаблону для просмотра элемента содержимого: {{if $item->canLock()}} <a href='{$item->url()->setQueryString( array( 'do' => 'moderate', 'action' => 'lock' ) )}'>{lang="lock"}</a> {{endif}} {{if $item->canUnlock()}} <a href='{$item->url()->setQueryString( array( 'do' => 'moderate', 'action' => 'unlock' ) )}'>{lang="unlock"}</a> {{endif}}Скрытие / Восстановление Материалы могут быть скрыты от обычных пользователей. Это может быть использовано для запроса подтверждения от сотрудников ресурса прежде, чем определенное содержимое можно будет просматривать, и как способ для сотрудников скрыть нежелательный контент. Другие требования Нет Дополнительно КонтейнерыПолномочия модератораЧто изменится после внедрения canView(…)вернет значение "ложь" для элемента, который скрыт, если пользователь не может просматривать скрытые элементы содержимого. Это также приведет к тому, что loadAndCheckPerms(…)выдаст исключение OutOfRange, если будет загружен подобный объект.Скрытые элементы будут отображаться только тем пользователям, которые имеют права на просмотр скрытого контента.Пользователи, имеющие соответствующие права модератора, увидят инструмент для блокировки/разблокировки таблиц элементов содержимого.Контент от пользователей, который находится на премодерации, будет скрыт до тех пор, пока не будет подтвержден вручную.Дополнительные методы, доступные после внедрения hidden() Возвращает число, указывающее состояние скрытия: • -1 означает, что содержимое скрыто, но раньше оно не было скрытым. • 0 означает, что содержимое не скрыто (значение по умолчанию, обычное состояние). • 1 означает, что содержимое скрыто и было отмечено как скрытое на момент публикации. canHide( \IPS\Member $member=NULL ) Возвращает логическое значение, указывающее может ли $member (пользователь, вошедший в данный момент, если NULL) скрыть элемент. Принимает во внимание, если он уже заблокирован. canUnhide( \IPS\Member $member=NULL ) Возвращает логическое значение, указывающее может ли $member (пользователь, вошедший в данный момент, если NULL) отменить скрытие элемента. Учитывает, если он уже заблокирован. static canViewHiddenItems( \IPS\Member $member=NULL ) Возвращает логическое значение, указывающее может ли $member (пользователь, вошедший в данный момент, если NULL) просматривать скрытые элементы. Для проверки индивидуального элемента используйте canView(). Как применить 1. Добавить интерфейс: implements \IPS\Content\Hideable2. Добавьте либо элемент hidden или элемент approved к $databaseColumnMapс указанием колонки в базе данных, которая содержит данные о статусе содержимого. Элемент Значение, если не скрыт (обычный, по умолчанию) Значение, если скрыт (ранее был не скрыт) Значение, если ожидает утверждения hidden -1 1 approved 1 -1 При желании также можно добавить approved_by (чтобы хранить ID пользователя, который утвердил контент) и approved_date (чтобы хранить временную отметку утверждения контента). 3. Добавит кнопки скрыть/восстановить к шаблону просмотра содержимого: {{if $item->canHide()}} <li><a href='{$item->url()->setQueryString( array( 'do' => 'moderate', 'action' => 'hide' ) )}'>{lang="hide"}</a></li> {{endif}} {{if $item->canUnhide()}} <li><a href='{$item->url()->setQueryString( array( 'do' => 'moderate', 'action' => 'unhide' ) )}'>{{if $item->hidden() === 1}}{lang="approve"}{{else}}{lang="unhide"}{{endif}}</a></li> {{endif}} 4. Если контент, добавляемый пользователем, находится на премодерации, он по умолчанию будет скрыт. Вы можете переопределить этот метод таким образом, чтобы весь контент в определенных узлах всегда требовал подтверждения модератором. Чтобы сделать это, перезапишите метод moderateNewItems(…)- например: public static function moderateNewItems( \IPS\Member $member, \IPS\Node\Model $container = NULL ) { if ( $container and $container->bitoptions['moderation'] and !static::modPermission( 'unhide', $member, $container ) ) { return TRUE; } return parent::moderateNewItems( $member, $container ); } Теги Материалы могут помечаться тегами. Теги можно использовать для поиска разных типов данных с одними и теми же метками (тегами). Другие требования • Контейнеры Что изменится после внедрения Поле для ввода тегов будет добавлено к форме создания / редактирования. Префиксы и теги будут отображаться в таблицах содержимого. Дополнительные методы, доступные после внедрения static canTag( \IPS\Member $member=NULL, \IPS\Node\Model $container) Возвращает логическое значение, указывающее может ли $member (пользователь, вошедший в данный момент, если NULL) помечать элементы в $container. Вы можете изменить этот метод, если у вас для каждого узла стоит отдельная настройка для включения/выключения тегов. static canPrefix( \IPS\Member $member=NULL, \IPS\Node\Model $container) Возвращает логическое значение, указывающее может ли $member (пользователь, вошедший в данный момент, если NULL) добавлять префиксы к элементам в $container. Вы можете изменить этот метод, если у вас для каждого узла стоит отдельная настройка для включения/выключения префиксов tags() Возвращает массив тегов для элемента. prefix() Возвращает префикс для элемента (или NULL). Как применить 1. Добавить интерфейс: implements \IPS\Content\Tags2. Отображать теги и префиксы на странице просмотра элемента: {{if $item->prefix()}} <a href="{url="app=core&module=system&controller=tags&tag={$item- >prefix()}" seoTemplate="tags"}">{$item->prefix()}</a> {{endif}} {{if count( $file->tags() )}} <ul> {{foreach $file->tags() as $tag}} <li><a href="{url="app=core&module=system&controller=tags&tag={$tag}" seoTemplate="tags"}">{$tag}</a></li> {{endforeach}} </ul> {{endif}}Поиск Элементы содержимого можно включить в результаты поиска и в списки последних действий. Другие требования Перенаправление содержимого Теги Дополнительно КонтейнерыПрава доступаСкрытие / восстановлениеЧто изменится после внедрения Содержимое будет проиндексировано и включено в результаты поиска и последние действия. Индекс будет автоматически обновлен, когда комментарии создаются, редактируются, перемещаются, скрываются, итп., и работает автоматически и с MySQL index, и со Sphinx. Дополнительные методы, доступные после внедрения Нет Как применить Добавить интерфейс: implements \IPS\Content\SearchableРепутация Пользователи могут "лайкать" или присваивать репутацию элементам содержимого. Общая репутация отображается в профиле пользователя. Другие требования Нет Что изменится после внедрения Нет Дополнительные методы, доступные после внедрения reputation() Возвращает целое число с указанием текущей репутации элемента. canGiveReputation( int $type, \IPS\Member $member=NULL ) Возвращает логическое значение, указывающее может ли $member (пользователь, вошедший в данный момент, если NULL) присваивать $type (1 - положительная, -1 - отрицательная) репутации элементу. giveReputation( $type, \IPS\Member $member=NULL ) Присваивает элементу репутацию. Сгенерирует DomainException если $member не разрешено присваивать репутацию элементу. repGiven( \IPS\Member $member=NULL ) Возвращает целое чисто (1 - положительная, -1 - отрицательная, 0 - нет репутации), указывая какую репутацию $member (вошедший в данный момент пользователь, если NULL) присвоил элементу. Как применить 1. Добавьте интерфейс: implements \IPS\Content\Reputation2. Добавьте свойство, указывающее ключ для разделения репутации, присваиваемой данному типу содержимого, от другого типа репутации. Это может быть все, что угодно, но рекомендуется использовать название колонки в таблице вашей базы данных (с префиксом), в которой хранится ID. public static $reputationType = 'item_id';3. Добавляет кнопки репутации на страницу, на которой отображается ваш элемент: {template="reputation" app="core" group="global" params=“$item"} Подписка Пользователи могут следить за контейнерами и получать уведомления, когда к ним добавляются новые элементы содержимого. Требования КонтейнерыСодержимоеЧто изменится после внедрения После публикации нового элемента содержимого, пользователи, которые подписаны на узел получат уведомление. Если контент стоит на премодерации, уведомления будут отправлены после того, как содержимое будет подтверждено модератором. Дополнительные методы, доступные после внедрения static containerFollowers( \IPS\Node\Model $container, int $privacy=3, array $frequencyTypes=array( ‘immediate’, ‘daily’, ‘weekly ), array $limit=array( 0, 25 ), string $order=‘name’ ) Возвращает объект \IPS\Db\Select, который может повторяться для получения данных о том, какие пользователи подписаны на $container. См. доступные варианты в phpDocs. $privacy является побитовым значением, использующим константы \IPS\Content\FOLLOW_* - значение по умолчанию 3, включает общедоступную и анонимную подписку. Как применить 1. Добавить интерфейс: implements \IPS\Content\Followable2. Добавляет следующую кнопку на страницу, где Вы отображаете элементы содержимого в узле: {template="follow" app="core" group="global" params=“‘yourApp’,’YourCNodeClass’, $node->_id, \IPS\yourApp \YourContentClass::containerFollowers( $node )->count( TRUE )"}Просмотры страниц Элементы Содержимого могут автоматически отслеживать сколько раз они были просмотрены. Требования Нет Что изменится после внедрения Когда просматривается материал, колонка в базе данных, которая содержит количество просмотров, будет обновляться. stats()выдаст элемент, содержащий количество просмотров. Дополнительные методы, доступные после внедрения Нет Как применить 1. Добавить интерфейс: implements \IPS\Content\Views2. Добавляет элемент views к $databaseColumnMap с указанием колонки в базе данных, которая содержит количество просмотров. 3. Убедитесь, что контроллер вызывает parent::manage()в начале метода manage() Поделиться ссылками Элементы содержимого могут предоставлять ссылки, чтобы поделиться материалами в социальных сетях. Другие требования Нет Что изменится после внедрения Нет Дополнительные методы, доступные после внедрения sharelinks() Возвращает массив ссылок для обмена. Как применить 1. Добавить интерфейс: implements \IPS\Content\Shareable2. Отображать ссылке где-то в Вашем шаблоне: {template="sharelinks" app="core" group="global" params="$item"}Жалобы На элементы содержимого можно жаловаться модераторам. Другие требования Содержимое Что изменится после внедрения Нет Дополнительные методы, доступные после внедрения canReport( [$member] ) Проверяет может ли пользователь (либо какой-то определенный, или вошедший в данный момент) жаловаться на контент, учитывая разрешено ли его группе отправлять жалобы, могут ли они просматривать содержимое, являются ли они автором или отправляли ли они уже жалобу на данный элемент содержимого. report( $reportContent ) Отправляет жалобу Как применить 1. Добавить интерфейс: implements \IPS\Content\ReportCenter2. Добавляет новые свойства для определения названия класса CSS для представления Вашего элемента содержимого при просмотре жалоб. public static $icon = 'icon';3. Отображает ссылку где-то в вашем шаблоне. Вы не должны вызывать canReport( ), чтобы проверить, есть ли у пользователя права отправлять жалобу, так как это метод средней интенсивности. Тем не менее, вы можете включить некоторые базовые проверки - что пользователь может отправлять жалобы, не является автором, итп. Например: {{if !\IPS\Member::loggedIn()->group['gbw_no_report'] and $item->author()->member_id != \IPS\Member::loggedIn()->member_id }} <a href='{$item->url('report')}' data-ipsDialog data- ipsDialog-size='narrow' data-ipsDialog- title="{lang="report_post"}" data-ipsDialog- flashMessage="{lang="node_error"}" title='{lang="report_post"}'><i class='icon-exclamation-sign'></i>&nbsp; {lang="report_post"}</a> {{endif}} Маркеры прочитанного Элементы содержимого могут содержать данные о том, какие пользователи уже прочитали их. Требования Нет Дополнительно Контейнеры Комментарии Что изменится после внедрения Когда просматривается элемент, то он будет помечен как прочитанный для конкретного пользователя. Дополнительные методы, доступные после внедрения static containerUnread( \IPS\Node\Model $container, \IPS\Member $member=NULL ) Возвращает логическое значение, указывающее может ли данный контейнер (или его дочерний элемент) содержать непрочитанные элементы. static markContainerRead( \IPS\Node\Model $container, \IPS\Member $member=NULL ) Помечает все элементы в контейнере (также и дочерние) как прочитанные. unread( \IPS\Member $member=NULL ) Возвращает 0, если элемент прочитан; -1 если не прочитан и никогда не был прочитан; или 1 если не прочитан, но был прочитанным ранее (применимо только при совместном использовании с комментариями). Если $member равен NULL, будет использовать вошедшего в данный момент пользователя. markRead( \IPS\Member $member=NULL ) Помечает элемент как прочитанный пользователей $member (пользователь, вошедший в данный момент, если NULL). timeLastRead( \IPS\Member $member=NULL ) Возвращает объект \IPS\DateTime, указывающий, когда $member (пользователь, вошедший в данный момент, если NULL) в последний раз прочитал элемент. Как применить 1. Добавить интерфейс: implements \IPS\Content\ReadMarkers2. Добавьте элемент updated к $databaseColumnMap с указанием колонки в базе данных, которая соержит либо временную отметку о том, когда в последний раз был обновлен контент. если только Вы не используете комментарии или обзоры, в этом случае нужно использовать last_comment/ last_review. 3. Убедитесь, что контроллер вызывает parent::manage()в начале метода manage(), или иным образом убедитесь, что Вы вызываете markRead()вручную при просмотре элемента содержимого. В целях использования containerUnread() и markContainerRead() ваши контейнеры должны работать со следующими методами (см. раздел Контейнеры): get items()get comments()setLastComment()getLastCommentTime()Опросы Пользователи могут добавлять опросы к элементам содержимого. Другие требования Нет Что изменится после внедрения При создании или редактировании элемента содержимого, появится новая вкладка, на которой пользователь сможет создать опрос. Дополнительные методы, доступные после внедрения static canCreatePoll( \IPS\Member $member \IPS\Node\Model $container ) Возвращает логическое значение, указывающее может ли пользователь создавать опрос в этом контейнере ($container будет NULL если ваш элемент содержимого не использует данную переменную). Вы можете изменить этот метод, чтобы добавить отдельные настройки опросов для каждого контейнера. getPoll() Возвращает объект \IPS\Poll, связанный с элементом содержимого, либо NULL если его нет. Как применить 1. Добавить интерфейс: implements \IPS\Content\Polls2. Добавьте элемент poll к $databaseColumnMap с указанием колонки в базе данных, которая содержит ID опроса. 3. Отображать опрос где-то в Вашем шаблоне: {$item->getPoll()|raw}При желании, ваш класс может следить за тем, когда кто-то голосует в опросе. Для осуществления: 1. Добавить интерфейс: implements \SplObserver2. Добавьте метод update который делает все что нужно сделать, когда в опросе появляется новый голос. Он получит объект \IPS\Poll в качестве субъекта. 3. При отображении вашего элемента, присоединит его к опросу: if ( $poll = $topic->getPoll() ) { $poll->attach( $item ); }Рейтинг Пользователи могут оценивать элементы содержимого (по шкале от 1 до 5). Это следует использовать только в том случае, если не используются обзоры (см. Главу 4). Другие требования Нет Что изменится после внедрения Нет Дополнительные методы, доступные после внедрения canRate( \IPS\Member $member = NULL ) Возвращает логическое значение, указывающее может ли вошедший в данный момент пользователь выставлять оценку элементу. averageRating() Возвращает средний рейтинг элемента содержимого. rating() Отображает статистику с указанием текущего среднего рейтинга. Если в настоящее время вошедший пользователь может выставлять оценку, он сможет нажать на звёздочки для выставления оценки. Как применить 1. Добавить интерфейс: implements \IPS\Content\Ratings2. Дополнительно можно добавить следующие элементы к $databaseColumnMap (добавление либо rating_average или rating_total и rating_hits поможет избежать необходимости запрашивать средний рейтинг при отображении формы): rating_average, для текущего среднего рейтингаrating_total, для общего показателя всех рейтинговrating_hits, сколько раз оценивали данный элемент3. Отображение рейтинга в вашем шаблоне: {$item->rating()|raw}Встраивание Когда URL-адрес вашего контента публикуется еще где-то в сообществе, ссылку можно автоматически заменить на превью содержимого. Другие требования Перенаправление Что изменится после внедрения Когда URL-адрес вашего контента публикуется еще где-то в сообществе, ссылка будет заменена на превью содержимого. Дополнительные методы, доступные после внедрения Нет Как применить 1. Убедитесь, что URL вашего контента содержит параметр "id", который является основным ID контента. Если это не так, вам потребуется изменить метод loadFromUrl в классе (это определено в \IPS\Patterns\ActiveRecord): public function loadFromUrl( \IPS\Http\Url $url ) { return static::load( ... ); }2. Добавить интерфейс: implements \IPS\Content\Embeddable3. Для получения встраиваемого контента, будет вызван URL элемента с “&do=embed” в конце ссылки. В предварительно просмотре встраиваемого содержимого убедитесь, что получили нужный результат. Введение в Content Items. Часть 1
  2. Модель Скелет <?php namespace IPS\yourapp; class _YourClass extends \IPS\Content\Item { /** * @brief Multiton Store */ protected static $multitons; /** * @brief Default Values */ protected static $defaultValues = NULL; /** * @brief Application */ public static $application = 'yourapp'; /** * @brief Module */ public static $module = 'yourmodule'; /** * @brief Database Table */ public static $databaseTable = 'table'; /** * @brief Database Prefix */ public static $databasePrefix = 'prefix_'; /** * @brief Database Column Map */ public static $databaseColumnMap = array( 'author' => 'author' ); /** * @brief Title */ public static $title = ‘thing’; /** * Get URL * * @param string|NULL $action Action * @return \IPS\Http\Url */ public function url( $action=NULL ) { $url = \IPS\Http\Url::internal( ... ); if ( $action ) { $url = $url->setQueryString( 'do', $action ); } return $url; } } Введение Модель Элемента Содержимого (Content Item) представляет собой контент, созданный пользователями (например, в IP.Board тема является элементом содержимого). Если Вы добавляете дополнительные функции для Элементов Содержимого, то Вы будете их добавлять и редактировать в этом скелетоне. Наследование Ваша модель расширяет количество классов. В свою очередь, они: - \IPS\Content\Item Обеспечивает функции элементов содержимого. Он содержит весь код для различных дополнительных функций элементов содержимого, которые вы сможете активировать, добавив свойства и интерфейсы к своей модели. \IPS\Content Обеспечивает небольшое количество функций, общих и для моделей Элемента Содержимого, и для моделей Комментария к Содержимому (пояснено позже), например можно узнать автора и работать с $databaseColumnMap. \IPS\Patterns\ActiveRecord Обеспечивает функции для загрузки элементов из базы данных, работы с их свойствами, их сохранения и удаления. Необходимые свойства string $application; Ключ приложения, к которому принадлежит Элемент Содержимого. string $module; Ключ модуля, к которому принадлежит Элемент Содержимого. array $multitons array $defaultValues; Простые требования \IPS\Patterns\ActiveRecord - Вам не нужно делать ничего кроме как определить их. string $databaseTable Название таблицы базы данных, где хранится ваш Элемент Содержимого. string $databasePrefix Если все колонки в таблице вашей базы данных начинаются с одного и того же префикса, Вы можете определить его здесь, и тогда Вам не потребуется указывать его каждый раз, когда Вы будете искать значение в колонке. Важно, чтобы в таблице вашей базы данных была колонка {$databasePrefix}id, содержащая числовое значение первичного ключа. array $databaseColumnMap Функции, предоставляемые более высокими классами вашей модели, будут изучать этот массив на предмет того что хранится в определенных колонках базы данных. Обязательные элементы: author должен содержать название колонки (без $databasePrefix), которая содержит ID пользователя, который опубликовал контент.title должен содержать название колонки (без $databasePrefix), которая содержит заголовок контента.date должна содержать название колонки (без $databasePrefix), которая содержит unix-временную отметку о том, когда был создан контент.ip_address должен содержать название колонки (без $databasePrefix), которая содержит IP адрес пользователя, который опубликовал контент.string $title Ключ для языковой строки, который описывает чем является ваш элемент содержимого (например, "Тема", "Файл", "Изображение", "Событие", и т.д.) Имеющиеся методы В дополнение к методам, предоставляемым \IPS\Patterns\ActiveRecord (что точно так же работает и для Узлов), доступно несколько дополнительных методов: static getItemsWithPermission( ... ) Получает элементы содержимого. См. phpDocs для полной информации. mapped( string $key ) Возвращает значение столбца, заданного $databaseColumnMap. author() Получает объект \IPS\Member для пользователя, который опубликовал контент. Например: $item = YourClass::load( 1 ); $user = $item->author(); echo $user->name; canView() Возвращает логическое значение, указывающее может ли $member (NULL, если вошедший в данный момент пользователь) просматривать элемент содержимого. По-умолчанию будет возвращать значение TRUE, но на это влияет тот факт, включены ли Права доступа или Скрытие. canEdit( \IPS\Member $member ) Возвращает логическое значение, указывающее может ли $member (NULL если вошедший в данный момент пользователь) редактировать элемент содержимого. canDelete( \IPS\Member $member ) Возвращает логическое значение, указывающее может ли $member (NULL если вошедший в данный момент пользователь) удалить элемент содержимого. static modPermission( $type, \IPS\Member $member = NULL, \IPS\Node\Model $container = NULL ) Возвращает логическое значение, указывающее имеет ли $member (пользователь, вошедший в данный момент, если NULL) права для выполнения действия, указанного $type в узле, указанном $container (если NULL, будет проверять есть ли у них права на всех узлах). Приемлемые значения для $type: editdeletemovefeature (если разрешено Рекомендуемое)unfeature (если разрешено Рекомендуемое)pin (если разрешено Закрепление)unpin (если разрешено Закрепление)lock (если разрешена Блокировка)unlock (если разрешена Блокировка)hide (если разрешено Скрытие / Восстановление)unhide (если разрешено Скрытие / Восстановление)view_hidden (если разрешено Скрытие / Восстановление)modAction( $action, \IPS\Member $member = NULL ) Выполняет действия модератора, указанные в $action. Сгенерирует OutOfRangeException если $member (вошедший на данный момент пользователь, если NULL) не имеет права на совершение данного действия. Контроллер Скелетон namespace IPS\yourapp\modules\front\yourmodule; class _yourcontroller extends \IPS\Content\Controller { } Введение Контроллер, сразу после того как определен, дает пользователям возможность удалять содержимое, если вы присоедините “&do=delete&id=X” к URL, необходимому для доступа к контроллеру (где “X” - ID номер). Он будет автоматически проверять есть ли у пользователя права на выполнение заданного действия (что, по умолчанию, правдиво только в том случае, если пользователь является модератором с правами на удаление всего контента). Если вы добавляете дополнительные функции к своему Элементу Содержимого, контроллер будет выполнять больше действий. Естественно, вы также добавите собственные методы в целях содействия фактическому отображению содержимого. Отображение таблицы Вы можете использовать класс IPS\Helpers\Table\Content для отображения списка всех элементов содержимого в узле. $table = new \IPS\Helpers\Table\Content( 'IPS\yourApp\YourClass', $node->url(), NULL, $node ); \IPS\Output::i()->output = $table;Таблица будет автоматически разбита постранично и будет показывать только те элементы, на просмотр которых есть права у пользователей. Если вы хотите отобразить элементы по-другому, вы можете указать пользовательский шаблон для использования: $table->rowsTemplate = array( \IPS\Theme::i()->getTemplate( 'yourTemplateGroup' ), 'yourTemplate' );См. пример в шаблоне по умолчанию (core —> front —> tables —> rows). Создание формы добавления публикации Вы можете создать форму для пользователей, чтобы они отправляли элементы просто вызывая метод create(): \IPS\Output::i()->output = \IPS\yourApp\YourClass::create( $node ); Вы должны передать узел, в котором создается элемент содержимого (или NULL, если ваши элементы содержимого не зависят от узлов или если вы добавите элемент в форме отправки), и метод будет автоматически обрабатывать отображение формы, создание элемента и перенаправление. Формы элементов для отображения получаем из метода formElements(array $values, \IPS\Node\Model $node), который вы можете перезаписать для добавления дополнительных элементов формы (они также будут отображаться в форме редактирования). Он автоматически будет включать элементы для заголовка, тегов (если включен - см. раздел Теги) и первого комментария (если включены комментарии, то первый комментарий является обязательным - см. главу 3); поэтому убедитесь, что вы вызываете метод в родительском классе и не перезапишете это. Названия элементов формы имеют префикс статичного свойства $formLangPrefix (которое является пустой строкой, если не переопределено) - таким образом, вы можете использовать это для настройки заголовков, используемых в элементах формы. Есть несколько методов, которые вы также можете переопределить для выполнения действий в различных точках процесса создания: canCreate( \IPS\Member $member, \IPS\Node\Model $container=NULL, bool $showError=FALSE ) Даже прежде чем будет отображена эта форма, запускается этот метод для проверки может ли пользователь создавать элемент в данном узле. Большая часть проверки прав доступа выполняется автоматически, так что вам обычно не нужно переопределять этот метод, если только нет конкретных особенностей (например, в мессенджере можно установить, чтобы пользователи могли отправлять только определенное количество сообщений в день - так что этот пункт проверяется в данном методе внутри мессенджера). processBeforeCreate( array $values ) Этот метод запускается после того как был создан объект и установлены значения по умолчанию, такие как автор, дата и любые другие поля, которые могут быть установлены в силу того, что имеют тот же ключ, как и колонка базы данных, но перед тем как элемент добавлен в базу данных. Он получает значения из формы. processForm( array $values ) Этот метод запускается сразу же после processBeforeCreate(). Он отличается от processAfterCreate() в том, что работает и для внесения изменений, и для добавления новых пунктов. Вы должны использовать его для установки любых полей, добавленных в formElements( ), которые более сложные, чем просто настройка прямого значения (что будет сделано автоматически). По умолчанию, метод устанавливает заголовок, теги (если включены - см. раздел Теги) и другие данные, поэтому убедитесь, что вызываете метод в родительском классе и не перезапишите данную настройку. processAfterCreate( \IPS\Content\Comment $comment=NULL, array $values ) Этот метод запускается после того как элемент содержимого был вставлен в базу данных и завершена вся обработка, включая создание первого комментария (если включено, см. главу 3). Если применимо, он получается объект для первого комментария и значения из формы. Заметки Подсчет постов Количество постов будет автоматически увеличиваться, когда пользователь будет публиковать элемент содержимого. Это может быть нежелательным, особенно если ваши элементы содержимого являются просто контейнерами для комментариев, что также увеличивает количество постов (как тем в IP.Board). Вы можете отключить это поведение при помощи свойства: public static $incrementPostCount = TRUE;Контейнеры Введение Элементы Содержимого, которые принадлежат к Узлам, могут определять эту взаимосвязь. Другие требования Нет Что меняется после внедрения Нет Дополнительные методы, доступные после внедрения container() Возвращает объект контейнера. canMove( \IPS\Member $member=NULL ) Возвращает логическое значение, указывающее может ли $member (пользователь, вошедший в данный момент, если NULL) перемещать элемент в другой контейнер. move( \IPS\Node\Model $container ) Перемещает элемент в другой контейнер. Дополнительные методы, доступные для класса контейнера после внедрения get_items() get_comments() get_reviews() get_unapprovedItems() get_unapprovedComments() get_unapprovedReviews() set_items( $val ) set_comments( $val ) set_reviews( $val ) set_unapprovedItems( $val ) set_unapprovedComments( $val ) set_unapprovedReviews( $val ) Получает/устанавливает количество (подтвержденных) элементов/комментариев/обзоров и количество неподтвержденных. Подтвержденный/неподтвержденный применимо только в том случае, если содержимое можно скрыть (объяснено далее). По умолчанию, все get_ методы возвращают NULL и set_ методы ничего не делает. Вы можете изменить их, если вашему контейнеру необходимо отслеживать номера. Для того чтобы неподтвержденные комментарии/обзоры надежно обследовались, ваши элементы содержимого должны иметь элементы “unapproved_comments” или “unapproved_reviews” в колонках базы данных (см. главу 3). setLastItem( \IPS\Content\Item $item ) setLastComment( \IPS\Content\Comment $comment ) setLastReview( \IPS\Content\Review $review ) Эти методы вызываются автоматически при публикации нового элемента/комментария/обзора. По умолчанию, они ничего не делают, но вы можете изменить их, если вашему контейнеру необходимо отслеживать последний элемент/комментарий/обзору внутри него. В некоторых случаях, передаваемая переменная будет NULL, и в этом случае вы должны вручную извлечь последний элемент/комментарий/обзор. Эти методы должны иметь соответствующие настройки, чтобы после применения вызывать такой же метод во всех дочерних узлах. getLastCommentTime() Если используется setLastComment( ), этот метод можно использовать в сочетании чтобы вернуть объект \IPS \DateTime, отображающей время, когда был опубликован элемент, комментарий или обзор. Используется для считывания маркировки. Как применить 1. Добавьте новое свойство: /** * @brief Node Class */ protected static $containerNodeClass = 'IPS\yourapp\YourNodeClass';2. Добавьте элемент container к $databaseColumnMap с указанием колонки в базе данных, которая содержит ID контейнера. Права доступа Введение Элементы содержимого могут автоматически проверять есть ли у пользователя права на выполнение определенных действий, проверив контейнер. См. главу 1 для получения дополнительной информации об определении прав доступа в Узлах. Другие требования Контейнеры Что меняется после внедрения canView(…)вернет "ложь" для элемента внутри узла, если у пользователя нет прав на его просмотр. Это также приведет к тому, что loadAndCheckPerms(…)выдаст исключение OutOfRange, если будет загружен подобный объект.Везде, где функции что-либо выполняют, будут проверяться права доступа. Например, canCreate(... ) теперь вернет false, если у пользователя нет прав на создание элементов содержимого в указанном узле.getItemsWithPermission(…)теперь будет возвращать только те элементы, которые дозволено просматривать вошедшему в данный момент пользователю (или если у него есть иные права доступа, указанные в параметрах).Дополнительные методы, доступные после внедрения can( string $permission[, mixed $member ] ) Проверяет есть ли у пользователя права, необходимые для выполнения указанного действия. Действие должно совпадать со значением статичного свойства $permissionMap класса контейнера. $member может быть либо NULL (что будет проверять права доступа вошедшего в данный момент пользователя), или \IPS\Member или объектом \IPS\Member\Group. permId() Возвращает ID числового значения прав доступа. Как применить 1. Добавьте интерфейс: implements \IPS\Content\PermissionsПеренаправление содержимого Введение Некоторые функции, такие как предупреждения, являются правами модератора и обрабатываются централизованно и автоматически. Для регистрации ваших элементов содержимого в ядре, вам нужно создать простой файл расширения, называемый Content Router . Другие требования Контейнеры Что меняется после внедрения При создании модератора, администраторы смогут настроить права модератора для определенных элементов содержимого.При просмотре профиля пользователя, отображаемый весь контент, опубликованный этим пользователем, будет включать ваши элементы содержимого.Если у вас включены скрытые элементы содержимого, при просмотре панели управления администратора будет показан весь скрытый контент из вашего приложения.Когда модератор дает пользователю предупреждение, если это предупреждение выдано вследствие элемента содержимого, то тогда контент будет связан с предупреждением.При восстановлении количества постов пользователя, будут считать ваши элементы содержимого.При удалении всего контента, опубликованного пользователем, будут считать ваши элементы содержимого.Дополнительные методы, доступные после внедрения Нет Как применить 1. Создайте новое расширение ContentRouter в своем приложении, используя следующий код: namespace IPS\yourApp\extensions\core\ContentRouter; class _YourClass extends \IPS\Content\ModeratorPermissions { public $classes = array( 'IPS\yourApp\YourContentItemClass' ); } 2. Добавьте свойство $modPerm к своей модели Узла с ключом, который будет использоваться как ключ для хранения узлов, на которые модератор обладает правами доступа (любыми). Создать языковую строку с таким же ключом и значением, представляющем как называются Ваши узлы (например, "Категории"). 3. Добавьте языковые строки для каждого из доступных действий модератора следующим образом: can_<action>_<title> Где “<title>” - это ключ, определяемый статичным свойством $title в вашей модели элемента содержимого. Если Ваши элементы содержимого поддерживают комментарии, повторите все действия, которые можно выполнить с комментариями (edit, delete, hide, unhide, view_hidden), где “<title>” - это ключ, определенный статичным свойством $title в вашей модели комментариев к контенту. Введение в Content Items. Часть 2
×
×
  • Создать...

Важная информация

Используя наш сайт вы соглашаетесь с нашей Политикой конфиденциальности