0

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

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

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

所以现在我在我的扩展代码中,有一个页面记录数组。如何走得更远?下面的代码没有提供我需要的功能,因为我不在页面级别上工作(就像我在 TMENU 中使用上面的 TS 时一样)。

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

1 回答 1

1

拥有一个页面记录数组 ( $pages),其关联键与数据库中的字段名称相同,主要是媒体字段,您只需遍历数组并使用 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.']);
}

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

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

示例 3(前 2 个示例的组合)

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;
}

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

于 2012-01-17T11:01:35.093 回答