惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

SecWiki News
SecWiki News
I
InfoQ
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园_首页
罗磊的独立博客
V
V2EX
李成银的技术随笔
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
True Tiger Recordings
Vercel News
Vercel News
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
F
Fox-IT International blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
M
Microsoft Research Blog - Microsoft Research
Know Your Adversary
Know Your Adversary
爱范儿
爱范儿
The Register - Security
The Register - Security
G
Google Developers Blog
The Hacker News
The Hacker News
Malwarebytes
Malwarebytes
S
Securelist
博客园 - 三生石上(FineUI控件)
Jina AI
Jina AI
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
博客园 - 叶小钗
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
博客园 - 聂微东
T
Threatpost
博客园 - 【当耐特】
D
Docker
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
V
Visual Studio Blog
C
Cisco Blogs
IT之家
IT之家
S
Security Archives - TechRepublic
Latest news
Latest news
阮一峰的网络日志
阮一峰的网络日志

szhshp 的第三边境研究所

Clash 规则跳过 Adobe 许可证检查 | szhshp 的第三边境研究所 假设, AI 把我代替的那一刻真的到来 小傻瓜都能懂的 AstrBot QQ 机器人集成 MCP 功能实战指南 《智人之上: 从石器时代到 AI 时代的信息网络简史》阅读笔记 iPadOS 26 无法设置空间场景图片壁纸的解决方法 《一路云海》(终) 《一路云海》(四): 如何不按套路旅行 《一路云海》(三): In Ya Mellow Tone 《一路云海》(二): 关西世博参观纪实 《一路云海》(一): 新的征程 2025 大阪世博会 [ 3 天前-先到先得 ] 阶段 场馆预约必中独家攻略 Hackathon 随想 《伯恩斯新情绪疗法》阅读笔记 | szhshp 的第三边境研究所 一杯双皮奶 Armbian + CasaOS + NAS 配置指南 Docker 构建镜像报错: error getting credentials - err: exit status 1, out: `` Disqus RIP! 论过高的维护成本如何治疗固执的坏习惯 炸弹猫桌游变体规则 《小岛经济学》阅读笔记 《金钱心理学》阅读笔记 为知笔记 RIP: 迁移剩余的笔记 2025 博客第十年展望 - 再见我的过去 我在独立游戏里面致敬的作品 《The Art of Clean Code》阅读笔记 《How to make thing faster》阅读笔记 《Clean Architecture: A Craftsman Guide to Software Structure and Design》阅读笔记 《How AI Works》阅读笔记 游戏策划废案 - Project X 游戏策划废案 - Project Uranus 人生第一款独立游戏开发复盘 Trap of Life 如果我用手搓了个暗物质雏形 《Rust Programming Language》- EX - Cheatsheet 新的播放器上线了 Cypress - End-to-End Testing: OKTA Authentication with MFA VSC x VIM - 反正多学几个快捷键没有坏处 两小时 Docker 速成 - Getting Started 《The Joy of Javascript》- 5 - Data 《The Joy of Javascript》- 4 - Meta Programming 《The Joy of Javascript》- 3 - ADT(Algebraic Data Type) Web-Automation Testing 《The Joy of Javascript》- 2 - Functor/Monad 《The Joy of Javascript》- 1 - Object/Function EvalError: Possible side-effect in debug-evaluate 前端 QA 工具链指南 - husky,commitlint,commitizen,eslint,typescript,express 效率工具 & 软件推荐 站点开源 Project Titan cmd/powershell-命令速查-Cheatsheet Git-命令速查与相关问题解决-Cheatsheet & Troubleshooting Tailwind.css not included in NextJS Production Github GraphQL API - Data Integration 尝试 Windows Terminal + z.lua StrokePlus.net - Powerful Hotkey Boost 优雅地 Hack 一台黑苹果 一杯关东煮 Gitee x PicGo 管理图床 Create Your Own Redux (Typescript) Getting Started: Ionic + Capacitor + React + Typescript + Android GraphQL: File Upload & Troubleshooting 吉祥航空随心飞刷票工具循环查票工具 NVM Windows Portable Installation 全站点升级 - Project Titan NextJS x Typescript - Integration & Troubleshooting AWS-EC2-常见问题解决-Troubleshooting Workbox-Getting Started 《时间简史》阅读笔记 《时间的秩序》阅读笔记 ESLint-常见问题解决-Troubleshooting 站点索引 个人知识库搭建 - Hexo 实现 Github/Coding 持续集成 Yarn & NPM BMOB-常见问题解决-Troubleshooting React + Typescript: 开启 HMR/Hot Loader ESLint: Typescript + React + TSX 集成 《10101》EP15:过年 2020 Cmder-Usage Redux-DOM not refreshed React Semantic UI-CheatSheet Typescript: Getting Started Flutter-Getting Started Typescript: Access window object with type check VSC Extension Development-Create A Code Formatter Extension OneNote Extension-Main API TortoiseGit Win10 Icon not showing correctly Mongoose: aggregate() 方法实现聚合函数 React In Depth - React 源码解析 - render() & Fiber MongoDB x Mongoose: 实现类似 Join 的功能 Disqus 评论框改造工程-实现 Disqus 代理的 Serverless 服务 | szhshp 的第三边境研究所 GUI, CLI, Terminal, Shell, TTY, Console, Bash | szhshp 的第三边境研究所 Jest Async Best Practise: No Nested Async 关系型数据库与非关系型数据库优缺点分析 选择 GraphQL 的 N 个理由 New Edge & Chromium Error - Package is invalid: 'CRX_VERSION_NUMBER_INVALID' StrokePlus - 鼠标手势神器的代码编写技巧 嗨,好久不见 Vue + ElementUI 集成 Vue Router IE8 - Unknown Runtime Error Using innerHTML & Ajax React-Navigation Integration with Redux React: Handling Events React: States is tricky
ColdFusion - Custom Tag 自定义标签 | szhshp 的第三边境研究所
2018-12-14 · via szhshp 的第三边境研究所

Meta

目录

CustomTag实际上是一种动态header,例如可以在header中同时使用数据库数据(这个是bootstrap.header做不到的) 有以下几种使用方法:

cf_customTag

  • 服务器的CustomTag文件夹中放置对应的自定义标签cfm文件

  • 被访问的cfm目录放置对应的自定义标签cfm文件, 这里直接访问了当前目录下面的abc.cfm这个自定义标签,并且没有设置参数:

    <cf_abc>

cfmodule

实际上是自定义标签的另一种访问方法

这种方法可以指定特殊的路径

示例

<cfmodule
 name="XXX"
/>
<cfmodule
 template="XXX.cfm"
/>

参数

  • name
    • 表示自定义标签的名称
    • 如果是 abc.cfm 直接写成 abc 即可。
    • 如果是在子文件夹中,就使用 subFolderName.abc 的形式
    • 注意name和template参数不能同时使用
    • 使用name参数首先会在当前文件夹搜索标签,然后再是CustomTags文件夹
    • 使用name的时候总是无效?和服务器有关?
  • template
    • 表示对应自定义表单的文件名,需要写上扩展名
    • 如果在子文件夹,可以使用典型相对路径 ../modules/abc.cfmmodules/abc.cfm
    • 注意template参数不支持绝对路径
    • 注意name和template参数不能同时使用

自定义参数

  1. 在被调用的CustomTag中初始化参数(必须)

    <cfparam name="ATTRIBUTES.message" type="string" default="this is msg">
    <cfparam name="ATTRIBUTES.anothermsg" type="string" default="this is another msg">
    <br>
    custom tag begins
    <br>
    <cfoutput>
        #ATTRIBUTES.message#
        <br>
        #ATTRIBUTES.anothermsg#
    </cfoutput>
    <br>
    custom tag ends
    <br>
  2. 注意参数前面的Scope为ATTRIBUTES,这个CFM就将参数进行了输出

  3. 调用方法

  4. 在自定义标签的CFM中使用了<cfparam>所以如果没有赋值就出输出默认值

  5. 或者使用isDefine()函数来进行查看

    <cfmodule template="CustomTags/tagtest.cfm"
        message="this is test msg"
        message2="this is test msg">
  6. 需要注意设置哪些属性是可选的,哪些是必须的

关于CT里面的变量的域控制

  1. 使用 ATTRIBUTES 域,则对应的变量 SCOPE 仅仅是在这个 CT 里面
  2. 使用 CALLER 域,在 CT 里面定义的变量甚至可以在 CT 之外调用,但是在 CT 之外调用的时候不需要添加 CALLER 的前缀
  3. 如果多层调用 CT,那么就可能需要使用 CALLER.CALLER 甚至更多次层叠的前缀,这时候可以考虑使用 REQUEST 的域来使得对应的变量进行共享

关于成对出现的自定义Tag标签

如果标签没有成对出现,一定要在标签末尾加上斜杠, 否则报错

实际上有两种使用CT的方法

<cf_tagtest>
...
</cf_tagtest>
<cf_tagtest var="xxx"/>

实际上第一种方法执行了两次

CT的运行阶段

在CT中存在三个阶段

  1. Start
    • 遇到开始标签之后立即执行,并触发CT的第一次执行
    • 适合用于初步逻辑处理和输出
    • 无法看到和修改Tag之间的内容
  2. Inactive
    • 开始和结束之间的空闲期
    • 将内容累积到一个ThisTag.GeneratedContent中并用作处理
    • 通过对内置变量ThisTag.ExecutionMode来进行阶段判断
  3. End
    • 在借宿标签之后立即执行,并触发CT的第二次执行
    • 适合用于主要业务逻辑
    • 可以看到也可以修改Tag之间的内容

关于运行阶段的处理顺序

<cf_tagtest var="xxx">
    aaa
</cf_tagtest>
...
<cfif ThisTag.ExecutionMode EQ "START">
    123
<cfelse>
    789
    <cfset ThisTag.GeneratedContent="456">
</cfif>

可以看见789在456之前,但是输出依然为 123 456 789

  1. 首先运行到Start,将123缓存
  2. 然后运行到Inactive,将aaa保存到ThisTag.GeneratedContent并且预先放置到123缓存的后面
  3. 然后运行到End,将789缓存,并将ThisTag.GeneratedContent里面的aaa改为456
  4. 因此输出顺序就是 123 456(aaa) 789