如何为Flexform插件配置添加工具提示?

5

我想一旦你知道了它,这就很简单了,但是我现在已经花了4个多小时在这个话题上搜索。也许有人可以帮我,给我一个指引。

我正在使用Extbase为TYPO3 6.2开发扩展程序。 插件配置是通过FlexForm完成的。 为了增加可用性,我想在我的FlexForm中添加工具提示(帮助文本或CSH)。

方法1: 我尝试使用标签

<cshFile>

并将相应的XML添加到Extension Files中。 许多论坛和博客建议这种方法已经过时,因此我尝试了另一种方法。

方法2: 在ext_tables.php中为插件添加“locallang_csh_flexforms.xml”文件。 这似乎更合理,也被认为是新的做法。 tx_news扩展程序使用该方法,它总体上具有坚实的代码。

但是对我来说似乎没有起作用,我尝试替换所有已弃用的类(由tx_news使用)并将其克隆到我的插件中。虽然FlexForm已显示,但仍然没有可用的工具提示。 现在,我将发布我的当前状态的一些代码片段。 这是尝试执行与“tx_news”相同操作的尝试。

这些是我主要使用的文件,如果我忘记了其他内容,请告诉我,我会添加它们。

tx_news中的功能 enter image description here

ext_tables.php

if (!defined('TYPO3_MODE')) {
    die ('Access denied.');
}
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr(
    'tt_content.pi_flexform.psc_disqus_sso_sso.list', 'EXT:' . $_EXTKEY . '/Resources    /Private/Language/locallang_csh_flexforms.xml');

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
    $_EXTKEY,
    'Sso',
    'Psc Disqus'
);

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile($_EXTKEY,     'Configuration/TypoScript', 'Psc Disqus SSO');

//flexforms
$extensionName = \TYPO3\CMS\Core\Utility    \GeneralUtility::underscoredToUpperCamelCase($_EXTKEY);
$pluginSignature = strtolower($extensionName) . '_sso';

$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_excludelist'][$pluginSignature] = 'layout,recursive,select_key,pages';
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] =     'pi_flexform';

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue($pluginSignature,     'FILE:EXT:'.$_EXTKEY.'/Configuration/FlexForms/SsoSession.xml');

locallang_csh_flexforms.xml

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3locallang>
<meta type="array">
    <description>CSH for flexforms</description>
    <type>CSH</type>
    <fileId>EXT:psc_disqus_sso/locallang_csh_flexforms.xml</fileId>
    <labelContext type="array"></labelContext>
</meta>
<data type="array">
    <languageKey index="default" type="array">
        <label index="settings.useSSO.description">Check to Use SSO Functionality</label>

        <label index="settings.disqus.general.shortName.description">Tells the Disqus service your forum's shortname, which is the unique identifier for your website as registered on Disqus. If undefined, the Disqus embed will not load.</label>
        <label index="settings.disqus.general.title.description">Tells the Disqus service the title of the current page. This is used when creating the thread on Disqus for the first time. If undefined, Disqus will use the <title> attribute of the page. If that attribute could not be used, Disqus will use the URL of the page.</label>
        <label index="settings.disqus.general.categoryId.description">Tells the Disqus service the category to be used for the current page. This is used when creating the thread on Disqus for the first time.</label>
        <label index="settings.disqus.general.disableMobile.description">Tells the Disqus service to never use the mobile optimized version of Disqus.</label>

...(just some more labels and closing tags)...

SsoSession.xml

<T3DataStructure>
<meta>
    <langDisable>1</langDisable>
</meta>
 <sheets>
  <sDEF>
   <ROOT>
     <TCEforms>
        <sheetTitle>SSO Settings</sheetTitle>
     </TCEforms>
     <type>array</type>
     <el>
        <settings.useSSO>
            <TCEforms>
                <label>Activate Disqus Single Sign On</label>
                <config>
                    <type>check</type>
                </config>
                <onChange>reload</onChange>
            </TCEforms>      
        </settings.useSSO>
         <settings.disqus.sso.name>
            <TCEforms>
                <label>Website name (Your site's name. Disqus will display it in the Post As window.)</label>
                <config>
                    <type>input</type>
                    <size>30</size>
                    <default>Website</default>
                </config>
                <displayCond>FIELD:settings.useSSO:REQ:true</displayCond>
            </TCEforms>      
        </settings.disqus.sso.name>
        <settings.disqus.sso.loginButton>
            <TCEforms>
                <label>Login Button (optional)</label>
                <config>
                    <type>group</type>
                    <internal_type>file</internal_type>
                    <allowed>jpg,gif,png</allowed>
                    <max_size>2000</max_size>
                    <uploadfolder>uploads/tx_pscdisqussso/loginButton</uploadfolder>
                    <show_thumbs>1</show_thumbs>
                    <size>1</size>
                    <minitems>0</minitems>
                    <maxitems>1</maxitems>
                </config>
                <displayCond>FIELD:settings.useSSO:REQ:true</displayCond>
            </TCEforms>      
        </settings.disqus.sso.loginButton>
        <settings.disqus.sso.favIcon>
            <TCEforms>
                <label>Icon (optional)</label>
                <config>
                    <type>group</type>
                    <internal_type>file</internal_type>
                    <allowed>jpg,gif,png</allowed>
                    <max_size>2000</max_size>
                    <uploadfolder>uploads/tx_pscdisqussso/loginButton</uploadfolder>
                    <show_thumbs>1</show_thumbs>
                    <size>1</size>
                    <minitems>0</minitems>
                    <maxitems>1</maxitems>
                </config>
                <displayCond>FIELD:settings.useSSO:REQ:true</displayCond>
            </TCEforms>      
        </settings.disqus.sso.favIcon>
        <settings.disqus.sso.loginPage>
            <TCEforms>
                <label>Login Page</label>
                <config>
                    <type>group</type>
                    <internal_type>db</internal_type>
                    <allowed>pages</allowed>
                    <size>1</size>
                    <maxitems>1</maxitems>
                    <minitems>0</minitems>
                    <show_thumbs>1</show_thumbs>
                </config>
                <displayCond>FIELD:settings.useSSO:REQ:true</displayCond>
            </TCEforms>      
        </settings.disqus.sso.loginPage>
        <settings.disqus.sso.loginHeight>
            <TCEforms>
                <label>Login Window Height</label>
                <config>
                    <type>input</type>
                    <size>20</size>
                    <max>30</max>
                    <default>800</default>
                    <eval>int</eval>
                </config>
                <displayCond>FIELD:settings.useSSO:REQ:true</displayCond>
            </TCEforms>      
        </settings.disqus.sso.loginHeight>
        <settings.disqus.sso.loginWidth>
            <TCEforms>
                <label>Login Window Width</label>
                <config>
                    <type>input</type>
                    <size>20</size>
                    <max>30</max>
                    <default>400</default>
                    <eval>int</eval>
                </config>
                <displayCond>FIELD:settings.useSSO:REQ:true</displayCond>
            </TCEforms>      
        </settings.disqus.sso.loginWidth>
     </el>
   </ROOT>
  </sDEF>
  <disqusConfigurationGeneral>
   <ROOT>
     <TCEforms>
      <sheetTitle>Disqus Settings</sheetTitle>
     </TCEforms>
     <type>array</type>
     <el>
        <settings.disqus.general.shortName>
            <TCEforms>
                <label>Disqus Shortname</label>
                <config>
                    <type>input</type>
                    <size>30</size>
                    <eval>required</eval>
                </config>
            </TCEforms>      
        </settings.disqus.general.shortName>
        <settings.disqus.general.title>
            <TCEforms>
                <label>Title (Tells the Disqus service the title of the current page. This is used when creating the thread on Disqus for the first time. If undefined, Disqus will use the &lt;title&gt; attribute of the page. If that attribute could not be used, Disqus will use the URL of the page.)</label>
                <config>
                    <type>input</type>
                    <size>30</size>
                </config>
            </TCEforms>      
        </settings.disqus.general.title>
        <settings.disqus.general.categoryId>
            <TCEforms>
                <label>Disqus Category (see documentation)</label>
                <config>
                    <type>input</type>
                    <size>30</size>
                </config>
            </TCEforms>      
        </settings.disqus.general.categoryId>
        <settings.disqus.general.disableMobile>
            <TCEforms>
                <label>Disable Disqus Mobile Optimization (see documentation)</label>
                <config>
                    <type>check</type>
                </config>
            </TCEforms>      
        </settings.disqus.general.disableMobile>
        <settings.disqus.general.disableMobile>
            <TCEforms>
                <label>Disable Disqus Mobile Optimization (see documentation)</label>
                <config>
                    <type>check</type>
                </config>
            </TCEforms>
        </settings.disqus.general.disableMobile>
     </el>
   </ROOT>
  </disqusConfigurationGeneral>
 </sheets>
</T3DataStructure>
1个回答

9

这非常容易... 但在此情况下,TYPO3 6.2的缓存可能会极其令人恼火。

  1. Let's say that you have an extension with key my_extension and Bar plugin, the common flexform inclusion in ext_tables.php looks like:

    $pluginSignature = str_replace('_','',$_EXTKEY) . '_bar'; // which gives `myextension_bar`
    $GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue($pluginSignature, 'FILE:EXT:' . $_EXTKEY . '/Configuration/FlexForms/flexform_bar.xml');
    
  2. Create file for CSH for an example (name doesn't matter, anyway by convention...):

    typo3conf/ext/my_extension/Resources/Private/Language/locallang_csh_flexform_bar.xlf
    
  3. Add a reference to this locallang in ext_tables.php with proper (!) key

    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr(
        'tt_content.pi_flexform.myextension_bar.list',
        'EXT:my_extension/Resources/Private/Language/locallang_csh_flexform_bar.xlf'
    );
    
  4. MOST IMPORTANT open Install Tool, go to Important actions and click Clear all cache

  5. That's all: your CSH should work now, if it doesn't check if key of locallang (tt_content.pi_flexform...) is valid, also check in Configuration > $GLOBALS['TCA_DESCR'] if it's listed there (if not clear cache form Install tool again)

样例 locallang_csh_flexform_bar.xlf:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<xliff version="1.0">
    <file source-language="en" datatype="plaintext" original="messages" date="2014-05-28T07:44:03Z" product-name="my_extension">
        <header/>
        <body>
            <trans-unit id="settings.disqus.sso.name.description">
                <source>Your site's name. Disqus will display it in the Post As window.</source>
            </trans-unit>
        </body>
    </file>
</xliff>

1
这就是解决方案,缓存框架又一次打在了我的脸上。顺便说一句,感谢提供 XLF 示例,我在其他地方找不到任何示例。 - Panade
对我有用。首先我只尝试了 XLF 文件中的字段名,然后我意识到附录 “.description” 对它的工作很重要。 - Paul Beck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接