0

我正在尝试遍历一个简单的数组并在我的docx模板中显示其信息OpenTBS,但无法使其正常工作:(

所以我有一个非常简单array的,我分配给一个块如下:

$TBS = new \clsTinyButStrong();
$TBS->Plugin(TBS_INSTALL, OPENTBS_PLUGIN);
$TBS->LoadTemplate($template, OPENTBS_ALREADY_UTF8);
$myArray = array(   array( 'name' => 'bedroom'),
                    array( 'name' => 'kitchen'),
                    array( 'name' => 'lounge'),
                );
$TBS->MergeBlock( 'myBlock', $myArray);
$output_file_name = 'C:/testTBS.docx';
$TBS->Show(OPENTBS_FILE, $output_file_name);

在我的docx模板中,我尝试了一些简单的事情,例如:

[myBlock.name]  => doesnt display anything

理想情况下,我想重复整个块,你可以想象我的数组会更复杂一些。

我尝试过其他解决方案:

[myBlock; block=begin]
    Name : [onshow; myBlock.0.name;]
    Name : [onshow; myBlock.$;]
    Name :  [onshow; myBlock.#;]
    Name :  [onshow; name;]
    Name :  [onshow; BlockName.0;]
[myBlock; block=end]

所以这种方法很有效,因为它正确地迭代了数组(它显示所有内容 3 次,考虑到我有 3 个子数组,这很好)。但是使用该选项,我找不到如何显示名称,因为我尝试的所有内容都没有显示它,正如您在我的输出中看到的那样:

Name : [onshow; myBlock.0.name;]
Name : 
Name :  [onshow; myBlock.#;]
Name :[onshow; name;]
Name :[onshow; BlockName.0;]

Name : [onshow; myBlock.0.name;]
Name : 
Name :  [onshow; myBlock.#;]
Name :[onshow; name;]
Name :[onshow; BlockName.0;]

Name : [onshow; myBlock.0.name;]
Name : 
Name :  [onshow; myBlock.#;]
Name :[onshow; name;]
Name :[onshow; BlockName.0;]

(我也尝试过同样的事情,没有onshow,没有运气)

我很抱歉问这样一个简单的问题,例如如何迭代数组,但即使阅读了关于该主题的其他几篇文章、文档或浏览他们提供的示例,我也无法找到解决方案简单的问题:(

非常感谢您的帮助,如果您需要更多信息,请告诉我!

4

1 回答 1

2

您在 PHP 端的代码段看起来是正确的。

您的独立模板[myBlock.name]应该与您的数据的第一条记录正确合并。这就是没有定义块边界时的 TBS 行为。

如果没有合并,可能是因为某些设计确实拆分了某些 TBS 标签。解决方案是选择 TBS 标签,剪切它,然后将其作为纯文本(不带格式)粘贴。

DOCX中还有一个用于清理 TBS 标签的 Ms Word 宏,但即使它很实用,它目前仍处于 beta 版本。

您的带有块定义的模板不正确。它应该是这样的:

[myBlock; block=begin]
    Name : [myBlock.name]
    Name : [myBlock.$]
    Name : [myBlock.#]
    Name : [myBlock.name]
[myBlock; block=end]
于 2016-01-11T16:15:32.207 回答