我们都可能知道以下代码段,该代码段获取页面的媒体字段的第一个条目,例如在页面上显示标题图像。
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.']);
答案 0 :(得分:1)
拥有一组页面记录($pages
),其关联键与数据库中的字段名称相同,主要是 media 字段,您只需遍历数组并创建使用Typoscript配置的图像。
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);
}
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
}
}
}
}
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;
}
注意:这些示例完全未经测试。我已经把它们想出来了。