[thinkPHP5项目实战_29]前台首页和文章搜索功能完善

2024-01-04 21:38

本文主要是介绍[thinkPHP5项目实战_29]前台首页和文章搜索功能完善,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 首页功能

首页展示出所有文章,因此需要单独处理,首先在后台将首页的栏目删除,并将首页栏目下的文章移到其他栏目或者删除;

在头部导航header.html单独对首页进行处理;

<div class="blog-masthead"><div class="container"><nav class="blog-nav"><a class="blog-nav-item" href="{:url('Index/index')}">首页</a>{volist name="navres" id="vo"}<a class="blog-nav-item" href="{if condition="$vo['type'] eq 0"}{:url('lists/index',array('cateid'=>$vo['ID']))}{else /}{:url('guest/index',array('cateid'=>$vo['ID']))}{/if}">{$vo.catename}</a>{/volist}</nav></div>
</div>

点击首页导航通过index.php控制器进行处理:

获取所有的文章并通过联表查询每篇文章对应的栏目名:

<?php
namespace app\index\controller;
class Index extends Basic
{public function index(){$artres= \think\Db::name('article')->alias('a')->join('cate c','c.ID = a.cateid','LEFT')->field('a.artid,a.title,a.pic,a.time,a.desc,a.click,a.keywords,c.catename')->order('a.artid desc')->paginate(2);$this->assign('artres',$artres);return $this->fetch();}
}

首页模板Index.html赋值,与文章列表模板赋值一样:

<body><!-- 引入头部 -->{include file="Public/header" /}<div class="container"><div class="row"><div class="col-sm-8 blog-main">{volist name="artres" id="vo"}<div class="post multi-post cate2 auth1"><h4 class="post-date">{$vo.time|date="Y年m月d日",###}</h4><h2 class="post-title"><a href="{:url('Article/index',array('artid'=>$vo['artid']))}">{$vo.title}</a></h2><div class="post-body"><p>描述:{$vo.desc}</p>{if condition="$vo['pic'] neq ''"}  <p style="text-indent: 0em;"><a title="" target="_self" href="{:url('Article/index',array('artid'=>$vo['artid']))}"><img src="__PUBLIC__{$vo.pic}"/></a></p>{/if}</div><h5 class="post-tags">关键词: <span class="tags"><?php$arr=explode(',', $vo['keywords']);foreach ($arr as $k => $v) {echo "<a href='http://localhost/test/tp5/Public/index.php/index/Tags/index/tags/$v'>$v</a>";echo ' ';}?></span></h5><h6 class="post-footer">发布:渣渣 | 分类:{$vo.catename} | 评论:6 | 浏览:{$vo.click} | <a href="{:url('Article/index',array('artid'=>$vo['artid']))}">阅读全文 > </a></h6></div>{/volist}<div class="post pagebar">{$artres->render()}</div></div><div class="col-sm-3 col-sm-offset-1 blog-sidebar"><div class="sidebar-module sidebar-module-inset"><h4>文章搜索:</h4><form method="post" action="{:url('Search/index')}"><input type="text" name="keywords" id="edtSearch" size="12" /> <input type="submit" value="提交" id="btnPost" /></form></div></div></div></div>{include file="public/footer" /}
</body>

2.文章搜索

文章搜索是通过搜索文章标题实现;

将搜索框放在每个页面的侧边栏上,将搜素的关键词在数据中对每篇文章题目进行比对,返回响应的文章信息列表;

 

搜索框:

              <div class="sidebar-module sidebar-module-inset"><h4>文章搜索:</h4><form method="post" action="{:url('Search/index')}"><input type="text" name="keywords" id="edtSearch" size="12" /> <input type="submit" value="提交" id="btnPost" /></form></div>

对应的Search控制器方法为:

<?php
namespace app\index\controller;
class Search extends Basic
{public function index(){$keywords=input('keywords');//获取搜索关键词if($keywords){$map['title']  = ['like','%'.$keywords.'%'];//关键词模糊搜索语句$seares=\think\Db::name('article')->where($map)->order('artid desc')->paginate(2);//查询和分页$this->assign('seares',$seares);//模板赋值$this->assign('keywords',$keywords);}else{$this->assign('keywords','没有关键词');//没有关键词的情况处理$this->assign('seares',null);}return $this->fetch('search');}
}

Search.html进行模板赋值:

需要对没有文章的情况进行判断

<body>{include file="Public/header" /}<div class="container"><div class="row"><div class="col-sm-8 blog-main"><div class="post single-post cate0 auth0"><h4 class="post-date"></h4><h2 class="post-title">关键词:{$keywords}</h2><div class="post-body"> {if condition="$seares neq ' '"}{volist name="seares" id="vo"}<div><br/><font size="+0.5"><a target="_blank" href="{:url('article/index',array('artid'=>$vo['artid']))}">题目:{$vo.title}</a></font><br/>描述:{$vo.desc}<br/><br/></div>{/volist}{else /}没有搜索结果!{/if}</div></div></div></div>{include file="Public/footer" /}
</body>

 

效果:

 

这篇关于[thinkPHP5项目实战_29]前台首页和文章搜索功能完善的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/570686

相关文章

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项