对数组进行OpenTBS迭代

时间:2016-01-10 19:05:59

标签: php docx opentbs

我正在尝试遍历一个简单的数组并使用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的情况下尝试了同样的事情,没有运气)

我很遗憾地问一个如此简单的问题,如如何迭代数组,但即使阅读了关于主题,文档或通过他们提供的例子的其他几篇文章,我也无法找到这个简单问题的解决方案:(

非常感谢您的帮助,如果您需要更多信息,请与我们联系!

1 个答案:

答案 0 :(得分:2)

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

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

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

还有一个Ms Word Macro for cleaning TBS tags in DOCX,但即使它很实用,现在还处于测试阶段。

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

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