我已经构建了一个新的内容元素类型,当您查看后端时,在框内您只能看到模块的名称。我想更改里面显示的信息。
我可以使用“标题”字段,但是有没有办法使用另一个字段?
两个答案
那里显示的字段与列表模块中显示的字段相同。它是使用扩展名中的 ['ctrl']['label'] 在表的 TCA 中设置的ext_tables.php
$TCA['tx_myext_mytable'] = array(
'ctrl' => array(
'title' => 'My Table'
'label' => 'name_of_the_field_to_display_as_header'
// end snip
如果这对您来说还不够,您可以使用挂钩在预览中显示任意 HTML。钩子叫做$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['tt_content_drawItem']
.
将使用具有此签名的函数调用该钩子:
public function preProcess(
tx_cms_layout &$parentObject, // parent object
&$drawItem, // i have no idea what this is
&$headerContent, /* the content of the header
(the grey bar in the screenshot i think) */
&$itemContent, /* the content of the preview
(the white area in your screenshot */
array &$row // the content element's record
)
因此,您在该函数中所要做的就是将 itemContent 和 headerContent 设置为您想要显示的任何内容。
陷阱:
CType
和(如果适用)list_type
字段,以便您只操作自己的内容元素。可以在“fed”扩展中找到一个示例。我希望这有帮助。
只是对 adhominem answear #2 的一点更新,这是正确的。
今天在 TYPO3 6.2 及更高版本中,你的钩子类必须继承接口TYPO3\CMS\Backend\View\PageLayoutViewDrawItemHookInterface
长得像爱人
<?php
namespace TYPO3\CMS\Backend\View;
/**
* Interface for classes which hook into PageLayoutView and do additional
* tt_content_drawItem processing.
*
* @author Oliver Hader <oliver@typo3.org>
*/
interface PageLayoutViewDrawItemHookInterface {
/**
* Preprocesses the preview rendering of a content element.
*
* @param \TYPO3\CMS\Backend\View\PageLayoutView $parentObject Calling parent object
* @param boolean $drawItem Whether to draw the item using the default functionalities
* @param string $headerContent Header content
* @param string $itemContent Item content
* @param array $row Record row of tt_content
* @return void
*/
public function preProcess(\TYPO3\CMS\Backend\View\PageLayoutView &$parentObject, &$drawItem, &$headerContent, &$itemContent, array &$row);
}
&$drawItem
是布尔值并作为参考发送,通过将其更改为$drawItem = false;
将停止预览的默认呈现。