Typo3 V6:如何创建内容元素容器? (没有电视)

时间:2013-03-01 11:34:29

标签: php mysql typo3 fluid extbase

对于我正在使用Typo3 v6.0的项目。我正在寻找创建嵌套的内容元素或内容元素容器。我希望能够在不使用特定模板的情况下创建内联双列布局。我希望这样做而不使用使用templavoila。

我尝试过的扩展程序包括gridelementskb_nescefebs_fcemulticolumn,但这些扩展无效,因为它们与Typo3 V6不兼容。

我的目标是像附加图像那样的最终结果。内联双列内容可以省略,使用一次或多次使用,包含任何其他内容元素。

我在这里寻找最简单的解决方案。我更喜欢不得不在像flux这样的解决方案中投入大量的学习时间和什么(http://fedext.net/ - 看起来很酷,但现在也太耗费时间了)

有什么想法吗?

example layout with inline two-column content

8 个答案:

答案 0 :(得分:14)

我是Fluid扩展套件的作者(流量,流体含量,流体页面等),当然希望帮助您了解使用FluidContent制作FCE。它确实没有人们担心的那么先进。至少,它比上面的例子更紧凑。以下结果与FluidContent:

中的示例相同

TypoScript(静态加载:css_styled_content,fluid_content)

plugin.tx_fed.fce.yourname {
    templateRootPath = fileadmin/Templates # if you don't want to use an extension (1)
    # partial and layout root paths not defined (2)
}

关于(1)你真的,真的应该。使用扩展程序可将用户上传的媒体等与您的网站内容分开。如果您这样做,只需使用EXT:...私有资源文件夹的路径。关于(2)这些路径只有在您真正希望使用部分时才是必需的。

然后,模板文件本身(在TS中添加文件所在的路径时自动检测):

{namespace flux=Tx_Flux_ViewHelpers}
<f:layout name="Content" />
<f:section name="Configuration">
    <flux:flexform id="columns" label="Columns" icon="path/to/iconfile.jpg">
        <flux:flexform.grid>
            <flux:flexform.grid.row>
                <flux:flexform.grid.column>
                    <flux:flexform.content name="left" label="Left content" />
                </flux:flexform.grid.column>
                <flux:flexform.grid.column>
                    <flux:flexform.content name="right" label="Right content" />
                </flux:flexform.grid.column>
            </flux:flexform.grid.row>
        </flux:flexform.grid>
    </flux:flexform>
</f:section>
<f:section name="Preview">
    <flux:widget.grid />
</f:section>
<f:section name="Main">
    <div class="row">
        <div class="span6">
            <flux:flexform.renderContent area="left" />
        </div>
        <div class="span6">
            <flux:flexform.renderContent area="right" />
        </div>
    </div>
</f:section>

正如您所看到的,您可以完全自由地添加任何您想要的HTML,使用任何ViewHelpers(如果那是你的东西,甚至渲染TS对象)。要添加其他内容元素,只需添加新模板文件 - 它们将自动被识别。

但它与IRRE的工作方式不同(您可以 实现使用Flux字段 - 如果您希望看到它的演示,请告诉我):它会让您使用本机拖动-n-drop in TYPO3将您的孩子内容元素放入实际的内容容器中 - 就像您以前使用电视一样。

因此,流体内容可能是您最接近电视的内容。

关于Flux过度杀戮,我想告诉你它实际上的表现:

  • 缓存读取TS以了解路径
  • 已检测模板的缓存列表
  • 流体缓存到原生PHP,Flux仅使用Fluid存储配置(这意味着它一直是本机PHP)
  • Flux本身确实注册了一个钩子用户,它对正在保存的内容作出反应,这确实会减慢后端(不明显)
  • Flux本身不会在FE上创建负载,但有一个例外:当处于未缓存的插件中时(FluidContent被缓存!)Flux可能会调用本机PHP缓存代码来读取配置。
  • FluidContent由一个非常简单的控制器组成;输出完全缓存。
  • 您可能希望添加VHS ViewHelper集合 - 它本身创建绝对零负载:它仅使用您使用其ViewHelpers的资源。它包含一堆ViewHelpers,我相信你会发现它很有用。

起初看起来可能看起来很压倒,但我向你保证,与pibase,FlexForm XML,TS或原生Extbase插件相比,知之甚少。如果您想要更多的安全网,我强烈建议您在编辑器中使用XSD架构 - 这可以让您自动完成特殊的<flux:....>标签和其他标签。

然而:它需要你学习一点关于Fluid的逻辑:什么是Layouts和Partials(你很可能想在某些时候使用它们)以及如何使用特殊标签并引用变量(这将是在其他用例中需要 - 但不是手头的那个;它只需要简单的ViewHelper标签。)

我希望这会有所帮助。而且我已经减少了你对Flux过度杀戮和太多学习的恐惧;)

干杯,
克劳斯又名。 NamelessCoder

答案 1 :(得分:5)

有一个startnext project,其中grid_elements中的已知错误已得到修复。 Afaik下一步是使grid_elements与TYPO3 6兼容。但是我想,它们需要几周才能发布。但是,也许它们将从版本2开始(这些日子将与TYPO3 6兼容......)。

查看forge project

答案 2 :(得分:4)

您可能需要查看扩展DCE(http://typo3.org/extensions/repository/view/dce);在那里你可以自己定义内容元素。 或者,您可以使用http://fedext.net/框架创建任何字面意义。只需阅读最新的博客文章,即可了解如何使用这些扩展创建动态内容元素。

答案 3 :(得分:4)

好吧,我有半解决方案。我已经使用WEC Content Elements plugin来管理自定义内容元素。

然后我使用了以下flexform:

<T3DataStructure>
    <ROOT>
        <type>array</type>
        <el>
            <leftColumn>
                <TCEforms type="array">
                    <label>Left column</label>
                    <config>
                        <type>inline</type>
                        <foreign_table>tt_content</foreign_table>
                        <maxitems>100</maxitems>
                        <appearance>
                            <showSynchronizationLink>0</showSynchronizationLink>
                            <showAllLocalizationLink>0</showAllLocalizationLink>
                            <showPossibleLocalizationRecords>0</showPossibleLocalizationRecords>
                            <showRemovedLocalizationRecords>0</showRemovedLocalizationRecords>
                            <expandSingle>1</expandSingle>
                        </appearance>
                    </config>
                </TCEforms>
            </leftColumn>
            <rightColumn>
                <TCEforms type="array">
                    <label>Right column</label>
                    <config>
                        <type>inline</type>
                        <foreign_table>tt_content</foreign_table>
                        <maxitems>100</maxitems>
                        <appearance>
                            <showSynchronizationLink>0</showSynchronizationLink>
                            <showAllLocalizationLink>0</showAllLocalizationLink>
                            <showPossibleLocalizationRecords>0</showPossibleLocalizationRecords>
                            <showRemovedLocalizationRecords>0</showRemovedLocalizationRecords>
                            <expandSingle>1</expandSingle>
                        </appearance>
                    </config>
                </TCEforms>
            </rightColumn>
        </el>
    </ROOT>
</T3DataStructure>

以下前端的typoscript设置:

tt_content.twoColumnContainer = COA
tt_content.twoColumnContainer {
  10 = < lib.stdheader

  20 = COA
  20 {
    wrap = <div class="twocolumn-container"> | </div>

    10 = RECORDS
    10 {
        tables       = tt_content
        dontCheckPid = true
        source.data  = t3datastructure : pi_flexform->leftColumn
        wrap         = <div class="twocolumn-left"> | </div>
    }

    20 = RECORDS
    20 {
        tables       = tt_content
        dontCheckPid = true
        source.data  = t3datastructure : pi_flexform->rightColumn
        wrap         = <div class="twocolumn-right"> | </div>
    }
}

这导致后端内容元素使用IRRE编辑器添加/编辑内容元素。容器元素没有预览,并且两列位于彼此下方(而不是彼此相邻)。所有这一切都是我在谷歌搜索和尝试各种方法/插件后找到的唯一可行的解​​决方案。

希望这有助于某人。

答案 4 :(得分:2)

我会...

  1. 使用2个新字段(每列一个)扩展tt_content表。您可以在phpMyAdmin中手动执行此操作,但是在进行数据库比较时,您可能会在安装工具中意外删除这些字段。所以最好为此创建一个非常简单的扩展 - 它实际上只有2个文件: ext_emconf.php 描述扩展名, ext_tables.sql 用于定义新字段。< / p>

  2. typo3conf / extTables.php 中定义新的内容元素类型(=容器)和2个新字段(一个用于左列,一个用于右列)他们是 IRRE 类型。

  3. 在根页的 TypoScript配置中设置TCAdefaults.tt_content.pid = xxx,以便左/右列元素不会存储在页面本身上,而是存储在某个sysfolder中。

  4. 在模板设置中定义新的内容元素,以便根据需要进行渲染。

  5. 更新

    示例IRRE字段:

    'user_2col_left' => array(
        'exclude' => 1,
        'label' => 'Left column',
        'config' => array(
            'type' => 'inline',
            'foreign_table' => 'tt_content',
            'maxitems' => '10',
            'appearance' => array(
                'collapseAll' => '1',
                'expandSingle' => '1',
                'newRecordLinkPosition' => 'bottom',
                'showAllLocalizationLink' => '1',
                'showPossibleLocalizationRecords' => '1',
                'showSynchronizationLink' => '1',
                'useSortable' => '1',
                'enabledControls' => array(
                    'hide' => '0',
                ),
            ),
            'behaviour' => array(
                'disableMovingChildrenWithParent' => '1',
                'localizeChildrenAtParentLocalization' => '1',
            ),
        )
    ),
    

    新内容类型示例:

    t3lib_div::loadTCA('tt_content');
    $TCA['tt_content']['columns']['CType']['config']['items'][] = array(
        0 => '2 columns',
        1 => 'user_2cols',
        2 => '../fileadmin/user_2cols.gif',
    );
    t3lib_SpriteManager::addTcaTypeIcon('tt_content', 'user_2cols', '../fileadmin/user_2cols.gif');
    $TCA['tt_content']['types']['user_2cols']['showitem'] = 'CType,header,--div--;LLL:EXT:cms/locallang_ttc.xml:tabs.access,--palette--;LLL:EXT:cms/locallang_ttc.xml:palette.visibility;visibility,--palette--;LLL:EXT:cms/locallang_ttc.xml:palette.access;access,--div--;LLL:EXT:cms/locallang_ttc.xml:tabs.appearance,--palette--;LLL:EXT:cms/locallang_ttc.xml:palette.frames;frames,--palette--;LLL:EXT:cms/locallang_ttc.xml:palette.textlayout;textlayout,--div--;LLL:EXT:cms/locallang_ttc.xml:tabs.extended';
    

    注释

    • 对于您的特定情况,这是一个简单(有点粗糙)的解决方案。更好的解决方案将考虑动态设置容器中列数的可能性。

    • 使用左/右列元素会有一些限制 - 您将无法轻松移动它们或在各种容器之间复制它们。

答案 5 :(得分:1)

以下是关于如何在不使用TemplaVoila的情况下制作FCE的会议演示视频。不幸的是只有德语,但也许有帮助。

http://vimeo.com/29213790

答案 6 :(得分:0)

我建议你试试“multicolumn”插件。它没有其他实现的依赖(我几乎尝试了所有的FCE替代品)并且它具有嵌套功能。总体来说它与TYPO3很好地协作。最近它被移植到TYPO3 v6。我在很多网站上使用它,我很满意。 (有很少的错误,比如显示错误的“丢失元素”,但伪造页面上有修复)

以下是TER文档的链接: http://typo3.org/extension-manuals/multicolumn/2.1.14/view/

答案 7 :(得分:0)

尝试使用Fluid Powered TYPO3。使用新的预先配置的分发&#34;网站&#34;

http://typo3.org/extensions/repository/view/site

Claus Due的截屏视频

http://vimeo.com/110469200

别忘了添加typo3conf / AdditionalConfiguration.php How do I install it?