OpenTBS - 不存在时隐藏图像

时间:2016-01-28 02:19:51

标签: php image docx opentbs

我有一个用url填充的图像列表,或者在某些情况下为空。 我只想在网址存在时显示图像,而不是在未指定网址时显示图像。 有一个非常相似的帖子here,但没有完全回答,所以我再次发布这个帖子。

这是我的php数组:

$myBlock = array(
  'description' => ...,
  'name' => ...,
  'photos' => 
    array (
      0 => string 'C:\path_to\pic_5491y.png'
      1 => string 'C:\path_to\pic_5491y.png'
      2 => string 'C:\path_to\pic_5491y.png'
      3 => int 0
      ...
      9 => int 0
      10 => int 0
    )
);

然后我尝试在一个区块内显示图像(此刻,我只尝试第一张照片)

[myBlock; block=begin]
     (the image I am trying to replace, or hide)
     [CODE]
[myBlock; block=end]

以下是我试图在[CODE]中提出的内容:

  • [myBlock.photos.0;ope=addpic;att=draw:image#xlink:href;when [myBlock.photos.0]!=0]

    ==>> Undefined property: clsTbsLocator::$PrevPosBeg

  • [myBlock.photos.0;ope=changepic;from=[val];tagpos=inside;adjust;unique;]

  • [myBlock.photos.0;ope=changepic;from=[val];tagpos=inside;adjust;unique; onshow; when[myBlock.photos.0] != 0](与之前相同但使用when,最终不会改变任何内容)

    ==>> The picture "0" that is supposed to be added because of parameter "ope=changepic" of the field [myBlock.photos.0] is not found.(当图片的网址为0时引起)

  • [onShow; if[myBlock.photos.0] != 0; then[myBlock.photos.0] :drawing; else ‘1’]

    ==>> [onShow; if0 != 0; then0 :drawing; else '1'](只在文档上显示)

  • [onshow; if[myBlock.photos.0] = 0 ; then ‘’ ; else from=[ myBlock.photos.0]; ope=changepic; tagpos=inside;adjust;unique]

    ==>>没有错误,但不要替换任何图像,即使设置

非常感谢,如果您需要更多详细信息,请告诉我们!

修改

当我使用

时,Skrol的建议可以正常运作
$TBS->MergeBlock('myBlock', $myBlock['photos']);

但我实际上是尝试直接合并$myBlock,因此在我的word文档中,尝试做一个" double foreach"

我无法在模板中创建双重块(原因是我试图在照片前显示一些信息。)

我正在尝试:

[myBlock; block=begin]
   [myBlock.description]   // => Display description before displaying the photos

   [myBlock.photos; block=begin]
   [myBlock.photos; block=end]
[myBlock; block=end]

但是只要我添加第二个myBlock.photos以便我可以遍历它们,就会出现此错误:in block's definition [myBlock...]: a least one tag with parameter 'block=end' is missing.

编辑BIS

在尝试了几个相同的代码之后,我设法摆脱了错误,可能是因为某个地方隐藏了一个糟糕的问题。但现在它正在尝试显示第二个块,而不是创建新的foreach

 This is description 1
 array
 array

 This is description 2
 array
 array

 ....

如果这有助于更好地了解我想要实现的目标,那么我将在PHP中使用相同的内容:

foreach( $myBlock as $myBlockKey => $myBlockData)
{
    echo $myBlockData['description'];
    echo $myBlockData['name'];
    ...

    foreach( $myBlockData['photos'] as $photoKey => $photoData)
    {
       echo $photoData['url'];
    }
}

有关如何定义这个双重块的任何想法??? 我在文档或其他任何地方找不到任何例子:(

1 个答案:

答案 0 :(得分:2)

为了合并$myBlock['photos']中存储的图像,您的代码应如下所示:

PHP:

$TBS->MergeBlock('myBlock', $myBlock['photos']);

DOCX:

[myBlock; block=begin; when 0!=[myBlock.val]]
   (the image I am trying to replace, or hide)
   [myBlock.val;ope=changepic;tagpos=after;adjust;unique;]
[myBlock; block=end]

解释:

  • 命令MergeBlock()确实合并了作为记录集的数据。这是一组具有相同结构的记录。在剪辑中,只有$myBlock['photos']是一个记录集。由于每条记录都是一个值,因此您可以使用虚拟列valkey来获取数据。
  • 参数when 0!=[myBlock.val]使块部分成为条件。因此,只会显示值不等于0的记录。
  • 应使用参数tagpos=after,因为在图像后放置了TBS标记。