PHP/OpenTBS/DocX 嵌套数组/子块
PHP/OpenTBS/DocX nested arrays / subblock
实际测试 opentbs 以根据我网站上的模板生成 docx。我在整合图像时遇到问题。
我成功地在循环中添加了图像,但我的问题是将它们集成到嵌套循环中。
我有一个天数对象数组,里面有一个图像路径数组(每天都有额外的数据)
我的数据模式是这样的:
// Initialisation du Parser
$TBS = new clsTinyButStrong;
$TBS->Plugin(TBS_INSTALL, OPENTBS_PLUGIN);
// Chargement du fichier Modèle
$TBS->LoadTemplate(realpath(dirname(__FILE__)).'/tbs/rendu-v2.docx', OPENTBS_ALREADY_UTF8);
$steps = array(
stdClass {
day: 'day 1',
name: 'My 1st step',
images: array(
'pathToMyFirstImage',
'pathToMySecondImage'
)
},
stdClass {
day: 'day 2 & 3',
name: 'My 2st step',
images: [
'pathToMyThirdImage',
'pathToMyFourthImage'
]
}
);
$TBS->MergeBlock( 'steps2', $steps);
$TBS->Show(OPENTBS_DOWNLOAD);
用我的话模板:
[steps2;block=begin]
JOUR [steps2.day;sub1=images] : [steps2.name]
[steps2.date]
[steps2.description]
[steps2_sub1; block=begin]
[X] (picture with [steps2_sub1.val;ope=changepic;tagpos=inside] as text sustitution)
[steps2_sub1; block=end]
[steps2; block=end]```
实际上,在输出文件中,我的子块是这样显示的,没有被解释。
我查看了这个解决方案 ,但结尾部分有点奇怪,而且只使用 [steps2_sub1;block=end]
。
OpenTBS 文档没有给出带有块的子块的完整示例。
有没有人看出我误解了什么?
编辑:我的子块不起作用,显示为 "code" 且未被解释。
谢谢,
马修
我在您的代码段中发现了 2 个错误。
1) TBS区分大小写。
所以片段:
[STEPS2.DAY;SUB1=IMAGES]
应替换为:
[steps2.day;sub1=images]
2)参数'sub1'是一个块参数,所以它应该只定义在有参数'block'的字段中。否则忽略。
所以片段:
[steps2;block=begin]
[steps2.day;sub1=images]
应替换为:
[steps2;block=begin;sub1=images]
[steps2.day]
看来 TBS 是 space 敏感的:我在开始块中的 sub1 分号前有一个 space(MS Word 在 FR 语言中自动添加它)。
接下来是工作代码:
[steps2;block=begin;sub1=images]
[STEPS2.DAY] : [STEPS2.NAME]
[steps2.date]
[steps2.description;strconv=no]
[X] <- Image with "[steps2_sub1.val;ope=changepic;tagpos=inside;block=tbs:p]" as Text Replacement
[steps2;block=end]
谢谢大家
顺便问一下,如何管理显示图片的各种方式?
我将有 0 到 4 张图片这样显示:
| My Page |
| |
| Case 1 image |
[ 100% Width ]
| |
| Case 2 images |
[ 50% ][ 50% ]
| |
| Case 3 images |
[ 50% ][ 50% ]
[ 100% ]
| |
| Case 4 images |
[ 50% ][ 50% ]
[ 50% ][ 50% ]
有没有可能达到这样的效果?
实际测试 opentbs 以根据我网站上的模板生成 docx。我在整合图像时遇到问题。 我成功地在循环中添加了图像,但我的问题是将它们集成到嵌套循环中。
我有一个天数对象数组,里面有一个图像路径数组(每天都有额外的数据)
我的数据模式是这样的:
// Initialisation du Parser
$TBS = new clsTinyButStrong;
$TBS->Plugin(TBS_INSTALL, OPENTBS_PLUGIN);
// Chargement du fichier Modèle
$TBS->LoadTemplate(realpath(dirname(__FILE__)).'/tbs/rendu-v2.docx', OPENTBS_ALREADY_UTF8);
$steps = array(
stdClass {
day: 'day 1',
name: 'My 1st step',
images: array(
'pathToMyFirstImage',
'pathToMySecondImage'
)
},
stdClass {
day: 'day 2 & 3',
name: 'My 2st step',
images: [
'pathToMyThirdImage',
'pathToMyFourthImage'
]
}
);
$TBS->MergeBlock( 'steps2', $steps);
$TBS->Show(OPENTBS_DOWNLOAD);
用我的话模板:
[steps2;block=begin]
JOUR [steps2.day;sub1=images] : [steps2.name]
[steps2.date]
[steps2.description]
[steps2_sub1; block=begin]
[X] (picture with [steps2_sub1.val;ope=changepic;tagpos=inside] as text sustitution)
[steps2_sub1; block=end]
[steps2; block=end]```
实际上,在输出文件中,我的子块是这样显示的,没有被解释。
我查看了这个解决方案 [steps2_sub1;block=end]
。
OpenTBS 文档没有给出带有块的子块的完整示例。
有没有人看出我误解了什么?
编辑:我的子块不起作用,显示为 "code" 且未被解释。
谢谢,
马修
我在您的代码段中发现了 2 个错误。
1) TBS区分大小写。
所以片段:
[STEPS2.DAY;SUB1=IMAGES]
应替换为:
[steps2.day;sub1=images]
2)参数'sub1'是一个块参数,所以它应该只定义在有参数'block'的字段中。否则忽略。
所以片段:
[steps2;block=begin]
[steps2.day;sub1=images]
应替换为:
[steps2;block=begin;sub1=images]
[steps2.day]
看来 TBS 是 space 敏感的:我在开始块中的 sub1 分号前有一个 space(MS Word 在 FR 语言中自动添加它)。
接下来是工作代码:
[steps2;block=begin;sub1=images]
[STEPS2.DAY] : [STEPS2.NAME]
[steps2.date]
[steps2.description;strconv=no]
[X] <- Image with "[steps2_sub1.val;ope=changepic;tagpos=inside;block=tbs:p]" as Text Replacement
[steps2;block=end]
谢谢大家
顺便问一下,如何管理显示图片的各种方式? 我将有 0 到 4 张图片这样显示:
| My Page |
| |
| Case 1 image |
[ 100% Width ]
| |
| Case 2 images |
[ 50% ][ 50% ]
| |
| Case 3 images |
[ 50% ][ 50% ]
[ 100% ]
| |
| Case 4 images |
[ 50% ][ 50% ]
[ 50% ][ 50% ]
有没有可能达到这样的效果?