在扩展程序中使用Page中的媒体字段

时间:2012-01-17 10:18:25

标签: php typo3 typoscript

我们都可能知道以下代码段,该代码段获取页面的媒体字段的第一个条目,例如在页面上显示标题图像。

10 = IMAGE
10.file {
  import = uploads/media/
  import.data = levelmedia: 0, slide
  import.listNum = 0
}

我正在创建一个需要使用此媒体的扩展程序(插件,没有ItemuserFunc等)。我不想在php中处理几十个typoscript指令来创建这个图像。我如何使用上面的例子通过typoscript处理媒体字段,使用核心功能而不是重新发明轮子?

所以现在我在扩展代码中,拥有一系列页面记录。怎么进一步?下面的代码没有提供我需要的功能,因为我没有在页面级别上工作(就像我在TMENU中使用上面的TS时那样)。

$content .= $this->cObj->stdWrap($page['media'], $this->conf['media_stdWrap.']);

1 个答案:

答案 0 :(得分:1)

拥有一组页面记录($pages),其关联键与数据库中的字段名称相同,主要是 media 字段,您只需遍历数组并创建使用Typoscript配置的图像。

示例1(程序员设置渲染)

foreach($pages as $value) {
  $mediaField = t3lib_div::trimExplode(',', $value['media']);
  if(!$mediaField[0]) continue;

  $imageConf = array(
    'file' => 'uploads/media/' . $mediaField[0],
  );
  $content .= $this->cObj->cObjGetSingle('IMAGE', $imageConf);
}

示例2(编辑器设置渲染)

foreach($pages as $value) {
  $this->cObj->data = $value;
  $content .= $this->cObj->stdWrap($value['media'], $this->conf['media_stdWrap.']);
}

它设置页面数据,以便它们在Typoscript中以field形式提供。然后配置看起来像这样:

{
  media_stdWrap {
    cObject = IMAGE
    cObject {
      file {
        import = uploads/media/
        import.field = media
        import.listNum = 0
      }
    }
  }
}

实施例3(前两个实施例的组合)

foreach($pages as $value) {
  $mediaField = t3lib_div::trimExplode(',', $value['media']);
  $mediaOutput = '';

  // Creating the output with a default rendering
  if($mediaField[0]) {
    $imageConf = array(
      'file' => 'uploads/media/' . $mediaField[0],
    );
    $mediaOutput = $this->cObj->cObjGetSingle('IMAGE', $imageConf);
  }

  // Allowing custom Typoscript to completely modify the media part
  if(array_key_exists('media_stdWrap.', $this->conf)) {
    $this->cObj->data = $value;
    $mediaOutput = $this->cObj->stdWrap($mediaOutput, $this->conf['media_stdWrap.']);
  }

  $content .= $mediaOutput;
}

注意:这些示例完全未经测试。我已经把它们想出来了。