如何从TypoScript中的插件flexform读取值?

时间:2014-07-16 20:26:03

标签: typo3 typoscript

我有一个自定义内容元素的插件。该插件包含一个flexform。我想在TypoScript设置中使用flexform中的值。我怎么能这样做?

更具体地说,flexform定义为:

 <T3DataStructure>
  <meta>
    <langDisable>1</langDisable>
  </meta>
  <sheets>
    <sDEF>
      <ROOT>
        <TCEforms>
          <sheetTitle>LLL:EXT:cb_foundation/Resources/Private/Language/locallang_db.xlf:magellan.sheetTitle</sheetTitle>
        </TCEforms>
        <type>array</type>
        <el>
          <settings.magellan.cols>
            <TCEforms>
              <label>LLL:EXT:cb_foundation/Resources/Private/Language/locallang_db.xlf:magellan.cols</label>
              <config>
                <type>input</type>
                <size>20</size>
                <eval>trim</eval>
              </config>
            </TCEforms>
          </settings.magellan.cols>
        </el>
      </ROOT>
    </sDEF>
  </sheets>
</T3DataStructure>

我的自定义元素使用以下TypoScript添加到tt_content

lib.cb_foundation.magellan = HMENU
lib.cb_foundation.magellan {
    1 = TMENU
    1 {
        sectionIndex = 1
        sectionIndex.type = header
        sectionIndex.useColPos = 0
        wrap = <div data-magellan-expedition="fixed"><dl class="sub-nav"> | </dl></div>
        NO {
            allWrap = <dd data-magellan-arrival="c{field:sectionIndex_uid}">|</dd>
            allWrap.insertData = 1
        }
    }
    special = list
    special.value.data = page:uid
}

tt_content.cbfoundation_magellan =< lib.cb_foundation.magellan

我想要做的是使用flexform中找到的值设置tt_content.cbfoundation_magellan.1.sectionIndex.useColPos。我怎么能这样做?

4 个答案:

答案 0 :(得分:4)

这是不可能的。不幸的是,Typoscript不会解析flexform中的值。

您需要一个extbase控制器或pi1来从flexform获取值,并将它们分配给一个呈现自定义内容元素的单独模板。

Extbase示例:

class ContentElementsController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {

    public function YourContentElementAction() {
        // Get the data object (contains the tt_content fields)
        $data = $this->configurationManager->getContentObject()->data;

        // Append flexform values
        $this->configurationManager->getContentObject()->readFlexformIntoConf($data['pi_flexform'], $data);

        // Assign to template
        $this->view->assign('data', $data);
    }

}

答案 1 :(得分:0)

我不知道,如果扩展编辑或TYPO3 6.2.26带来了功能,但以下内容适用于我:

dataWrap = {field:flexform_YOURFIELD}

答案 2 :(得分:0)

以下StackOverflow答案描述了如何使用小型PHP USER类从TS安装程序访问EXT新闻的插件灵活设置:

https://stackoverflow.com/a/40006158/430742

应该很容易适应其他插件及其flexform设置。

答案 3 :(得分:0)

如上所述here现在有一个解决方案,现在TYPO3&gt; = 8.4。

TYPO3 Core Changelog中的功能为documented