首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

  • 24-12-06 00:25
  • 4562
  • 70594
juejin.cn

在 PHP 开发者圈子中,提到 CMS 系统,很难不想到织梦(Dedecms)。dede:arclist 是 Dedecms 中非常强大的标签,用于在模板中动态调用文章列表内容。如果你正在用 Laravel 开发一个类似 CMS 的系统,可能会想要实现类似的标签机制来简化前端模板逻辑。

本文将通过一个完整的案例,展示如何在 Laravel 中实现类似 dede:arclist 的模板标签功能,最终实现灵活调用内容的目标。


dede:arclist 功能回顾

在 Dedecms 中,dede:arclist 的用法如下:

html
代码解读
复制代码
{dede:arclist row="10" titlelen="50"} <li>[field:title/]li> {/dede:arclist}
  • 参数解释:

    • row:指定显示的文章条数。
    • titlelen:限制标题长度。
  • 模板解析后:动态生成文章列表,具体内容依赖后台数据库。


Laravel 实现思路

核心步骤:

  1. 设计数据库和数据模型:

    • 创建文章模型 Article。
    • 定义文章表结构,存储必要字段。
  2. 实现标签解析器:

    • 自定义标签解析器,将类似 dede:arclist 的标签转化为 PHP 代码。
  3. 模板引擎扩展:

    • 扩展 Laravel 的模板引擎(Blade),支持自定义标签。
  4. 实现动态数据调用:

    • 根据标签的参数动态生成文章列表。

代码实现

1. 创建数据库和模型

数据库迁移:

bash
代码解读
复制代码
php artisan make:model Article -m

编辑 database/migrations/{timestamp}_create_articles_table.php:

php
代码解读
复制代码
public function up() { Schema::create('articles', function (Blueprint $table) { $table->id(); $table->string('title', 255); $table->text('content'); $table->integer('category_id')->unsigned()->index(); $table->timestamps(); }); }

运行迁移命令:

bash
代码解读
复制代码
php artisan migrate

创建模型:

编辑 app/Models/Article.php:

php
代码解读
复制代码
namespace App\Models; use Illuminate\Database\Eloquent\Model; class Article extends Model { protected $fillable = ['title', 'content', 'category_id']; }

2. 构建标签解析器

我们需要一个服务类,专门处理标签的解析逻辑。

创建服务类:

bash
代码解读
复制代码
php artisan make:service TagParser

编辑 app/Services/TagParser.php:

php
代码解读
复制代码
namespace App\Services; use App\Models\Article; class TagParser { public function parseArclist($parameters) { // 解析参数 $row = $parameters['row'] ?? 10; $titlelen = $parameters['titlelen'] ?? 50; // 查询文章 $articles = Article::latest()->take($row)->get(); // 处理标题长度 $articles->transform(function ($article) use ($titlelen) { $article->short_title = mb_substr($article->title, 0, $titlelen); return $article; }); return $articles; } }

3. 扩展 Blade 模板引擎

创建自定义 Blade 指令:

编辑 AppServiceProvider.php:

php
代码解读
复制代码
use Illuminate\Support\Facades\Blade; use App\Services\TagParser; public function boot() { // 注册 arclist 标签 Blade::directive('arclist', function ($expression) { return " $expression])->render(); ?>"; }); }

4. 创建标签模板

新建组件视图文件 resources/views/components/arclist.blade.php:

php
代码解读
复制代码
@php $parser = app(\App\Services\TagParser::class); $articles = $parser->parseArclist($parameters); @endphp
    @foreach($articles as $article)
  • {{ $article->short_title }}
  • @endforeach

5. 在模板中调用

现在可以像 Dedecms 一样在模板中调用:

php
代码解读
复制代码
@arclist(['row' => 5, 'titlelen' => 20])

测试结果

假设文章表中有以下数据:

IDTitleContentCategory ID
1Laravel 教程...1
2使用 PHP 构建 CMS...1
3Swoole 与 Laravel 整合...2

调用后,页面将输出:

html
代码解读
复制代码
<ul> <li>Laravel 教程li> <li>使用 PHP 构建...li> <li>Swoole 与 Larav...li> ul>

功能扩展

支持更多参数:

markdown
代码解读
复制代码
- 增加 `category` 参数,限制文章类别。 - 增加 `orderby` 参数,支持自定义排序。

修改 parseArclist 方法:

php
代码解读
复制代码
public function parseArclist($parameters) { $row = $parameters['row'] ?? 10; $titlelen = $parameters['titlelen'] ?? 50; $category = $parameters['category'] ?? null; $orderby = $parameters['orderby'] ?? 'created_at'; $query = Article::latest($orderby); if ($category) { $query->where('category_id', $category); } $articles = $query->take($row)->get(); $articles->transform(function ($article) use ($titlelen) { $article->short_title = mb_substr($article->title, 0, $titlelen); return $article; }); return $articles; }

模板调用:

php
代码解读
复制代码
@arclist(['row' => 5, 'titlelen' => 20, 'category' => 1, 'orderby' => 'id'])

总结

通过本文的实现,我们在 Laravel 中构建了类似 Dedecms 的 dede:arclist 标签功能,支持动态调用文章列表,并具有良好的扩展性。这种方式不仅提高了前后端协作效率,也增强了模板灵活性。

如果你正在用 Laravel 构建一个 CMS 系统,希望本文的内容能对你有所帮助!

注:本文转载自juejin.cn的Student_Li的文章"https://juejin.cn/post/7444749651402817546"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

103
后端
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top