Demo:

<@cms.CfgList isPage='1' league='0' recommend='0' lala='0' hot='1' memberId='0'  pageNo=pageNo count='4' orderBy=0 ;g>
<dl>
<dt><a href="/lala/LalaIndex.htm?fid=${g.id}" target="_blank"><img src="${g.logo}" /></a></dt>
<dd>
<span><a href="/lala/LalaIndex.htm?fid=${g.id}" target="_blank">${g.name!}</a></span>
<#assign al=action.getArtiByCfgId(g.id!0).list>
<#if al??>
<#list al as ll>
<#if ll.description?length gt 42>
<a href="/lala/LaTopicDetail.htm?fid=${g.id}&aid=${ll.id}" target="_blank" style="text-decoration: none;">${ll.description?substring(0,41)}...</a>
<#else>
<a href="/lala/LaTopicDetail.htm?fid=${g.id}&aid=${ll.id}" target="_blank" style="text-decoration: none;">${ll.description!}</a>
</#if>
</#list>
</#if>
</dd>
</dl>
</@cms.CfgList>

上面的<@cms.CfgList...>之所以可以调用是因为在freemarker.properties:

auto_import="/WEB-INF/ftl_lib/ponyjava.com/index.ftl" as p, "/WEB-INF/ftl_lib/fcms/index.ftl" as cms

接下来顺藤摸瓜的跟进去看看index.ftl 找到相应的宏定义(macro)

<#--
球迷会列表(自定义内容)
team:所属俱乐部(默认为空)
league:赛事(默认空)
recommand:关联热门话题(默认0)
orderBy:排序方式。【0:发布时间降序;1:发布时间升序;2:固顶降序;3:置顶降序;4:日点击降序;5:周点击降序;6:月点击降序;7:季点击降序;8:年点击降序;9:总点击降序】(默认0)
memberId:关联版主。
hot:是否推荐
lala:0:啦啦团 1:球迷会 2:专题
-->
<#macro CfgList league='0' recommend='0' orderBy='0' lala="-1" hot="0" memberId="0" count="5" pageNo="0" hot="0"
titLen='20' target='0' headMark='0' lineHeight='' bottomLine='0' ctgForm='0' ctgClass='' dateFormat='0' datePosition='1' memberId="0"
picWidth='24.9' picHeight='110'
rollDisplayHeight='28' rollLineHeight='28' rightPadding='20' rollCols='1' rollSpeed='1' isSleep='1' rollSleepTime='50' rollCount='1' rollSpan='1'
flashWidth='296' flashHeight='200' textHeight='20'
isPage='0' count='20' firstResult='0' pageNo=pageNo
style='1' inner='0' isLoop='1' cssClass='' cssStyle='' showLinkStyle='1'
sysTpl='1' sysContent='0' userContent='' sysPage='0' newday='0' userPage='' upSolution='' upWebRes='' pageClass='' pageStyle='' custom=[]> <@s.action name='CfgList' league=league namespace='/fcms/tag/article' executeResult='true' memberId=memberId
recommend=recommend orderBy=orderBy count=count lala=lala hot=hot
titLen=titLen target=target headMark=headMark lineHeight=lineHeight bottomLine=bottomLine ctgForm=ctgForm ctgClass=ctgClass dateFormat=dateFormat datePosition=datePosition
picWidth=picWidth picHeight=picHeight
rollDisplayHeight=rollDisplayHeight rollLineHeight=rollLineHeight rightPadding=rightPadding rollCols=rollCols rollSpeed=rollSpeed isSleep=isSleep rollSleepTime=rollSleepTime rollCount=rollCount rollSpan=rollSpan
flashWidth=flashWidth flashHeight=flashHeight textHeight=textHeight
isPage=isPage count=count firstResult=firstResult pageNo=pageNo
style=style cssClass=cssClass cssStyle=cssStyle showLinkStyle=showLinkStyle
sysTpl=sysTpl sysContent=sysContent userContent=userContent sysPage=sysPage newday=newday userPage=userPage pageClass=pageClass pageStyle=pageStyle customs=customs
/>
<#if isLoop=='1'>
<#list n_pagination.list as item>
<#nested item,item_index,item_has_next/>
</#list>
<#else>
<#nested n_pagination/>
</#if>
</#macro>

上述代码中不难发现使用了宏,并且会向指定的namespace、action参数请求数据,在这里提醒一下必须还要加上 <#nested> (指令执行指令开始和结束标记之间的模板片断)

否则在页面上打印出来的不是你想要的数据,而是你的项目src根目录下的各种文件名称,这一点我暂时没弄明白。

JEECMS 2.4.2 之添加新的可扩展的ftl模版文件、自定义方法的更多相关文章

  1. 添加新硬盘,扩展Centos7根分区

    ##背景介绍,系统安装时,分配的硬盘容量太小,根分区空间不够用,现添加一个新硬盘,通过以下步骤来扩展centos7根分区 [root@t201 ~]# df -h 文件系统 容量 已用 可用 已用% ...

  2. 如何使用django操作数据库,向原有表中添加新的字段信息并建立一个多对多的关系?

    (注:本人用的pycharm开发工具) 1.在你要添加新字段的app的 models.py 文件中添加需要新增的字段(book表新增authors字段并和author建立多对多关系,author表新增 ...

  3. Django数据库,在原有表中添加新字段

    1.在你要添加新字段的app的 models.py 文件中添加需要新增的字段(这里新增的是dress字段): from django.db import models # Create your mo ...

  4. 【译】Meteor 新手教程:在排行榜上添加新特性

    原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...

  5. 【PostgreSQL】PostgreSQL添加新服务器连接时,报错“Server doesn't listen ”,已解决。

    PostgreSQL添加新的服务器连接时,报错:

  6. 一个新人如何学习在大型系统中添加新功能和Debug

    文章背景: 今年七月份正式入职,公司主营ERP软件,楼主所在的组主要负责二次开发,使用的语言是Java. 什么叫二次开发呢?ERP软件的客户都是企业.而这些企业之间的情况都有所不同,一套标准版本的企业 ...

  7. ASP.NET MVC 5 - 给电影表和模型添加新字段

    在本节中,您将使用Entity Framework Code First来实现模型类上的操作.从而使得这些操作和变更,可以应用到数据库中. 默认情况下,就像您在之前的教程中所作的那样,使用 Entit ...

  8. Linux 使用fdisk添加新分区

    Linux系统由于数据累计增长.前期存储规划不合理等诸多因素,出现存储不够用的情况时,此时就需要扩展逻辑分区或添加新的逻辑分区.下面介绍一下通过使用fdsik添加新的逻辑分区. 首先使用df命令检查文 ...

  9. [译]:Orchard入门——给网站添加新博客

    原文链接:Adding a Blog to Your Site 文章内容基于Orchard 1.8版本 Orchard提供一个博客引擎--这让添加一个新博客到你网站变得非常容易. 本文将介绍怎样添加一 ...

随机推荐

  1. 为小团队协作和个人任务管理而生的Team应用

    今天主要给大家讲讲个人用户如何操作附个下载地址:https://coding.net/s/7a64f0d3-0fc3-4618-a490-d29651dae06b1.可直接在主页添加任务 任务被放在默 ...

  2. replace的用法

    http://blog.sina.com.cn/s/blog_9ed9ac7d0101ec1f.html replace 语句 如果存在,更新,否则,插入在使用REPLACE时,表中必须有唯一索引,而 ...

  3. 在线安装eclipse中html/jsp/xml editor插件 eclipseeditor

    1.打开eclipse中的help————>Install New Software 2.点击Add按钮,然后弹出一个框,第一个文本框可以随便写,第二个一定要写: http://download ...

  4. EffectiveJava(24)使用@SuppressWarnings("unchecked")消除非受检警告

    -..使用泛型编程时,会遇到许多编译器警告,如:非受检强制转化警告,非受检方法调用警告,非受检普通数组创建警告,费受精转换警告.这次的内容就是遇到这些警告的时候你该怎么办. PS:非受检警告就是代码上 ...

  5. maven 插件之 AutoConfig 工具使用笔记

    AutoConfig 是一款 maven 插件,主要用于 Maven 项目打包使用.在我们的工作中,会将自己写的代码打成 jar 包或者 war 包发布到各种环境上.一般地,不用的环境所使用的数据库. ...

  6. Java中Vector与ArrayList的差别具体解释

    首先看这两类都实现List接口,而List接口一共同拥有三个实现类.各自是ArrayList.Vector和LinkedList.List用于存放多个元素,可以维护元素的次序,而且同意元素的反复. 3 ...

  7. HDU 1560 IDA*搜索

    用N个串中找到最短的公共串(不要求连续,仅仅要相对位置一样就可以) 迭代加深搜索就可以 剪枝:当前的深度+最少还有加深的深度是否大于限制的长度,若是,则退回. #include "stdio ...

  8. 获取 input 输入框的值

    1.使用原生javascript: 方法一: <html> <head> <script language="javascript"> func ...

  9. SQL优化- 数据库SQL优化——使用EXIST代替IN

    数据库SQL优化——使用EXIST代替IN 1,查询进行优化,应尽量避免全表扫描 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 . 尝试下面的 ...

  10. Spring使用经验之Listener综述

    Note:Spring使用版本是4.1.6.RELEASE 1. ContextLoaderListener最基本的SpringListener,加载Spring配置文件 配置名为contextCon ...