帖子列表和详情页逻辑

涉及以下接口

接口路径描述
/api/fresns/post/lists获取帖子[列表]
/api/fresns/post/detail获取帖子[单条]
/api/fresns/post/follows获取帖子关注的[列表]
/api/fresns/post/nearbys获取帖子附近的[列表]

公开模式: site_mode=public

  • 未登录
    • 1、判断帖子是否有权限条件 posts > is_allow
    • 2、无权限条件,正常输出内容;有权限条件,则直接按权限配置输出内容(百分比、按钮文字和处理插件)。
      • 百分比 post_appends > allow_proportion
      • 按钮文字 post_appends > allow_btn_name
      • 处理插件 post_appends > allow_plugin_unikey
      • 帖子列表接口只做权限验证,不做内容百分比输出的处理,因为百分比处理在「编辑器>发表内容」接口的时候已经处理完了,单条 detail 接口时以附属表内容字段处理百分比。
  • 已登录
    • 1、成员角色权限,是否有权浏览 member_roles > permission > content.view
    • 2、不输出非公开的小组帖子 groups > type_mode=2
    • 3、过滤屏蔽对象的帖子 member_shields > shield_id
      • shield_type=1 该成员发表的帖子
      • shield_type=2 发表在该小组下的帖子
      • shield_type=3 关联该话题的帖子
      • shield_type=4 该帖子
    • 4、判断帖子是否有权限条件 posts > is_allow,无权限条件,正常输出内容;有权限条件,则判断是否满足条件,不满足则按权限配置输出内容(百分比、按钮文字和处理插件)。
      • 百分比 post_appends > allow_proportion
      • 按钮文字 post_appends > allow_btn_name
      • 处理插件 post_appends > allow_plugin_unikey
      • 帖子列表接口只做权限验证,不做内容百分比输出的处理,因为百分比处理在「编辑器>发表内容」接口的时候已经处理完了。帖子单条接口 detail 以附属表内容字段处理百分比。

私有模式: site_mode=private

  • 未登录
    • 1、不输出帖子列表。
  • 已登录
    • 1、成员角色权限,是否有权浏览 member_roles > permission > content.view
    • 2、成员 members > expired_at 是否在有效期内(为空代表永久有效)。
      • 2.1、过期后内容不可见,不输出帖子列表。
      • 2.2、过期后,到期前的内容可见,输出到期日期前的帖子列表。
      • 2.3、在有效期内,全部输出。
    • 3、不输出非公开的小组帖子 groups > type_mode=2
    • 4、过滤屏蔽对象的帖子 member_shields > shield_id
      • shield_type=1 该成员发表的帖子
      • shield_type=2 发表在该小组下的帖子
      • shield_type=3 关联该话题的帖子
      • shield_type=4 该帖子
    • 5、判断帖子是否有权限条件 posts > is_allow,无权限条件,正常输出内容;有权限条件,则判断是否满足条件,不满足则按权限配置输出内容(百分比、按钮文字和处理插件)。
      • 百分比 post_appends > allow_proportion
      • 按钮文字 post_appends > allow_btn_name
      • 处理插件 post_appends > allow_plugin_unikey
      • 帖子列表接口只做权限验证,不做内容百分比输出的处理,因为百分比处理在「编辑器>发表内容」接口的时候已经处理完了。帖子单条接口 detail 以附属表内容字段处理百分比。

内容输出解析逻辑(包括评论内容)

  • 内容输出的时候,需要解析并输出对应格式的内容(无论是摘要还是全文,都要解析)。
  • 话题、链接、艾特,需要附带对应的目标链接输出,输出格式为超链接。表情输出的是图片格式。
  • 解析的链接规则参见网站引擎路径参考
  • 话题输出时
    • 如果后台设置的是「单 # 号」,但是数据库存的是「双 # 号」,则在输出时,删减结尾 # 号;如果后台设置的是「双 # 号」,但是数据库存的是「单 # 号」,则在输出时,为结尾补充 # 号。
    • 话题 {site_domain} + /hashtag/ + {hrui}
    • 如果是「单 # 号」,话题后面的空格不在 a 标签里。
    • 示例 <a href="https://abc.com/hashtag/PHP%E8%AF%AD%E8%A8%80" target="_blank">#PHP语言</a>
  • 链接输出时,如果 domain_links > link_title 字段有值,则输出格式是「链接名」和「链接」,前端显示的不是 URL,而是链接名。
    • link_url = https://tangjie.me/blog/150.html
    • link_title = Fresns 命令字扩展插件机制介绍
    • 输出的时候是 <a href="https://tangjie.me/blog/150.html" target="_blank">Fresns 命令字扩展插件机制介绍</a>
    • link_title 如果为空,输出的是 <a href="https://tangjie.me/blog/150.html" target="_blank">https://tangjie.me/blog/150.html</a>
  • 艾特输出时,显示的是成员昵称。
    • 输出地址规则 {site_domain} + / + {mname}
    • 数据库存的是 @tangjie,该成员的 mname=tangjienickname=唐杰
    • 输出的时候是 <a href="https://abc.com/tangjie" target="_blank">@唐杰</a>
    • 艾特后面的空格,不在 a 标签里。
  • 表情符不需要形成关联数据,所以发表时不解析,输出时,需要输出对应符号的表情图链接。