如何将自定义实体的条目显示为 Shopware 5 前端选择器的选项?

How to show entries of custom entity as options for a selector in frontend in Shopware 5?

我已经用它的模型和 ext.js 应用程序创建了一个自定义实体模型。它让我可以在 shopware 后端创建新实体,如下所述:

https://developers.shopware.com/developers-guide/backend-components/listing/

然后我使用 s_user_attributes table 将条目链接到 s_user,如下所示:

https://developers.shopware.com/developers-guide/attribute-system/

$crud->update('s_user_attributes', 'recommendedStream', 'single_selection', [
'displayInBackend' => true,
'label' => 'Recommended stream',
'entity' => 'Shopware\Models\ProductStream\ProductStream',

这让我可以 select 实体并在 select 或客户的后端设置中查看所有这些实体的列表。

我想知道什么是简单和正确的方法来获得 select 或者用户属性的选项作为可以在后端创建的所有条目。

这取决于您要在何处显示该选择器。 最常见的方法是扩展模板视图数据(您可以使用您的实体存储库来查找 All() 记录。 例如。你可以订阅 Enlight_Controller_Action_PostDispatchSecure_Frontend_Account 事件,如果你想在订阅的方法中显示客户帐户中的选择器,你需要扩展视图数据,如

 public function onFrontendPostDispatchAssignViewData(\Enlight_Event_EventArgs $args)
{
    /** @var \Enlight_Controller_Action $controller */
    $controller = $args->get('subject');
    $view = $controller->View();
   
    $view->assign('productStreams', Shopware()->Container()->get('models')->getRepository(ProductStream::class)->findAll();
   
}

现在您应该在模板中得到 productStreams。您现在可以扩展主题模板以显示输入,并且您可能需要扩展保存过程以将所选值保存到新属性中。