如何启用IRRE列元素排序并使前端按该顺序展示?
问题解答
一、你的TCA配置没问题
你当前的IRRE排序配置是正确的:
- Inventory的items字段设置了
foreign_sortby = sorting,意味着关联的Items记录会用自身的sorting字段存储相对排序顺序 appearance.useSortable = true开启了拖拽排序功能- Items表的ctrl区也配置了
sortby = sorting,保证排序字段可用
IRRE里的排序操作已经正常把顺序写入了数据库的tx_vendorgame_domain_model_items.sorting字段(对应当前Inventory的关联记录)。
二、前端展示时按排序顺序输出的方法
问题出在前端获取数据时没按保存的sorting字段排序,以下是两种常见场景的处理方式:
1. 使用Extbase框架(Typo3常规开发)
方式一:在Repository方法里指定排序
在InventoryRepository的查询方法中添加排序条件:
public function findByUid($uid) { $query = $this->createQuery(); $query->matching($query->equals('uid', $uid)); // 让关联的items按sorting字段升序排列 $query->setOrderings([ 'items.sorting' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING ]); return $query->execute()->getFirst(); }
方式二:在模型关联注解里配置默认排序
在Inventory模型的items属性注解中添加排序规则,这样每次获取items都会自动按顺序排列:
/** * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Game\Domain\Model\Items> * @ORM\OneToMany(targetEntity="\Vendor\Game\Domain\Model\Items", mappedBy="inventory") * @ORM\OrderBy({"sorting" = "ASC"}) */ protected $items;
2. 直接用SQL查询
如果是手写SQL语句获取数据,关联查询时加上ORDER BY即可:
SELECT i.* FROM tx_vendorgame_domain_model_inventory inv JOIN tx_vendorgame_domain_model_items i ON inv.uid = i.inventory WHERE inv.uid = [你的Inventory UID] ORDER BY i.sorting ASC;
内容的提问来源于stack exchange,提问作者Starzi
相关产品推荐
相关产品推荐

