详细复习云开发~小程序【搜索功能、登陆注册功能、点赞收藏评论功能、评论功能、CMS网页版管理后台】

news2025/2/5 5:55:42

文章目录

  • 一,搜索功能
    • 1-1,需求
    • 1-2,实现原理
    • 1-3,模糊搜索的代码实现
      • 1-3-1,模糊搜索单个字段
      • 1-3-2,模糊搜索多个字段(满足一个即可)
      • 1-3-3,模糊搜索多个字段(要同时满足)
    • 1-4,获取用户输入的搜索词显示搜索列表
  • 二,云开发实现登陆注册功能
    • 2-1, 注册页
    • 2-2, 登陆页
    • 2-3, 登陆成功跳转到首页
    • 2-4, 保存登陆状态
  • 三,云开发实现点赞收藏评论功能
    • 3-1, 常用图标获取网站
    • 3-2, 收藏
    • 3-3, 同步数据库
  • 四,评论功能的简单实现
  • 五,CMS网页版管理后台
    • 5-1,开通cms的准备工作
    • 5-2,注意事项
    • 5-3,登录Cms可视化管理后台
    • 5-4,在cms里创建后台项目
    • 5-5,内容模型
    • 5-6,数据类型
    • 5-7,数据表(集合)管理
    • 5-8,综合案例


一,搜索功能

1-1,需求

我们想实现如下搜索需求

  • 1,搜索标题(title)包含‘十一’的数据
  • 2,搜索标题(title)或者描述(desc)包含‘十一’的数据
  • 3,搜索标题(title)描述(desc)都包含‘十一’的数据
    我们知道数据库查询的时候有个where语句,但是where语句是查询某个字段全部包含你输入的内容时才可以,所以单纯用where语句来做搜索的话,结果太单一。

1-2,实现原理

我们做模糊搜索的时候,其实就是查询某个字段里是否包含我们的搜索词。而模糊搜索需要借助RegExp,来看看RegExp是什么。
在这里插入图片描述

官方文档: https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/Database.RegExp.html

再来看看官方示例

// 原生 JavaScript 对象
db.collection('todos').where({
  description: /miniprogram/i
})

// 数据库正则对象
db.collection('todos').where({
  description: db.RegExp({
    regexp: 'miniprogram',
    options: 'i',
  })
})

// 用 new 构造也是可以的
db.collection('todos').where({
  description: new db.RegExp({
    regexp: 'miniprogram',
    options: 'i',
  })
})

可能看官方示例会有点糊涂,结合具体代码来看。

1-3,模糊搜索的代码实现

1-3-1,模糊搜索单个字段

需求:搜索标题(title)包含‘十一’的数据
代码如下

let db= wx.cloud.database()
    db.collection('news')
    .where({
      title:db.RegExp({
        regexp:'十一',
        options:'i'
      })
    })
    .get()
    .then(res=>{
      console.log('成功',res);
    })
    .catch(err=>{
      console.log('失败',err);
    })

1-3-2,模糊搜索多个字段(满足一个即可)

  • 需求:搜索标题(title)或者描述(desc)包含‘十一’的数据
    由于我们要查询多个字段,所以我们这里用到了command高级操作符里的or
    在这里插入图片描述

代码如下:

let db= wx.cloud.database()
    let _ =db.command
    db.collection('news')
    .where(_.or([
      {
        title:db.RegExp({
          regexp:'十一',
          options:'i'
        })
      },
      {
        desc:db.RegExp({
          regexp:'十一',
          options:'i'
        })
      }
    ]))
    .get()
    .then(res=>{
      console.log('成功',res);
    })
    .catch(err=>{
      console.log('失败',err);
    })

1-3-3,模糊搜索多个字段(要同时满足)

需求:搜索标题(title)描述(desc)都包含‘十一’的数据
由于我们要查询多个字段,所以我们这里用到了command高级操作符里的and

在这里插入图片描述

代码如下:

 let db= wx.cloud.database()
    let _ =db.command
    db.collection('news')
    .where(_.and([
      {
        title:db.RegExp({
          regexp:'十一',
          options:'i'
        })
      },
      {
        desc:db.RegExp({
          regexp:'十一',
          options:'i'
        })
      }
    ]))
    .get()
    .then(res=>{
      console.log('成功',res);
    })
    .catch(err=>{
      console.log('失败',err);
    })

1-4,获取用户输入的搜索词显示搜索列表

其实获取用户输入的内容,我们之前讲过很多遍了,就是用input组件,通过bindinput来获取用户输入的搜索词,然后点击搜索实现搜索功能。
要实现的效果图如下:
在这里插入图片描述

然后我们搜索对应的关键词以后可以显示对应的搜索结果在列表上

 data: {
    key:'',
    list:[]
  },
  getKey(e){
    this.setData({
      key:e.detail.value
    })
  },
  goSearch(){
    console.log(this.data.key);
    if(this.data.key){
      console.log('开始搜索');
      let db= wx.cloud.database()
      let _ =db.command
      db.collection('news')
      .where(_.or([
        {
          title:db.RegExp({
            regexp:this.data.key,
            options:'i'
          })
        },
        {
          desc:db.RegExp({
            regexp:this.data.key,
            options:'i'
          })
        }
      ]))
      .get()
      .then(res=>{
        console.log('成功',res);
        this.setData({
          list:res.data
        })
      })
      .catch(err=>{
        console.log('失败',err);
      })
    }else{
      wx.showToast({
        icon:'error',
        title: '请输入内容',
      })
    }
  },

二,云开发实现登陆注册功能

2-1, 注册页

注册页主要用到了input组件获取用户输入,button组件实现注册功能,注册主要是把账号名和密码添加到云开发数据库

register(){
    console.log('注册');
    let name = this.data.name
    let user = this.data.user
    let password = this.data.password
    if(name.length<2){
      wx.showToast({
        icon:'none',
        title: '用户名至少为2位',
      })
      return
    }
    if(name.length>2){
      wx.showToast({
        icon:'none',
        title: '用户名最多为10位',
      })
      return
    }
    if(user.length<4){
      wx.showToast({
        icon:'none',
        title: '账号至少为4位',
      })
      return
    }
    if(password.length<4){
      wx.showToast({
        icon:'none',
        title: '密码至少为4位',
      })
      return
    }
    wx.cloud.database().collection('user').add({
      data:{
        name:name,
        zhanghao:user,
        password:password
      },
      success(res){
        console.log('注册成功',res);
        wx.showToast({
          title: '注册成功',
        })
      },
      fail(err){
        console.log('注册失败',err);
      }
    })
  }

2-2, 登陆页

登陆主要是获取用户输入的账号和密码,然后从数据库里读取相应的数据,做账号和密码的比对,如果账号和密码都一样,就可以直接登陆成功

login(){
    let user = this.data.user
    let password = this.data.password
    console.log('账号:',user,'密码:',password);
    if(user.length<4){
      wx.showToast({
        icon:'none',
        title: '账号至少4位',
      })
      return
    }
    if(password.length<4){
      wx.showToast({
        icon:'none',
        title: '密码至少4位',
      })
      return
    }
    wx.cloud.database().collection('user').where({
      zhanghao:user
    })
    .get()
    .then(res=>{
      console.log('获取数据成功',res);
      let user = res.data[0]
      console.log('user',user);
      if(password==user.password){
        console.log('登陆成功');
        wx.showToast({
          title: '登陆成功',
        })
      }else{
        console.log('登陆失败');
        wx.showToast({
          icon:'none',
          title: '账号或密码不正确',
        })
      }
    })
    .catch(err=>{
      console.log('获取数据失败',err);
    })
  },

2-3, 登陆成功跳转到首页

登陆成功以后,会调整到首页

	 wx.navigateTo({
          url: '/pages/home/home?name='+user.name,
        })

2-4, 保存登陆状态

我们通常做登陆时,用户登陆成功后我们需要帮用户保存登陆状态,要不然用户下次再进入应用时还要重新登陆。所以我们要做下用户登陆状态的保存

三,云开发实现点赞收藏评论功能

具体代码的编写请跟着石头哥的视频走

3-1, 常用图标获取网站

这里用了一个阿里巴巴矢量图库:https://www.iconfont.cn

3-2, 收藏

  data:{
    imgUrl:"/images/soucang-gray.png",
    soucang:false
  },
  clickImg(){
    this.setData({
      imgUrl:this.data.soucang?'/images/soucang-gray.png':'/images/soucang-red.png',
      soucang:!this.data.soucang
    })      
  }

3-3, 同步数据库

因数据是自己导入,本地调用函数无法修改,需要调用云函数,在云函数说过,可以回去复习一下

clickImg(){
    this.setData({
      imgUrl:this.data.soucang?'/images/soucang-gray.png':'/images/soucang-red.png',
      soucang:!this.data.soucang
    })      
    wx.cloud.callFunction({
      name:"soucang",
      data:{
        id:ID,
        soucang:this.data.soucang
      }
    })
    
    .then(res=>{
      console.log('更新成功',res);
    })
    .catch(err=>{
      console.log('更新失败',err);
    })
  },

四,评论功能的简单实现

在这里插入图片描述

let ID=''
let content=''

Page({
  data:{
    detail:'',
    imgUrl:"/images/soucang-gray.png",
    soucang:false,
     pinglun :[]
  },
  clickImg(){
    this.setData({
      imgUrl:this.data.soucang?'/images/soucang-gray.png':'/images/soucang-red.png',
      soucang:!this.data.soucang
    })      
    wx.cloud.callFunction({
      name:"soucang",
      data:{
        action:'soucang',
        id:ID,
        soucang:this.data.soucang
      }
    })    
    .then(res=>{
      console.log('更新成功',res);
    })
    .catch(err=>{
      console.log('更新失败',err);
    })
  },
  getContent(e){
    content=e.detail.value    
  },  
  fabiao(){
    if(content.length<4){
      wx.showToast({
        icon:'none',
        title: '评论不少于4字',
      })
      return
    }
    let pinglunItem={}
    pinglunItem.name='十一',
    pinglunItem.content=content
    let pinglunArr=this.data.pinglun
    pinglunArr.push(pinglunItem)
    console.log('添加后的评论数组',pinglunArr);
    wx.cloud.callFunction({
      name:'soucang',
      data:{
        action:'fabiao',
        id:ID,
        pinglun:pinglunArr
      }
    })
    .then(res=>{
      console.log('更新成功',res);
      this.setData({
        pinglun:pinglunArr
      })
    })
    .catch(err=>{
      console.log('更新失败',err);
    })
  },
  onLoad(options){
    ID=options.id
    console.log(options);
    wx.cloud.database().collection('homelist')
    .doc(ID)
    .get()
    .then(res=>{
      console.log('获取成功',res);
      this.setData({
        detail:res.data,
        soucang:res.data.soucang,       
      })
      this.setData({
        imgUrl:this.data.soucang?'/images/soucang-red.png':'/images/soucang-gray.png',
        pinglun:res.data.pinglun
      })
      
    })
    .catch(err=>{
      console.log('获取失败',err);
    })
  }
})

五,CMS网页版管理后台

5-1,开通cms的准备工作

如下图所示,直接点击开通内容管理(CMS)即可
在这里插入图片描述

如果你已经开通过云开发,记得把付费模式改为按量付费。如果你一开始云开发不是按量付费的模式。

点击完开通以后,会有如下弹窗,直接点击确定即可。不要被付费吓着,官方每月会送我们一定的免费额度的。学习得话基本上够用了。
在这里插入图片描述

上面点完确定后,我们只是开启了按量付费功能,因为cms得使用必须要开通按量付费才可以得。所以还要再点一次开通。如下图
在这里插入图片描述

点完开通后,会有如下弹窗,直接点击下一步即可。
在这里插入图片描述

然后我们需要设置登录内容管理后台得账号和密码,然后点击确定即可
在这里插入图片描述

然后我们就等待内容管理功能得开通了,需要等几分钟。

开通成功以后,我们就可以通过下面这个地址进入管理后台了。
在这里插入图片描述

后面我们统一称内容管理为cms

5-2,注意事项

  • 一个云开发环境对应一个内容管理(cms)
  • cms开通会存在开通失败的情况,如果开通失败了,就用新的云开发环境去开通,如果新的云开发环境还是不行的话,那就只能重新去注册一个新的小程序了。一个小程序是可以开通两个云开发环境的。

5-3,登录Cms可视化管理后台

上面开通好以后,就可以通过后台地址登录管理后台了。如下

在这里插入图片描述

5-4,在cms里创建后台项目

第一次登录,我们还需要创建一个项目
在这里插入图片描述

自己输入项目名和项目id即可

然后点击进入刚刚创建的项目

在这里插入图片描述

到这里我们的cmd可视化网页管理后台就创建好了

5-5,内容模型

其实内容模型和我们数据库里的数据表(集合)是对应起来的。
在这里插入图片描述

5-6,数据类型

我们往内容模型里添加数据类型的时候可以选择如下一些类型
在这里插入图片描述

5-7,数据表(集合)管理

我们可以对上面创建好的内容模型(集合)进行可视化的管理,这也是cms的优点,可以让我们对数据库进行可视化的管理。

在这里插入图片描述

5-8,综合案例

我会结合cms和云开发数据库,教大家实现一个简单的新闻小程序,有如下功能点

1,新闻列表
2,新闻详情
3,图文混排
4,富文本编辑
5,rich-text的学习
rich-text官方文档:
https://developers.weixin.qq.com/miniprogram/dev/component/rich-text.html
在这里插入图片描述
在这里插入图片描述

<view>{{detail.title}}</view>
<rich-text nodes="{{detail.content}}"></rich-text>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/103244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python获取redis memory使用情况

项目研发过程中&#xff0c;用到Python操作Redis场景&#xff0c;记录学习过程中的心得体会。 一、环境搭建 Windows Anaconda3安装redis第3方包&#xff0c;pip install -u redis pip install -u # 升级安装 linux下查看redis配置信息bind 127.0.0.1 # 表示只允许本地访问,…

AssetBundle依赖打包有哪些注意点

1&#xff09;AssetBundle依赖打包有哪些注意点 ​2&#xff09;子程序集如何引用Assembly-CSharp.dll 3&#xff09;Unity的线性空间下自定义贴图在PS中修改问题 4&#xff09;如何关闭视锥体剔除 这是第318篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化…

CSS3之2D转换

文章目录2D转换一、transform1-1.2D转换之移动translate1-2.translate&#xff08;百分比&#xff09;盒子居中二、rotate2-1.旋转效果2-2.transform-origin设置旋转中心点三、2D转换之缩放scale四、2D转换综合写法总结2D转换 转换&#xff08;trabsform&#xff09;是CSS3中具…

SPDK块设备bdev简介

介绍 SPDK Bdev架构 SPDK块设备层&#xff08;通常简称为bdev&#xff09;是一个C库&#xff0c;旨在等同于操作系统块存储层&#xff0c;该层通常位于传统内核存储堆栈中设备驱动程序的正上方。具体来说&#xff0c;此库提供以下功能&#xff1a; 一种可插拔模块API&#xf…

Effective C++(二):构造/析构/赋值运算

个人读书记录&#xff0c;不适用教学内容。 目录 条款05&#xff1a;了解C默默编写并调用了哪些函数 条款06&#xff1a;若不想使用编译器自动生成的函数&#xff0c;就该明确拒绝 条款07&#xff1a;为多态基类声明virtual析构函数 条款08&#xff1a;别让异常逃离析构函数…

设备巡检系统哪个软件好?

本文将介绍&#xff1a;1、好用的设备巡检系统&#xff0c;2、评价设备巡检系统好用的标准&#xff1b;3、做好设备管理的几大关键 现今许多企业&#xff0c;尤其是制造业&#xff0c;规模日趋机械化、自动化、大型化、高速化和复杂化&#xff0c;对设备巡检工作的要求越加精细…

微信小程序网络请求

小程序的网络请求的文档是很少的&#xff0c;只提供了API&#xff0c;例子也不举。 基本使用 最简单的使用如下&#xff1a; 就是调用wx.request方法&#xff0c;这个方法已经能够应付大部分的网络请求了。 onLoad() {wx.request({url: http://123.207.32.32:1888/api/city/a…

我学python的那段日子(五)python中的函数

python中的函数 1.1自定义函数 1.1.1 函数的定义 ​ 和Java一样&#xff0c;python也有内置函数和自定义函数&#xff0c;内置函数是python已经定义好的函数&#xff0c;而自定义函数则是我们根据需要自己定义的函数。 ​ 语法 def 函数名称(参数): ​ 函数体 ​ 其中参数的…

一个转行学习前端的初学者,应该如何计划自己的学习规划?

就目前的发展来看&#xff0c;在语言排行中&#xff0c;前端多年霸主的地位还未被撼动&#xff0c;前端语言的特点就注定了很多公司会选用它&#xff0c;强大的第三方库使前端正在web端的强大无法被替代。目前由于大数据&#xff0c;人工智能的发展&#xff0c;互联网成为了发展…

Bootstrap5 复选框与单选框

如果您希望用户从预设选项列表中选择任意数量的选项&#xff0c;可以使用复选框&#xff1a; 实例 <div class"form-check"> <input class"form-check-input" type"checkbox" id"check1" name"option1" value&quo…

【Python机器学习】朴素贝叶斯分类的讲解及预测决策实战(图文解释 附源码)

需要代码请点赞关注收藏后评论区留言私信~~~ 朴素贝叶斯分类 朴素贝叶斯&#xff08;nave Bayes&#xff09;分类是基于贝叶斯定理与特征条件独立假定的分类方法。 设试验E的样本空间为S&#xff0c;A为E的事件&#xff0c;B_1&#xff0c;B_2&#xff0c;⋯&#xff0c;B_n为…

深入浅出理解Java并发AQS的共享锁模式

自定义共享锁例子 首先我们通过AQS实现一个非常最最最轻量简单的共享锁例子&#xff0c;帮助大家对共享锁有一个整体的感知。 Slf4j public class ShareLock {/*** 共享锁帮助类*/private static class ShareSync extends AbstractQueuedSynchronizer {private int lockCount…

C. Sequence Pair Weight(数学贡献法)

Problem - 1527C - Codeforces 序列的权重被定义为具有相同值&#xff08;aiaj&#xff09;的无序索引对&#xff08;i,j&#xff09;&#xff08;这里i<j&#xff09;的数量。例如&#xff0c;序列a[1,1,2,2,1]的权重是4&#xff0c;具有相同值的无序索引对的集合是&#x…

结构篇-适配器模式

文章目录一、跨越鸿沟靠适配二、插头与插孔的冲突1.三相插孔接口2.两相插孔接口3.电视机机类TV4.客户端类二、通用适配1. 适配器2.客户端类三、专属适配1.电视机专属适配器2.客户端类总结1. 对象适配器2. 类适配器总结适配器模式(Adapter)通常也被称为转换器&#xff0c;顾名思…

数字孪生炒得火热,但好像对企业发展还没有任何实质性的突破,是否只是表面功夫?

首先&#xff0c;什么是数字孪生&#xff1f; ​ 数字孪生是充分利用物理模型、传感器更新、运行历史等数据&#xff0c;集成多学科、多物理量、多尺度、多概率的仿真过程&#xff0c;在虚拟空间中完成映射&#xff0c;从而反映相对应的实体装备的全生命周期过程。数字孪生是一…

const成员,流插入,流提取重载,初始化列表!(6千字长文详解!)

c详解之const成员&#xff0c;流插入&#xff0c;流提取重载&#xff0c;初始化列表&#xff01; 文章目录c详解之const成员&#xff0c;流插入&#xff0c;流提取重载&#xff0c;初始化列表&#xff01;<< 流插入 和 >> 流提取的重载解决共有成员函数问题链式访问…

实用!7个强大的Python机器学习库!⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 机器学习实战系列&#xff1a;https://www.showmeai.tech/tutorials/41 &#x1f4d8; 本文地址&#xff1a;https://www.showmeai.tech/article-detail/412 &#x1f4e2; 声明&#xff1a;版权所有&#xff0c;转…

如何借助扬尘视频监测系统开展扬尘污染防控工作?

一、方案背景 目前&#xff0c;跟随国家快速发展的步伐&#xff0c;城市化建设也在飞速发展&#xff0c;各种建设工程遍地开花。如何更好抵管理施工扬尘&#xff0c;杜绝各种违规及不文明现象&#xff0c;一直是施工企业、政府管理部门关注的焦点。 二、系统介绍 环境扬尘视频…

手把手教你一套完善且高效的k8s离线部署方案

作者&#xff1a;郝建伟 背景 面对更多项目现场交付&#xff0c;偶而会遇到客户环境不具备公网条件&#xff0c;完全内网部署&#xff0c;这就需要有一套完善且高效的离线部署方案。 系统资源 编号主机名称IP资源类型CPU内存磁盘01k8s-master110.132.10.91CentOS-74c8g40g0…

SkeyeVSS储备地块可视化管理信息系统 助力土地批后全程监管解决方案

一、方案背景 近年来&#xff0c;储备地块经常遭遇倾倒渣土、隐蔽性私搭乱建等违法行为的侵害&#xff0c;在违法行为发生之后又面临追责难度大、效率低的问题&#xff0c;因此可视化监管系统的建设将有效地解决单纯靠人力巡查、巡查时间长、巡查效率低以及发现侵害行为后追责…