东莞市连易网络科技有限公司
东莞市连易网络科技有限公司
  • 网站
  • 用户
  • 购物车
  • 购物车
  • 搜索
  • 网站
  • 用户
帮助
帮助
开发文档 提及
  • 用户文档
  • 开发文档
  • API文档
  • 提及
  • 标签
  • 更多
  • 取消
  • 新建
  • +开始
  • +UI 自定义
  • +外部集成
  • -插件/框架扩展
    • -插件
      • 异常和日志记录
      • 插件生命周期
      • -插件示例
        • 使用小组件从插件渲染内容
        • 公开数据给外部源
        • 公开配置选项
        • 创建动态
        • -创建自定义应用程序和内容
          • -向内容添加核心服务支持
            • 书签
            • 审核/滥用管理
            • 提及
            • 搜索
            • +标签
            • 点赞
            • 评论
        • 基于模板的电子邮件
        • 处理事件
        • 处理内容中的嵌入文件
        • 定义权限
        • 扩展规则支持
        • 文件交互
        • 文件查看器
        • 注册模板令牌
        • 管理依赖关系
        • 管理物理文件存储
        • 翻译插件文本
        • 通知
    • +设置开发环境
    • +进程 API

提及

添加对 @mentions 的支持,用户可以将用户的注意力引导到平台的内容中。

我为什么要使我的内容支持提及?

能够提及内容可以让用户轻松访问您的内容。请记住,您应该能够提供唯一的标题,否则用户可能很难找到您的内容。

创建一个 IMentionableContentType 插件

添加对 @mentions 的支持是通过实现 IMentionableContentType 接口来完成的,该接口在 Limyee.Core.dll 的 Limyee.Extensibility.Content.Version1 命名空间中定义。

请务必注意,可以在同一 IContentType 类中实现一个或多个核心服务。

提及由三部分组成,首先返回与搜索词匹配的项目列表。

public IEnumerable<IContent> GetMentionables(int userId, string queryText, IMentionableFilter filter)
{
    var links = new List<IContent>();

    var results = LinksData.ListLinks()
            .Where(r => r.Name.ToLowerInvariant().Contains(queryText.ToLowerInvariant()))
            .ToList<IContent>();

    foreach (var result in results)
    {
        var content = LinksData.GetLink(result.ContentId);
        if (content != null)
        {
            links.Add(content);
        }
    }

    return links;
}

接下来,为您的项目添加预览。此示例返回文本字符串,但如果已实现 ITranslatablePlugin,请使用 ITranslatablePluginController 翻译结果。

public string GetMentionPreviewHtml(int userId, Guid contentId)
{
    try
    {
        var content = LinksData.GetLink(contentId);
        if (content != null)
        {
            return String.Format("{0} (Link)", content.HtmlName("Web"));
        }

        return "(deleted link)";
    }
    catch (Exception)
    {
        return "(inaccessible link)";
    }
}

最后,您必须为提及创建完整的 HTML 视图。在这里创建了一个链接,将用户重定向到您的内容,请确保在锚点标记中添加 internal-link view-application 类。

public string GetMentionViewHtml(int userId, Guid contentId)
{
    try
    {
        var content = LinksData.GetLink(contentId);
        if (content != null)
        {
            if (!string.IsNullOrEmpty(content.Url))
            {
                return string.Concat("<a href=\"",
                    Apis.Get<IHtml>().Encode(content.Url),
                    "\" class=\"internal-link view-application links\" data-linkid=\"",
                    content.ContentId, "\">", content.Name, "</a>");
            }

            return content.Name;
        }

        return "(deleted link)";
    }
    catch (Exception)
    {
        return "(inaccessible link)";
    }
}

下面是完整示例。

using System;
using System.Collections.Generic;
using System.Linq;
using Limyee.Extensibility;
using Limyee.Extensibility.Api.Version1;
using Limyee.Extensibility.Content.Version1;
using IContent = Limyee.Extensibility.Content.Version1.IContent;

namespace Samples.Links
{
    public class LinkItemContentType : IContentType, IMentionableContentType
    {
        IContentStateChanges _contentState = null;

        #region IPlugin Members

        public string Description
        {
            get { return "Items in a Links collection"; }
        }

        public void Initialize()
        {

        }

        public string Name
        {
            get { return "Link Items"; }
        }

        #endregion

        #region IContentType Members

        public Guid[] ApplicationTypes
        {
            get { return new Guid[] { ContentTypes.LinksApplicationId }; }
        }

        public void AttachChangeEvents(IContentStateChanges stateChanges)
        {
            _contentState = stateChanges;
        }

        public Guid ContentTypeId
        {
            get { return ContentTypes.LinksItemId; }
        }

        public string ContentTypeName
        {
            get { return "Links Item"; }
        }

        public IContent Get(Guid contentId)
        {
            return LinksData.GetLink(contentId);
        }

        #endregion

        #region IMentionableContentType

        public IEnumerable<IContent> GetMentionables(int userId, string queryText, IMentionableFilter filter)
        {
            var links = new List<IContent>();

            var results = LinksData.ListLinks()
                    .Where(r => r.Name.ToLowerInvariant().Contains(queryText.ToLowerInvariant()))
                    .ToList<IContent>();

            foreach (var result in results)
            {
                var content = LinksData.GetLink(result.ContentId);
                if (content != null)
                {
                    links.Add(content);
                }
            }

            return links;
        }

        public string GetMentionPreviewHtml(int userId, Guid contentId)
        {
            try
            {
                var content = LinksData.GetLink(contentId);
                if (content != null)
                {
                    return String.Format("{0} (Link)", content.HtmlName("Web"));
                }

                return "(deleted link)";
            }
            catch (Exception)
            {
                return "(inaccessible link)";
            }
        }

        public string GetMentionViewHtml(int userId, Guid contentId)
        {
            try
            {
                var content = LinksData.GetLink(contentId);
                if (content != null)
                {
                    if (!string.IsNullOrEmpty(content.Url))
                    {
                        return string.Concat("<a href=\"",
                            Apis.Get<IHtml>().Encode(content.Url),
                            "\" class=\"internal-link view-application links\" data-linkid=\"",
                            content.ContentId, "\">", content.Name, "</a>");
                    }

                    return content.Name;
                }

                return "(deleted link)";
            }
            catch (Exception)
            {
                return "(inaccessible link)";
            }
        }

        #endregion
    }
}

下面是 @mention 界面的示例。

  • 分享
  • 历史
  • 更多
  • 取消
相关
推荐
Copyright © 2021 东莞市连易网络科技有限公司. All rights reserved.
Powered by Limyee Commerce System(3.0.0). © 2014 - 2025 Limyee Inc.