在流体模板中访问页面记录的MM关系

时间:2016-09-01 22:19:50

标签: typo3 fluid typo3-7.6.x

我目前正在使用TYPO3构建扩展程序,该扩展程序确实将TYPO3核心的pages表扩展到另一个字段。

我的问题描述:

该字段是我自己记录的MM关系,包含描述,一些图像等等...... 因为我的扩展程序不提供自己的插件(它是一般的网站扩展,提供网站模板等),我必须通过流体模板访问pages记录的新字段。 但是,通过访问页面信息数组(使用<v:page.info field="myfield" ... />{data.myfield})中的此字段,我只获取引用行的当前计数(pages-record中数据库列的值)。

所以,我的问题是:

  • 如何在流体模板中访问该附加字段的内容,强制TYPO3识别MM跳转到我引用的记录?什么是通常的&#34; TYPO3-way&#34;那个?

  • 或者我是否必须编写自己的ViewHelper才能获取两条​​记录之间的引用?

  • 是否有针对此的TypoScript解决方案?

我的TCA(扩展页面)是什么样的:

$temporaryColumns = array(
    'tx_user_myext_myfield' => array(
        /* ... some smaller unimportant TCA settings here ... */
        'config' => array(
            'type' => 'group',
            'internal_type' => 'db',
            'allowed' => 'tx_user_myext_mycustomrow',
            'foreign_table' => 'tx_user_myext_mycustomrow',
            'MM' => 'tx_user_myext_mycustomrow_pages_MM',
            'MM_hasUidField' => 1,
            'multiple' => 1
        )
    )
);

(当然,我将$temporaryColumns传递给addTCAcolumnsaddToAllTCAtypes。后端功能正常 - 这不是问题。)

编辑:我无法为此构建插件,因为它是网站的一般部分。 (因此,它将在模板中解决。)只有记录关系应该由用户更改。

我希望你能帮助我;非常感谢你对这个问题的任何回复。

3 个答案:

答案 0 :(得分:2)

最好的方法是扩展/创建页面模型并创建一个插件来显示你的东西。

也可以使用TypoScript

myRecords = CONTENT
myRecords {
  table = tx_user_myext_mycustomrow
  select {
    pidInList = root,-1
    selectFields = tx_user_myext_mycustomrow.*
    join = tx_user_myext_mycustomrow_pages_MM ON tx_user_myext_mycustomrow_pages_MM.uid_local = tx_user_myext_mycustomrow.uid
    where.data = field:_ORIG_uid // field:uid
    where.intval = 1
    where.wrap = tx_user_myext_mycustomrow_pages_MM.uid_foreign=|
    orderBy = tx_user_myext_mycustomrow_pages_MM.sorting_foreign
  }
  renderObj = COA
  renderObj.10 = TEXT
  renderObj.10.field = somefield
  renderObj.10.wrap = <h1>|</h1>
}

# add myRecords to your fluid variables. I assume that the fluidtemplate is in page.10

page.10.variables.myRecords < myRecords

在流体中:

<f:render.raw>{myRecords}</f:render.raw>

正如您所看到的,TS解决方案几乎与Fluid无关,因为html是在TS中构建的。我会建议使用自己的插件。将关系字段添加到页面模型并创建一个小插件需要花费很多时间,并且是进一步开发的良好培训。

答案 1 :(得分:1)

使用DatabaseQueryProcessor(如@bschauer所说),可以使用partial来将HTML与Typoscript分开。

TypoScript配置:

page.10.variables.myRecords = CONTENT
page.10.variables.myRecords {
    table = tx_user_myext_mycustomrow
    select {
        pidInList = root,-1
        selectFields = tx_user_myext_mycustomrow.*
        join = tx_user_myext_mycustomrow_pages_MM ON tx_user_myext_mycustomrow_pages_MM.uid_local = tx_user_myext_mycustomrow.uid
        where.data = field:uid
        where.intval = 1
        where.wrap = tx_user_myext_mycustomrow_pages_MM.uid_foreign=|
        orderBy = tx_user_myext_mycustomrow_pages_MM.sorting_foreign
    }
    renderObj = FLUIDTEMPLATE
    renderObj {
      file = EXT:tx_user_myext/Resources/Private/Partials/MyTemplate.html
      dataProcessing {
        10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
        10.references.fieldName = tx_user_myext_myfield
      }
    }
  }
}

部分MyTemplate.html:

h1>{data.somefield}</h1>

在您的Fluid模板中:

<f:format.raw>{myRecords}</f:format.raw>

答案 2 :(得分:0)

你不能使用DatabaseQueryProcessor吗?

TypoScript配置示例:

  10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
  10 {
    table = tt_address
    pidInList = 123
    where = company="Acme" AND first_name="Ralph"
    order = RAND()
    as = addresses
    dataProcessing {
      10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
      10 {
        references.fieldName = image
      }
    }
  }

https://github.com/TYPO3/TYPO3.CMS/blob/master/typo3/sysext/frontend/Classes/DataProcessing/DatabaseQueryProcessor.php