使用TCA中的排序顺序选择列出流体中的项目

时间:2017-05-16 09:41:09

标签: sorting typo3 fluid extbase

在我的 TCA 中,我使用select到另一张桌子。

    'modules' => [
        'label' => 'LLL:EXT:myextension_module_table/Resources/Private/Language/locallang_db.xlf:tx_myextension_domain_model_semester.modules',
        'config' => [
            'type' => 'select',
            'renderType' => 'selectMultipleSideBySide',
            'enableMultiSelectFilterTextfield' => true,
            'foreign_table' => 'tx_myextension_domain_model_module',
            'minitems' => 1,
            'maxitems' => 99,
        ],
    ],

在“所选项目”下,我可以对项目进行排序。现在我想在流体中使用这种排序顺序。在数据库中,我看到了正确的顺序21,1,2,3,4,28。但在流畅的情况下,项目总是按照uid排序。

添加'sortby' => 'sorting',所有必需的更改并不能解决我的问题。在这种情况下,我可以在列表视图中订购记录。但我不想要这个订单。我想在前端的“选定项目”中显示订单。

在我的 ModuletableController.php 中,我从Flexform获得所选的模块表。

/**
 * action show
 *
 * @param \Vendor\Myextension\Domain\Model\Moduletable $moduletable
 * @return void
 */
public function showAction(\Vendor\Myextension\Domain\Model\Moduletable $moduletable = NULL) {
    if (is_null($moduletable)) {
        $moduletable = $this->moduletableRepository->findByUid($this->settings['singleModuleTable']);
    }

    $this->view->assign('moduletable', $moduletable);
}

模板中 Show.html I循环播放它。

<html xmlns:f="http://typo3.org/ns/TYPO3/Fluid/ViewHelpers">
<f:layout name="Default" />

<f:section name="main">
    <h2>{moduletable.title}</h2>
    <f:for each="{moduletable.semester}" as="semester">
        <p>{semester.title}</p>
        <f:for each="{semester.modules}" as="module">
            <p{module.title}</p>
        </f:for>
    </f:for>
</f:section>

2 个答案:

答案 0 :(得分:1)

解决方案是使用MM表。然后在TCA选择字段中设置排序顺序。

在TCA:

'modules' => [
    'label' => 'LLL:EXT:myextension/Resources/Private/Language/locallang_db.xlf:tx_myextension_domain_model_semester.modules',
    'config' => [
        'type' => 'select',
        'renderType' => 'selectMultipleSideBySide',
        'enableMultiSelectFilterTextfield' => true,
        'foreign_table' => 'tx_myextension_domain_model_module',
        'foreign_sortby' => 'sorting',
        'MM' => 'tx_myextension_semester_module_mm',
        'minitems' => 1,
        'maxitems' => 99,
    ],
],

在ext_tables.sql

CREATE TABLE tx_myextension_semester_module_mm (
    uid_local int(11) unsigned DEFAULT '0' NOT NULL,
    uid_foreign int(11) unsigned DEFAULT '0' NOT NULL,
    sorting int(11) unsigned DEFAULT '0' NOT NULL,
    sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL,

    KEY uid_local (uid_local),
    KEY uid_foreign (uid_foreign)
);

答案 1 :(得分:0)

如何获取Extbase控制器中的选定项?也许你可以在这里使用这个findByUidListOrderByList函数:http://blog.teamgeist-medien.de/2014/09/typo3-extbase-repository-find-by-multiple-uids-findbyuids.html#comment-90