[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

相关文章

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.