帮助首页 > 网站操作说明 · 8. 前端展示操作说明 > 8.2 资讯 · 浏览与发布操作说明

8.2 资讯 · 浏览与发布操作说明

资讯操作及逻辑流程说明

适用项目:baoan / ba
最后更新:2026-06-23
背景:早期商家资讯写入 by_shop_news,后统一迁移至 by_article;部分模块仍读写旧表,已在本轮修复中收敛。

1. 数据表与模型

模型物理表主键说明
ArticleModelby_articlearticle_id统一资讯主表(系统资讯 + 商家资讯)
ShopnewsModelby_shop_newsnews_id旧商家资讯表(历史数据,逐步废弃写入)
ArticlecateModelby_article_catecate_id资讯分类(与 Shopcate 公司分类无关)
ArticlecommentModelby_article_commentcomment_id评论
ArticlephotoModelby_article_photos附图

1.1 by_article 关键字段

字段含义
article_id主键,前台链接统一使用
shop_id0 = 系统/平台资讯;>0 = 某商家资讯
user_id发布者(会员/员工路径会写入)
cate_id资讯分类 ID(by_article_cate
city_id / area_id城市/区域
audit0 待审核,1 已审核
closed0 正常,1 软删除
news_id迁移桥接:旧 by_shop_news.news_id;新数据一般为 NULL
title / profiles / details / photo标题、简介、正文、缩略图

2. 资讯类型划分

┌─────────────────────────────────────────────────────────┐
│                    by_article(统一表)                    │
├────────────────────────┬────────────────────────────────┤
│ shop_id = 0            │ shop_id > 0                     │
│ 系统/平台资讯           │ 商家资讯                         │
│ 总后台 Article 发布     │ 商家/员工/会员/分销 发布           │
│ 全站资讯频道展示        │ 商家主页资讯 Tab 展示             │
└────────────────────────┴────────────────────────────────┘

3. 发布入口与写入逻辑

3.1 商家后台(主路径,已迁移)

文件: Banyan/Lib/Action/Merchant/NewsAction.class.php

操作写入表初始状态
新增by_articleaudit=0,需总后台审核
编辑by_article保持原审核状态
删除软删 closed=1(如有)
  • 自动填充:shop_idcity_idarea_idsource=公司名称
  • 分类使用 资讯分类 Articlecate,不是公司分类 Shopcate
  • 推送(短信/微信/站内信/邮件)使用 article_idsource=article

3.2 总后台

模块文件说明
系统资讯Backstage/ArticleActionshop_id 可为 0
公司资讯Backstage/ShopnewsAction实际读写 by_article,UI 名称仍为 shopnews
审核article/auditshopnews/audit设置 audit=1

3.3 员工 / 分销后台(已修复)

文件: Worker/NewsActionDistributors/NewsAction

  • 修复前: 双写 Article + Shopnews,成功条件绑定旧表 → 常报「操作失败」
  • 修复后: 仅写 by_articleShopfavorites.last_news_idarticle_id
模块新增默认 audit
Worker1(员工直接通过)
Distributors0(待审核)

3.4 会员中心

文件: Members/NewsAction.class.php

  • 写入 by_articleaudit=0
  • 推送已改为 source=article

3.5 仍使用旧表的路径(待后续迁移)

模块文件状态
分站/Being 公司资讯Substation/ShopnewsActionBeing/ShopnewsAction仍写 by_shop_news
PC Seller 频道Home/SellerAction仍读 by_shop_news

4. 审核与可见性规则

4.1 前台列表(公开)

统一条件:

closed = 0 AND audit = 1

可选附加:city_idcate_idshop_id

4.2 详情页(已加固)

方法: ArticleModel::canView($detail, $uid)

条件是否可见
closed != 0
audit = 1是(公开)
audit = 0 且当前用户是作者是(预览)
audit = 0 且当前用户是该公司管理员是(预览)
其他

应用位置:

  • WAP:Wap/NewsAction::detailWap/ShopAction::news_detail
  • PC:Home/NewsAction::detail

4.3 商家后台列表

仅按 shop_id 过滤,包含未审核文章,便于商家自查。


5. 前端展示路径

5.1 全站资讯

列表详情
WAP/wap/news/indexnews/load/wap/news/detail/article_id/{id}
PC/home/news/index/home/news/detail/article_id/{id}

5.2 商家资讯

列表详情
WAP/wap/shop/news/shop_id/{id}newsload/wap/shop/news_detail/article_id/{id}
PC/home/shop/news/shop_id/{id}跳转全站 news/detail 或商家页内链

商家详情页首页块也会拉取该 shop_id 下最新资讯(audit=1, closed=0)。

5.3 首页资讯块

数据源条件
WAP 首页Wap/IndexActionclosed=0, audit=1
PC 首页Home/index/index.html calldataclosed=0 AND audit=1(已修复)

6. 推送逻辑

服务: Banyan/Lib/Service/PushService.class.php

商家/会员点击推送
    → pushArticle(article_id, channels, { source: 'article' })
    → loadArticleRecord 读 by_article
    → buildArticleUrl 生成链接:
         shop_id > 0  → /wap/shop/news_detail/article_id/{id}
         shop_id = 0  → /wap/news/detail/article_id/{id}

修复前问题: source=shopnews 时先用 article_id 查旧表,链接也用 news_id 格式,导致推送打不开。


7. 关注商家与未读资讯

表: by_shop_favorites

字段含义
last_news_id该公司最新资讯 ID(新数据存 article_id
read_id用户已读到的资讯 ID

文件: Wap/FavoritesAction.class.php

  • 列表加载:优先 Article::itemsByIds,找不到再降级 Shopnews(兼容旧数据)
  • 读文章:先查 Article,再查 Shopnews
  • 修复了 read()$new_id 未定义 bug

8. 完整流程图

                    ┌──────────────┐
                    │  发布入口     │
                    └──────┬───────┘
           ┌───────────────┼───────────────┐
           ▼               ▼               ▼
    Merchant/News   Backstage/Article  Worker/News
    Members/News    Backstage/Shopnews Distributors/News
           │               │               │
           └───────────────┼───────────────┘
                           ▼
                  ┌─────────────────┐
                  │   by_article    │
                  │ audit=0/1       │
                  │ shop_id 0或>0   │
                  └────────┬────────┘
                           │
              ┌────────────┼────────────┐
              ▼            ▼            ▼
        总后台审核    前台列表/详情   推送/关注
        audit→1      audit=1 公开    PushService

9. 历史迁移说明

9.1 为什么要统一

  • by_shop_news 仅服务商家,系统资讯在 by_article,两套表导致:

- 首页/全站频道无法统一排序

- 推送、收藏、SEO 链接分裂

- 后台「公司资讯」与「系统资讯」维护成本高

9.2 迁移策略

  1. 新数据: 全部写 by_article,不再写 by_shop_news
  2. 旧数据: by_article.news_id 保留对旧表引用;读取侧兼容降级
  3. 字段 last_news_id 语义改为存 article_id(字段名暂保留,避免改表)

9.3 建议的数据库迁移 SQL(可选,运维执行)

-- 将尚未迁入 article 的 shop_news 补录(示例,执行前请备份)
INSERT INTO by_article (
  news_id, shop_id, cate_id, city_id, area_id, source, title, keywords,
  profiles, photo, details, audit, closed, create_time, create_ip, views
)
SELECT
  n.news_id, n.shop_id, n.cate_id, n.city_id, n.area_id, n.source, n.title, n.keywords,
  n.intro, n.photo, n.detail, n.audit, n.closed, n.create_time, n.create_ip, n.views
FROM by_shop_news n
LEFT JOIN by_article a ON a.news_id = n.news_id
WHERE a.article_id IS NULL;

10. 本轮已修复 Bug 清单

#问题修复
1Worker/分销发布报失败但 Article 已插入去掉 Shopnews 双写
2Worker/分销编辑报「更新公司文章失败」去掉 update_shop_news
3推送链接打不开source=article;商家链走 shop/news_detail
4关注商家看不到新资讯Favorites 改读 Article,兼容旧表
5创建时 city 被写成 cate_idMerchant/Members 删除错误字段
6PC 首页显示未审核资讯calldata 加 audit=1
7未审核资讯可通过 URL 访问ArticleModel::canView
8WAP/PC 商家资讯列表缺 closedclosed=0
9随机推荐取未审核稿ArticleModel::rands audit 改为 1
10商家编辑无 shop 归属校验Merchant edit 加 shop_id 检查

11. 运维与测试清单

发布测试

  1. 商家后台新增资讯 → 后台列表可见,audit=0
  2. 总后台审核通过 → 前台商家资讯 Tab、全站频道可见
  3. 员工后台新增 → 直接 audit=1 可见(Worker 权限开启时)

推送测试

  1. 商家后台点「微信推送」→ 链接为 /wap/shop/news_detail/article_id/xxx
  2. 微信内打开链接正常显示

关注测试

  1. 用户关注商家 → 发布新资讯 → 关注列表显示最新标题
  2. 点击阅读 → read_id 更新,未读标记消失

回归注意

  • by_shop_news 纯数据仍可通过 Favorites 降级读到
  • 分站/Being/Seller 频道如需完全统一,需单独排期改读 Article

12. 相关文件索引

类型路径
模型Banyan/Lib/Model/ArticleModel.class.php
商家发布Banyan/Lib/Action/Merchant/NewsAction.class.php
员工发布Banyan/Lib/Action/Worker/NewsAction.class.php
推送Banyan/Lib/Service/PushService.class.php
WAP 全站Banyan/Lib/Action/Wap/NewsAction.class.php
WAP 商家Banyan/Lib/Action/Wap/ShopAction.class.php
PC 全站Banyan/Lib/Action/Home/NewsAction.class.php
关注未读Banyan/Lib/Action/Wap/FavoritesAction.class.php
WAP 模板themes/default/Wap/Shop/news.htmlnewsload.html
PC 首页themes/default/Home/index/index.html
copyright 2013-2113 www.baoanfuwu.cn All Rights Reserved 保安服务网版权所有
皖ICP备2021016109号-1