在前端发展迅猛的今天,显然基于脚本语言PHP的Joomla!模板已经满足不了日新月异的开发需求了,例如Joomla!的文章列表筛选和排序仍然是使用form+post方式,而前端大多已采用前端框架异步表现,使得用户体验更佳,下面我们来详解一下Joomla!配合前端框架Angular、Bootstrap打造产品筛选器。
需要什么
开始前,需要掌握一些基本的技能
- 对类MVVM前端框架有一定的了解
- PHP的基本了解
- Joomla!模板开发的基本入门
- Angular 1.6.6+
- Bootstrap 3.6+
-
ui-bootstrap-tpls 1.3.3+ (兼容Angular的Bootstrap中间件)
实现方式
基本实现的套路仍然是将原有的Joomla模板基于PHP前台脚本式模板转换为前端框架模板,分为下述三个步骤
- 利用Joomla!的文章作为产品的主要表现形式,使用自定义字段作为产品的要素表现,参考:Joomla!3.8结合标签、自定义字段打造产品分类
- 创建一个文章摘要下所有文章的菜单页面,在模板中将Joomla!文章的数据转换为JSON数据并以JS数组变量表现
- 使用Angular的filter筛选功能将数据使用ng-repeat在表格中循环
创建产品分类及产品
首先,要做的就是创建分类、这个分类下面的文章、以及结合标签、自定义字段打造产品分类。
然后创建一个独立的模板,专门用于基于Angular筛选器的页面,关于自定义文章、分类布局可参考Joomla! 2.5.x 文章布局、分类布局模板释疑(适用于最新版Joomla! 3.8+),由于本文所用是文章摘要式展示内容,此处简单概述创建文章摘要展示模板。
- 1、拷贝/components/com_content/articles/category/tmpl/ 中blog.xml以及blog_**.php等文件至/templates/joomla178/html/com_content/处
- 2、重命名blog.xml以及blog_**.php为 prices.xml和prices_**.php
- 3、编辑prices.xml中的<layout title=""为<layout title="Prices",以便于和其它文章摘要式布局区分
- 4、菜单管理中,创建一个Prices页面,并选择创建好的分类,并在『分类』设置『最大下级分类级别』为『全部』
- 5、在第4步的菜单设置中『多列排版』选项卡下设置『摘要文章数量』为最大,此处假设100
- 6、如果基于性能考虑不希望一次请求所有产品数据,可设置特定数量,并配合分页数据来优化,此种方法不在本次教程之内
修改数据输出形式
在传统的Joomla!模板开发中,大多采用下述代码循环输出html标签及数据
<?php foreach ($this->intro_items as $key => &$item) : ?>
<?php echo '...'; ?>
<?php endforeach; ?>
而现在我们要将$this->intro_items转换为JSON数据,并用JS数组变量形式输出,这里要使用到的最常用方法 json_encode,具体可使用如下方法将数据打印在console.log中:
<script type="text/javascript">console.log(<?php echo json_encode($this->intro_items);</script>
在Chrome浏览器中,可见如下数据
显然这些数据当中很多是多余的,我们需要优化一下数据