0

0

Discuz移动端二开之关注和粉丝页面以及关注状态处理

咔咔

咔咔

发布时间:2020-05-11 01:23:14

|

2966人浏览过

|

来源于php中文网

原创

本文实现功能:开发移动端关注页面开发移动端粉丝页面实现从自己空间看见的关注列表都显示已关注实现自己看其他人关注列表时  自己关注的用户显示已关注  自己未关注的用户显示关注解决如何在PHP文件里边显示移动端页面


前期准备:解决PHP文件里边显示移动端页面

discuz中移动端是没有粉丝,关注页面的,那么就需要我们来开发。以下就是开发流程。

discuz中pc端是有收听和听众的功能。如下图home.php?mod=follow&do=follower这个地址就是对应的pc端的粉丝页面

image.png


然后我们可以追溯PHP文件source/module/home/home_follow.php  的这个文件。在这个文件里,我们只需要注意到follower 和 following 这俩个名字。这俩个一个是关注的意思  一个是粉丝的意思

image.png

然后根据discuz的访问机制我们去模板里找一下follow_follower.html这个文件。但是在模板里边我们发现使用follow开头的文件就这几个

image.png

继续来到文件source/module/home/home_follow.php然后拉到最后看加载的模板。这里可以看到加载的模板就是上边看到的follow_feed.html这个文件。

image.png那么我们就来到template/default/home/follow_feed.htm这个文件里边,大概是在554行左右可以看到很熟悉的俩个模块一个follower和following

image.png

既然已经猜想是在这里了,那就写一个测试代码测试一下。

经过测试我们就已经确信无误了,这个页面就是加载的关注页面和粉丝页面。

image.png

image.png

在上面的测试会发现地址请求的是/home.php?mod=follow&do=follower,但是加载html文件却是template/default/home/follow_feed.htm。也就是说在dsicuz中如果需要加载跟请求地址不一致的文件,需要使用template函数来加载。


那么下面咱们自己写一个移动端follow_follower文件。

image.png

image.png然后浏览器调整为手机访问模式即可

image.png


以上就是二开关注页面和粉丝页面PHP如何加载

开发粉丝页面和关注页面并实现数据接入

在模板里边我们也可以这样写,判断do为follower时进入粉丝模板,为关注时进入关注模板image.png

下图就是咔咔开发关注页面的效果

image.png

那么页面写完了我们就需要实现数据对接了。继续回到template/default/home/follow_feed.htm这个文件。可以看到使用的数据是list,循环使用的是fuser这个变量

image.png

Favird
Favird

极其棒且有价值的互联网资源目录!

下载

实现关注显示与不显示

打开discuz数据库字典,可以看到是否关注使用的是mutual这个字段image.png

根据mutual这个字段来控制关注与已关注的显示与不显示

  • 当自己进入自己空间时在关注列表里边是全部显示已关注  判断条件是 当$_G[uid] == $_GET[uid]时mutual>=0即可

  • 当自己进入别人空间查看关注列表时 如果是自己关注的用户需要显示已关注  否则显示关注即可   这里的判断条件是  $_G[uid] != $_GET[uid]时mutual==-1或者mutual==1即可。这里为什么会有一个mutual=-1的标识。数据库字典是没有这个标识的,但是实际测试出来的是有的,咔咔也看了源码是做了一个判断,先知道这么判断就行

  • 在关注列表里边所有的链接地址都为home.php?mod=spacecp&ac=follow&op=del&hash={FORMHASH}&fuid=$fuser['followuid']&mobile=2。所有的用户标识都是followuid即可

  • 粉丝列表就很简单,直接使用-1和1判断即可

  • 也就是说mutual这个字段的值为0 和1是只能判断自己在自己空间查看关注和粉丝列表时可以使用。如果是自己进入其他用户的粉丝和关注列表就会产生一个mutual的值为-1的一个字段

  • 那也就是当自己进入其他用户有自己已经关注的用户时mutual的值就是-1

实现代码

// 粉丝模板
<p class="follow_manage">
   <!--{if $fuser[mutual] == -1 || $fuser[mutual] == 1}-->
   <a id="a_followmod_{$fuser['uid']}" href="home.php?mod=spacecp&ac=follow&op=del&hash={FORMHASH}&fuid=$fuser['uid']&mobile=2" class="flw_btn_fo dialog">
      <i class="iconfont  icon-like_fill rq"></i>
      <font class="grey">已关注</font>
   </a>
   <!--{else}-->
   <a id="a_followmod_{$fuser['uid']}" href="home.php?mod=spacecp&ac=follow&op=add&hash={FORMHASH}&fuid=$fuser['uid']&mobile=2" class="flw_btn_fo dialog">
      <i class="iconfont icon-like"></i>
      <font class="grey">关注</font>
   </a>
   <!--{/if}-->
</p>

// 关注列表模板
<p class="follow_manage">
   <!--{if $_G[uid] != $_GET[uid]}-->
      <!--{if $fuser[mutual] == -1 || $fuser[mutual] == 1}-->
      <a id="a_followmod_{$fuser['followuid']}" href="home.php?mod=spacecp&ac=follow&op=del&hash={FORMHASH}&fuid=$fuser['followuid']&mobile=2" class="flw_btn_fo dialog">
         <i class="iconfont  icon-like_fill rq"></i>
         <font class="grey">已关注</font>
      </a>
      <!--{else}-->
      <a id="a_followmod_{$fuser['followuid']}" href="home.php?mod=spacecp&ac=follow&op=add&hash={FORMHASH}&fuid=$fuser['followuid']&mobile=2" class="flw_btn_fo dialog">
         <i class="iconfont icon-like"></i>
         <font class="grey">关注</font>
      </a>
      <!--{/if}-->
   <!--{else}-->
      <!--{if $fuser[mutual] == 0 || $fuser[mutual] == 1}-->
      <a id="a_followmod_{$fuser['followuid']}" href="home.php?mod=spacecp&ac=follow&op=del&hash={FORMHASH}&fuid=$fuser['followuid']&mobile=2" class="flw_btn_fo dialog">
         <i class="iconfont  icon-like_fill rq"></i>
         <font class="grey">已关注</font>
      </a>
      <!--{else}-->
      <a id="a_followmod_{$fuser['followuid']}" href="home.php?mod=spacecp&ac=follow&op=add&hash={FORMHASH}&fuid=$fuser['followuid']&mobile=2" class="flw_btn_fo dialog">
         <i class="iconfont icon-like"></i>
         <font class="grey">关注</font>
      </a>
      <!--{/if}-->
   <!--{/if}-->

</p>

画图解释用户关注的逻辑处理

image.png

  • 现在用户A,用户B,用户C

  • 用户A关注了用户C

  • 然后用户B进入到用户A空间的关注列表是可以看到用户C的

  • 假如这个时候用户B已经关注了用户C,那么这个时候关注的按钮就是已关注,这个时候mutual的值就是-1(这种情况就是自己到别人的关注列表查看用户,如果有自己已经关注过的就会显示已关注,并且mutual的值为-1)

  • 这个时候用户B在回到自己的用户空间查看关注列表就会显示用户C在自己的列表,但是这个时候mutual的值为0.  但是当用户C也关注了用户B时mutual的值就是1

  • 所以说用户当用户B在自己空间的关注列表查看使用mutual的值为0和1判断。当用户B去查看用户A的关注列表时使用mutual为-1和1来判断

画图解释粉丝的逻辑处理

image.png

  • 现用用户A,用户B,用户C

  • 当用户A关注了用户C时,用户C的粉丝列表就是有用户A

  • 这个时候用户B访问用户C的粉丝列表就只有用户A, 这个时候用户A的关注状态也是  未关注状态,并且mutual的是0

  • 假如用户A也关注了用户B,用户B在用户C的粉丝列表里查看用户A的状态也是未关注状态  并且mutual的值为0

  • 但是当用户B关注了用户A后,这个时候用户B在用户C的粉丝列表查看用户A的状态就是已关注并且mutual的值为1表示互相关注

  • 但是当用户A没有关注用户B

  • 这个时候用户用户B在用户C的粉丝列表里边看到用户A的状态是未关注,当B把用户A关注后状态为已关注,mutual的值为-1

  • 所以粉丝列表里边判断只有当mutual的值为-1或者1时是关注状态,其余都是未关注状态

总结

以上就是实现的所有过程,在下一篇文章会针对这块的代码进行分析

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

25

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

44

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

175

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

50

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

92

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

102

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

227

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

529

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

171

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号