SilverStripe LeftModelAdmin列表视图未显示全部列问题排查
解决SilverStripe LeftModelAdmin仅显示一列的问题
嘿,我刚排查了你的代码,问题根源很明确——你把summary_fields放错位置啦!
在SilverStripe里,summary_fields是用来定义DataObject在列表视图中展示哪些字段的配置项,它应该直接写在你的数据模型类(也就是ContactFormSubmission)里,而不是ModelAdmin类中。你现在把它放在ContactFormSubmissionAdmin里,系统根本不会读取这个配置,所以只会默认显示一列内容。
修改后的正确代码:
1. 模型类(ContactFormSubmission.php)
把summary_fields移到这里:
namespace { use SilverStripe\ORM\DataObject; class ContactFormSubmission extends DataObject { private static $db = [ 'Name' => 'Varchar', 'Email' => 'Varchar', 'Message' => 'Text', ]; // 这里才是summary_fields的正确位置 private static $summary_fields = [ 'Name' => 'Name', 'Email' => 'Email', 'Message' => 'Message', ]; } }
2. ModelAdmin类(ContactFormSubmissionAdmin.php)
移除多余的summary_fields配置:
namespace { use SilverStripe\Admin\ModelAdmin; class ContactFormSubmissionAdmin extends ModelAdmin { private static $menu_title = 'Enquiries'; private static $url_segment = 'enquiries'; private static $managed_models = [ ContactFormSubmission::class, ]; // 删掉这里的summary_fields } }
额外提醒:
修改完代码后,一定要访问你的站点的dev/build?flush=all页面(比如http://your-project-url.com/dev/build?flush=all)来清除缓存并重建配置,这样新的列表字段配置才能生效。
如果之后你需要在ModelAdmin里针对不同场景覆盖模型的默认列表字段,SilverStripe也支持通过getList()方法或者模型特定的配置来实现,但对于新手来说,先把配置放在模型里是最规范且简单的做法~
内容的提问来源于stack exchange,提问作者Wai Yan Hein
相关产品推荐
相关产品推荐

