[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

相关文章

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模