【问题标题】:How to render a Content Object from tt_content in my extension with PHP in Typo3 6.1.5如何在 Typo3 6.1.5 中使用 PHP 从我的扩展中的 tt_content 呈现内容对象
【发布时间】:2013-11-29 10:50:51
【问题描述】:

我需要使用我的扩展从 tt_content 呈现特定内容。

我该怎么做?

\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer ?

【问题讨论】:

  • 请详细说明你想做什么,结果应该是什么样子,你试图让它发挥作用。

标签: database plugins typo3 frontend typo3-6.1.x


【解决方案1】:

在 Extbase 扩展中$this->cObj 在当前范围内不再可用,因此您需要先获取它才能使用:

$cObj = $this->configurationManager->getContentObject();

$ttContentConfig = array(
    'tables'       => 'tt_content',
    'source'       => 123,
    'dontCheckPid' => 1
);

$content .= $cObj->RECORDS($ttContentConfig);

【讨论】:

  • 结果是:致命错误:在......中的非对象上调用成员函数 RECORDS()
  • @dusty 那么问题是为什么$this->cObj 不给你一个cObject。在一个正常的分机中。 $this->cObj 应该给你一个 cObject。您可以尝试:t3lib_div::makeInstance('tslib_cObj')->RECORDS($tt_content_conf); 如果这不起作用,您必须发布有关您的扩展的更多信息
  • @dusty 和 nbar,你应该多注意pi_base 编码和 Extbase 之间的区别
  • @biesior 你是对的。我的解决方案是针对 pi_base。当您使用 Extbase 时,您应该将 Daniels 解决方案与流体 cObject 一起使用。在这种情况下,您对我帖子的编辑暗示即使使用 extbase,这仍然是可行的方法,我不确定这是否有帮助。
  • @nbar 为什么? Daniel 的解决方案认为您在运行时知道yourPidyourContentElementID(所以它只是硬编码)。我还有其他情况:使用 BE 模块,我在一个页面上创建不同类型的 tt_content,但用于我的分机的不同父记录。前端插件仅根据显示的父记录的 UID 当前显示选定的内容。使用 TS 无法完成此任务,使用您展示的(我编辑过的)可以遍历数据库结果以仅获取所需的内容。最后,我看不到在不需要时使用冗余 TS 的理由......
【解决方案2】:

您也可以通过控制器进行操作。如果我理解你的问题,你可能想试试这个

$cObject = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer');

【讨论】:

    【解决方案3】:

    您可以使用 Typoscript CONTENT object 并将其传递给流畅的 ViewHelper:

    lib.myContent = CONTENT
    lib.myContent {
      table = tt_content
      select {
        pidInList = yourPid
        where = uid=yourContentElementID
      }
    }
    

    在您使用 Fluid 的扩展程序中:

    <f:cObject typoscriptObjectPath="lib.myContent" />
    

    你也可以通过 viewHelper 传递值,见here

    【讨论】:

    • 此链接已失效。你有这个 ViewHelper 吗?
    【解决方案4】:

    以下脚本将使用 PI 基础扩展。

    $uid = $this->cObj->data['uid'];
    
    if ($this->cObj->data['_LOCALIZED_UID']) {
        $uid = $this->cObj->data['_LOCALIZED_UID'];
    }
    

    以下脚本将用于 EXT BASE 扩展。

    $this->contentObj = $this->configurationManager->getContentObject();
    $uid = $this->contentObj->data['uid'];
    

    有关 TYPO3 的更多信息,您可以访问我的blog

    https://jainishsenjaliya.wordpress.com/2014/08/21/how-to-get-current-tt_content-uid-in-pi-base-and-extbase-extension/

    【讨论】:

      猜你喜欢
      • 2010-09-09
      • 2013-05-11
      • 2014-07-10
      • 1970-01-01
      • 2018-09-20
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多