如何将自定义实体的条目显示为 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
。您现在可以扩展主题模板以显示输入,并且您可能需要扩展保存过程以将所选值保存到新属性中。
我已经用它的模型和 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
。您现在可以扩展主题模板以显示输入,并且您可能需要扩展保存过程以将所选值保存到新属性中。