kuroco-server-processing
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseKuroco サーバーサイド処理
Kuroco 服务端处理
KurocoのSmartyテンプレートプラグインリファレンスおよびWebhook・バッチ処理パターン。
ドキュメント参照: スキルを使用してKuroco公式ドキュメントを検索・参照できます。
/kuroco-docsKuroco的Smarty模板插件参考以及Webhook、批量处理方案。
文档参考: 使用技能可搜索、查阅Kuroco官方文档。
/kuroco-docs目次
目录
Part 1: Smartyプラグインリファレンス
Part 1: Smarty插件参考
- よく使うプラグイン
- プラグイン種別
- カテゴリ別リファレンス
- Smarty構文リファレンス - 基本構文、制御構造、組み込み変数
Part 2: Webhook・バッチ処理パターン
Part 2: Webhook・批量处理方案
Part 1: Smartyプラグインリファレンス
Part 1: Smarty插件参考
KurocoのSmartyテンプレートで使用可能な全プラグインの完全リファレンス。
Kuroco的Smarty模板可用的全插件完整参考。
よく使うプラグイン
常用插件
変数・データ操作
变量与数据操作
| プラグイン | 説明 | 例 |
|---|---|---|
| 変数代入 | |
| 配列追加 | |
| JSONパース | |
| JSONエンコード | |
| 插件 | 说明 | 示例 |
|---|---|---|
| 变量赋值 | |
| 数组追加 | |
| JSON解析 | |
| JSON编码 | |
API・データ取得
API与数据获取
| プラグイン | 説明 | 例 |
|---|---|---|
| 内部API呼び出し | |
| 記事一覧取得 | |
| 記事詳細取得 | |
| タグ一覧取得 | |
→ 詳細: references/api-plugins.md
| 插件 | 说明 | 示例 |
|---|---|---|
| 内部API调用 | |
| 获取文章列表 | |
| 获取文章详情 | |
| 获取标签列表 | |
→ 详情: references/api-plugins.md
文字列処理
字符串处理
| プラグイン | 説明 | 例 |
|---|---|---|
| エスケープ | |
| 文字列切り詰め | |
| マルチバイト対応 | |
| 日付フォーマット | |
| 翻訳 | |
| 改行をBRに | |
| 文字列置換 | |
→ 詳細: references/string-plugins.md
| 插件 | 说明 | 示例 |
|---|---|---|
| 转义处理 | |
| 字符串截断 | |
| 多字节兼容截断 | |
| 日期格式化 | |
| 翻译处理 | |
| 换行转BR标签 | |
| 字符串替换 | |
→ 详情: references/string-plugins.md
フォーム・UI
表单与UI
| プラグイン | 説明 | 例 |
|---|---|---|
| ファイルアップロード | |
| フォーム入力 | |
| ページネーション | |
| 編集ボタン | |
| selectオプション | |
→ 詳細: references/form-plugins.md
| 插件 | 说明 | 示例 |
|---|---|---|
| 文件上传 | |
| 表单输入 | |
| 分页组件 | |
| 编辑按钮 | |
| 下拉选项 | |
→ 详情: references/form-plugins.md
認証・権限
认证与权限
| プラグイン | 説明 | 例 |
|---|---|---|
| 権限制御ブロック | |
| ログイン処理 | |
| ログアウト処理 | |
→ 詳細: references/auth-plugins.md
| 插件 | 说明 | 示例 |
|---|---|---|
| 权限控制块 | |
| 登录处理 | |
| 登出处理 | |
→ 详情: references/auth-plugins.md
外部サービス連携
外部服务联动
| プラグイン | 説明 | 例 |
|---|---|---|
| メール送信 | |
| Slack通知 | |
| AI呼び出し | |
| GitHubデプロイ | |
→ 詳細: references/integration-plugins.md
| 插件 | 说明 | 示例 |
|---|---|---|
| 邮件发送 | |
| Slack通知 | |
| AI调用 | |
| GitHub部署 | |
→ 详情: references/integration-plugins.md
ファイル操作
文件操作
| プラグイン | 説明 | 例 |
|---|---|---|
| ファイル書き込み | |
| ストレージアップロード | |
| ファイル読み込み | |
| ディレクトリ読み込み | |
→ 詳細: references/file-plugins.md
| 插件 | 说明 | 示例 |
|---|---|---|
| 文件写入 | |
| 存储上传 | |
| 文件读取 | |
| 目录读取 | |
→ 详情: references/file-plugins.md
Vue.js連携
Vue.js联动
| プラグイン | 説明 | 例 |
|---|---|---|
| Vueコンポーネント | |
| headに追加 | |
| body終了前に追加 | |
→ 詳細: references/vue-plugins.md
| 插件 | 说明 | 示例 |
|---|---|---|
| Vue组件 | |
| 头部追加 | |
| 页面底部追加 | |
→ 详情: references/vue-plugins.md
プラグイン種別
插件类型
関数プラグイン (Function)
函数插件 (Function)
出力を生成または処理を実行する関数。
smarty
{function_name param1="value1" param2="value2"}生成输出或执行处理的函数。
smarty
{function_name param1="value1" param2="value2"}修飾子プラグイン (Modifier)
修饰符插件 (Modifier)
変数の値を変換・加工する。パイプ()で連結可能。
|smarty
{$variable|modifier1|modifier2:param}转换、加工变量值,可通过竖线()链式调用。
|smarty
{$variable|modifier1|modifier2:param}ブロックプラグイン (Block)
块插件 (Block)
開始タグと終了タグで囲まれた範囲を処理。
smarty
{block_name param="value"}
コンテンツ
{/block_name}处理开始标签与结束标签包裹的内容范围。
smarty
{block_name param="value"}
内容
{/block_name}カテゴリ別リファレンス
分类参考
| カテゴリ | ファイル | 主なプラグイン |
|---|---|---|
| 構文リファレンス | syntax.md | 基本構文、制御構造、組み込み変数、ベストプラクティス |
| API・データ取得 | api-plugins.md | api_internal, assign_topics_list, assign_tag_list |
| 文字列処理 | string-plugins.md | escape, truncate, date_format, translate |
| 配列操作 | array-plugins.md | count, in_array, implode, explode, sort系 |
| フォーム・UI | form-plugins.md | fileupload, inquiry_input, pager, html_* |
| 認証・権限 | auth-plugins.md | rcms_auth, login, logout |
| 外部連携 | integration-plugins.md | sendmail, slack_*, ai_completion |
| ファイル操作 | file-plugins.md | write_file, put_file, read_file, read_dir |
| Vue.js連携 | vue-plugins.md | rcms_vue_component, head_include |
| 全プラグイン | all-plugins.md | 全206プラグイン一覧 |
| 分类 | 文件 | 主要插件 |
|---|---|---|
| 语法参考 | syntax.md | 基本语法、控制结构、内置变量、最佳实践 |
| API与数据获取 | api-plugins.md | api_internal, assign_topics_list, assign_tag_list |
| 字符串处理 | string-plugins.md | escape, truncate, date_format, translate |
| 数组操作 | array-plugins.md | count, in_array, implode, explode, 排序类 |
| 表单与UI | form-plugins.md | fileupload, inquiry_input, pager, html_* |
| 认证与权限 | auth-plugins.md | rcms_auth, login, logout |
| 外部联动 | integration-plugins.md | sendmail, slack_*, ai_completion |
| 文件操作 | file-plugins.md | write_file, put_file, read_file, read_dir |
| Vue.js联动 | vue-plugins.md | rcms_vue_component, head_include |
| 全插件 | all-plugins.md | 全部206个插件列表 |
使用例
使用示例
コンテンツ一覧をAPIで取得して表示
通过API获取内容列表并展示
smarty
{assign var="queries" value=$dataSet.emptyArray}
{append var="queries" index="cnt" value=10}
{append var="queries" index="filter" value="topics_flg = 1"}
{api_internal
endpoint='/rcms-api/1/news'
method='GET'
member_id=1
queries=$queries
var='result'
}
{foreach from=$result.list item="news"}
<h2>{$news.subject|escape}</h2>
<p>{$news.contents|truncate:200}</p>
<time>{$news.ymd|date_format:"%Y年%m月%d日"}</time>
{/foreach}
{pager data=$result.pageInfo}smarty
{assign var="queries" value=$dataSet.emptyArray}
{append var="queries" index="cnt" value=10}
{append var="queries" index="filter" value="topics_flg = 1"}
{api_internal
endpoint='/rcms-api/1/news'
method='GET'
member_id=1
queries=$queries
var='result'
}
{foreach from=$result.list item="news"}
<h2>{$news.subject|escape}</h2>
<p>{$news.contents|truncate:200}</p>
<time>{$news.ymd|date_format:"%Y年%m月%d日"}</time>
{/foreach}
{pager data=$result.pageInfo}フォーム送信後にSlack通知
表单提交后发送Slack通知
smarty
{sendmail
var=mail_result
to=$inquiry.email
subject="お問い合わせありがとうございます"
mail_template="inquiry_thanks"
}
{slack_post_message
webhook_url=$smarty.const.SLACK_WEBHOOK_URL
text="新規問い合わせ: {$inquiry.name}様 - {$inquiry.subject}"
}smarty
{sendmail
var=mail_result
to=$inquiry.email
subject="感谢您的咨询"
mail_template="inquiry_thanks"
}
{slack_post_message
webhook_url=$smarty.const.SLACK_WEBHOOK_URL
text="新咨询: {$inquiry.name} 先生/女士 - {$inquiry.subject}"
}権限に応じた表示制御
根据权限控制显示内容
smarty
{rcms_auth target="write:news"}
<a href="/management/news/edit/">編集</a>
{/rcms_auth}
{rcms_auth target="delete:news"}
<button class="delete-btn">削除</button>
{/rcms_auth}smarty
{rcms_auth target="write:news"}
<a href="/management/news/edit/">编辑</a>
{/rcms_auth}
{rcms_auth target="delete:news"}
<button class="delete-btn">删除</button>
{/rcms_auth}Part 2: Webhook・バッチ処理パターン
Part 2: Webhook・批量处理方案
Kuroco HeadlessCMSでのWebhook、バッチ処理、外部連携に関するベストプラクティス。
Smarty構文について: バッチ処理・トリガーはSmartyテンプレートで記述します。構文やプラグインの詳細は上記 Part 1 を参照してください。
Kuroco HeadlessCMS中Webhook、批量处理、外部联动的最佳实践。
关于Smarty语法: 批量处理、触发器使用Smarty模板编写。语法与插件详情请参考上述Part 1。
バッチ処理
批量处理
概要
概述
バッチ処理は一定時間ごとに自動実行される処理。
実行頻度の選択肢:
| 頻度 | 用途 |
|---|---|
| 15分毎 | 頻繁な同期が必要な場合 |
| 30分毎 | 準リアルタイム処理 |
| 1時間毎 | 定期的な集計・更新 |
| 毎日(指定時刻) | 日次レポート、バックアップ |
批量处理是按固定时间间隔自动执行的任务。
执行频率选项:
| 频率 | 用途 |
|---|---|
| 每15分钟 | 需要频繁同步的场景 |
| 每30分钟 | 准实时处理 |
| 每1小时 | 定期统计与更新 |
| 每日(指定时间) | 日度报告、备份 |
ユースケース
使用场景
- 外部システムへのCSV生成・連携
- 外部システムからのデータ取り込み
- ログ集計・統計データ算出
- 定期的なメール配信
- GitHub Actions連携(デプロイトリガー)
- 生成CSV并同步至外部系统
- 从外部系统导入数据
- 日志统计与数据计算
- 定期邮件发送
- GitHub Actions联动(部署触发)
バッチ処理の作成
创建批量处理
管理画面: [オペレーション] → [バッチ処理] → [追加]
| 項目 | 説明 | 例 |
|---|---|---|
| タイトル | バッチの名前 | CSV出力バッチ |
| 識別子 | ユニークな識別子(英数字) | csv_export |
| 実行頻度 | 実行間隔 | 毎日 03:00 |
| 実行内容 | Smarty構文で記述 | 下記参照 |
管理后台: [操作] → [批量处理] → [添加]
| 项目 | 说明 | 示例 |
|---|---|---|
| 标题 | 批量任务名称 | CSV导出任务 |
| 标识符 | 唯一标识符(英数字) | csv_export |
| 执行频率 | 执行间隔 | 每日 03:00 |
| 执行内容 | 使用Smarty语法编写 | 详见下文 |
内部API呼び出し
内部API调用
基本構文
基本语法
smarty
{api_internal
endpoint='/rcms-api/1/news'
method='GET'
member_id=1
queries=$queries
var='response'
}smarty
{api_internal
endpoint='/rcms-api/1/news'
method='GET'
member_id=1
queries=$queries
var='response'
}コンテンツ一覧取得
获取内容列表
smarty
{assign var="queries" value=$dataSet.emptyArray}
{append var="queries" index="cnt" value=0}
{append var="queries" index="filter" value="topics_flg = 1"}
{api_internal
endpoint='/rcms-api/1/news'
method='GET'
member_id=1
queries=$queries
var='news_list'
}
{foreach from=$news_list.list item="news"}
ID: {$news.topics_id}, タイトル: {$news.subject}
{/foreach}smarty
{assign var="queries" value=$dataSet.emptyArray}
{append var="queries" index="cnt" value=0}
{append var="queries" index="filter" value="topics_flg = 1"}
{api_internal
endpoint='/rcms-api/1/news'
method='GET'
member_id=1
queries=$queries
var='news_list'
}
{foreach from=$news_list.list item="news"}
ID: {$news.topics_id}, 标题: {$news.subject}
{/foreach}コンテンツ作成
创建内容
smarty
{assign var="body" value=$dataSet.emptyArray}
{append var="body" index="subject" value="タイトル"}
{append var="body" index="contents" value="本文"}
{append var="body" index="topics_flg" value=1}
{api_internal
endpoint='/rcms-api/1/news/insert'
method='POST'
member_id=1
body=$body
var='result'
}smarty
{assign var="body" value=$dataSet.emptyArray}
{append var="body" index="subject" value="标题"}
{append var="body" index="contents" value="正文"}
{append var="body" index="topics_flg" value=1}
{api_internal
endpoint='/rcms-api/1/news/insert'
method='POST'
member_id=1
body=$body
var='result'
}外部API呼び出し
外部API调用
基本構文
基本语法
smarty
{api_request
url='https://api.example.com/endpoint'
method='GET'
headers=$headers
body=$body
var='response'
}smarty
{api_request
url='https://api.example.com/endpoint'
method='GET'
headers=$headers
body=$body
var='response'
}POSTリクエスト例
POST请求示例
smarty
{assign var="headers" value=$dataSet.emptyArray}
{append var="headers" index="Content-Type" value="application/json"}
{append var="headers" index="Authorization" value="Bearer YOUR_API_KEY"}
{assign var="body" value=$dataSet.emptyArray}
{append var="body" index="message" value="Hello"}
{api_request
url='https://api.example.com/post'
method='POST'
headers=$headers
body=$body|@json_encode
var='response'
}smarty
{assign var="headers" value=$dataSet.emptyArray}
{append var="headers" index="Content-Type" value="application/json"}
{append var="headers" index="Authorization" value="Bearer YOUR_API_KEY"}
{assign var="body" value=$dataSet.emptyArray}
{append var="body" index="message" value="Hello"}
{api_request
url='https://api.example.com/post'
method='POST'
headers=$headers
body=$body|@json_encode
var='response'
}トリガー処理
触发器处理
コンテンツ更新時のトリガー
内容更新时的触发器
管理画面: [コンテンツ定義] → [トリガー設定]
利用可能なイベント:
| イベント | タイミング |
|---|---|
| 作成時 | コンテンツ新規作成後 |
| 更新時 | コンテンツ更新後 |
| 削除時 | コンテンツ削除後 |
| 公開時 | 公開ステータス変更時 |
利用可能な変数:
smarty
{$topics.topics_id} {* コンテンツID *}
{$topics.subject} {* タイトル *}
{$topics.contents} {* 本文 *}
{$topics.ymd} {* 公開日 *}
{$topics.ext_col_01} {* 拡張項目 *}管理后台: [内容定义] → [触发器设置]
可用事件:
| 事件 | 触发时机 |
|---|---|
| 创建时 | 内容新建完成后 |
| 更新时 | 内容更新完成后 |
| 删除时 | 内容删除完成后 |
| 发布时 | 发布状态变更时 |
可用变量:
smarty
{$topics.topics_id} {* 内容ID *}
{$topics.subject} {* 标题 *}
{$topics.contents} {* 正文 *}
{$topics.ymd} {* 发布日期 *}
{$topics.ext_col_01} {* 扩展字段 *}フォーム送信時のトリガー
表单提交时的触发器
管理画面: [フォーム] → [トリガー設定]
smarty
{$inquiry.inquiry_id} {* 回答ID *}
{$inquiry.name} {* 名前 *}
{$inquiry.email} {* メールアドレス *}
{$inquiry.message} {* メッセージ *}管理后台: [表单] → [触发器设置]
smarty
{$inquiry.inquiry_id} {* 回复ID *}
{$inquiry.name} {* 姓名 *}
{$inquiry.email} {* 邮箱地址 *}
{$inquiry.message} {* 留言内容 *}外部サービス連携
外部服务联动
詳細な連携パターン: references/integrations.md を参照
详细联动方案: 请参考 references/integrations.md
Slack通知
Slack通知
smarty
{assign var="message" value=$dataSet.emptyArray}
{append var="message" index="text" value="通知メッセージ"}
{slack_send
webhook_url="https://hooks.slack.com/services/xxx/yyy/zzz"
body=$message|@json_encode
}smarty
{assign var="message" value=$dataSet.emptyArray}
{append var="message" index="text" value="通知消息"}
{slack_send
webhook_url="https://hooks.slack.com/services/xxx/yyy/zzz"
body=$message|@json_encode
}メール通知
邮件通知
smarty
{send_mail
to="recipient@example.com"
subject="件名"
body="本文"
}smarty
{send_mail
to="recipient@example.com"
subject="标题"
body="正文"
}GitHub Actions連携
GitHub Actions联动
smarty
{assign var="headers" value=$dataSet.emptyArray}
{append var="headers" index="Authorization" value="token YOUR_GITHUB_TOKEN"}
{append var="headers" index="Accept" value="application/vnd.github.v3+json"}
{assign var="body" value=$dataSet.emptyArray}
{append var="body" index="event_type" value="kuroco-update"}
{api_request
url='https://api.github.com/repos/owner/repo/dispatches'
method='POST'
headers=$headers
body=$body|@json_encode
var='response'
}smarty
{assign var="headers" value=$dataSet.emptyArray}
{append var="headers" index="Authorization" value="token YOUR_GITHUB_TOKEN"}
{append var="headers" index="Accept" value="application/vnd.github.v3+json"}
{assign var="body" value=$dataSet.emptyArray}
{append var="body" index="event_type" value="kuroco-update"}
{api_request
url='https://api.github.com/repos/owner/repo/dispatches'
method='POST'
headers=$headers
body=$body|@json_encode
var='response'
}ベストプラクティス
最佳实践
負荷を考慮した実行時間
考虑负载的执行时间
- システム負荷の低い時間帯(深夜・早朝)に設定
- 大量データ処理は1日1回に制限
- ページネーションを使用して分割処理
- 选择系统负载低的时段(深夜、凌晨)执行
- 大量数据处理限制为每日1次
- 使用分页进行分段处理
エラーハンドリング
错误处理
smarty
{api_internal
endpoint='/rcms-api/1/news'
method='GET'
member_id=1
var='response'
}
{if $response.errors}
{slack_send webhook_url="..." text="エラー: {$response.errors|@json_encode}"}
{log message="エラー: {$response.errors|@json_encode}"}
{else}
{log message="処理完了: {$response.pageInfo.totalCnt}件"}
{/if}smarty
{api_internal
endpoint='/rcms-api/1/news'
method='GET'
member_id=1
var='response'
}
{if $response.errors}
{slack_send webhook_url="..." text="错误: {$response.errors|@json_encode}"}
{log message="错误: {$response.errors|@json_encode}"}
{else}
{log message="处理完成: {$response.pageInfo.totalCnt}条"}
{/if}タイムアウト対策
超时应对
大量データは分割処理:
smarty
{assign var="page" value=1}
{while true}
{assign var="queries" value=$dataSet.emptyArray}
{append var="queries" index="pageID" value=$page}
{append var="queries" index="cnt" value=100}
{api_internal endpoint='/rcms-api/1/news' method='GET' member_id=1 queries=$queries var='response'}
{foreach from=$response.list item="item"}
{* 処理 *}
{/foreach}
{if $page >= $response.pageInfo.totalPageCnt}{break}{/if}
{assign var="page" value=$page+1}
{/while}大量数据采用分段处理:
smarty
{assign var="page" value=1}
{while true}
{assign var="queries" value=$dataSet.emptyArray}
{append var="queries" index="pageID" value=$page}
{append var="queries" index="cnt" value=100}
{api_internal endpoint='/rcms-api/1/news' method='GET' member_id=1 queries=$queries var='response'}
{foreach from=$response.list item="item"}
{* 处理逻辑 *}
{/foreach}
{if $page >= $response.pageInfo.totalPageCnt}{break}{/if}
{assign var="page" value=$page+1}
{/while}関連スキル
相关技能
- - API設計・認証パターン、コンテンツCRUD操作
/kuroco-api-content - - 管理API(mng_api)の操作
/kuroco-mng-api-browser
- - API设计与认证方案、内容CRUD操作
/kuroco-api-content - - 管理API(mng_api)操作
/kuroco-mng-api-browser
関連ドキュメント
相关文档
- - バッチ処理の使い方
../kuroco-docs/docs/tutorials/how-to-use-batch.md - - GitHub Actions連携
../kuroco-docs/docs/tutorials/auto-run-github-with-contents-update.md - - Slack通知
../kuroco-docs/docs/tutorials/send-slack-notification-after-a-form-has-been-submitted.md - - トリガー変数
../kuroco-docs/docs/reference/trigger-variables.md
- - 批量处理使用方法
../kuroco-docs/docs/tutorials/how-to-use-batch.md - - GitHub Actions联动
../kuroco-docs/docs/tutorials/auto-run-github-with-contents-update.md - - Slack通知设置
../kuroco-docs/docs/tutorials/send-slack-notification-after-a-form-has-been-submitted.md - - 触发器变量
../kuroco-docs/docs/reference/trigger-variables.md