我试图在管理仪表板中创建一个功能,我有一个products
表,我想创建这些批处理功能:
选择一个或多个产品,单击"价格更新",在一个名为new_price
的输入文本中显示所选产品的当前价格,键入以下任意一个:%10或-%10或5或-5 [..]],点击更新按钮,用新的价格更新所选产品
这几乎与价格更新相同,但使用输入复选框并取消/激活所选产品
更新数量更新所选产品数量/库存
我所尝试的是,重写CRUDController,如这里所述,但在示例中它只是显示如何merge
对象,覆盖list__batch.html.twig
文件添加输入选项,它不显示如何创建自定义模板批处理
我尝试过的另一件事是重写batch_confirmation.html.twig
,像这样:
{% extends base_template %}
{% block actions %}
<li>{% include 'SonataAdminBundle:Button:list_button.html.twig' %}</li>
<li>{% include 'SonataAdminBundle:Button:create_button.html.twig' %}</li>
{% endblock %}
{% block tab_menu %}{{ knp_menu_render(admin.sidemenu(action), {'currentClass' : 'active'}, 'list') }}{% endblock %}
{% block content %}
<div class="sonata-ba-delete">
<h1>{% trans with {'%action%': action_label} from 'SonataAdminBundle' %}title_batch_confirmation{% endtrans %}</h1>
{% if data.all_elements %}
{{ 'message_batch_all_confirmation'|trans({}, 'SonataAdminBundle') }}
{% else %}
{% transchoice data.idx|length with {'%count%': data.idx|length} from 'SonataAdminBundle' %}message_batch_confirmation{% endtranschoice %}
{% endif %}
<div class="well well-small form-actions">
<form action="{{ admin.generateUrl('batch', {'filter': admin.filterParameters}) }}" method="POST" >
<input type="hidden" name="confirmation" value="ok">
<input type="hidden" name="_sonata_csrf_token" value="{{ csrf_token }}">
{% if data.action == "price_update" %}
<input type="text" name="new_price" value="BILLION" />
<input type="hidden" name="idx" value="{{ data.idx|json_encode }}">
<input type="hidden" name="all_elements" value="{{ data.all_elements }}">
<input type="hidden" name="action" value="{{ data.action }}">
# Show object rows
{% else if data.action == "quantity_update" %}
# Show quantity_update object rows
{% else if data.action == "de_activate_update" %}
# Show de_activate_update object rows
{% else %} # delete batch action here!
<input type="hidden" name="data" value="{{ data|json_encode }}">
{% endif %}
# Don't know why this form is not displayed
<div style="display: none">
{{ form_rest(form) }}
</div>
<button type="submit" class="btn btn-danger">{{ 'btn_execute_batch_action'|trans({}, 'SonataAdminBundle') }}</button>
{% if admin.hasRoute('list') and admin.isGranted('LIST') %}
{{ 'delete_or'|trans({}, 'SonataAdminBundle') }}
<a class="btn btn-success" href="{{ admin.generateUrl('list') }}">
<i class="glyphicon glyphicon-th-list"></i> {{ 'link_action_list'|trans({}, 'SonataAdminBundle') }}
</a>
{% endif %}
</form>
</div>
</div>
{% endblock %}
我还必须覆盖CRUDController
中的batchAction()
方法来管理请求
这是正确的方式吗?
我认为你的活动复选框应该是一个可编辑的布尔值:
public function configureListFields(ListMapper $list)
{
$list->add('active', null, array('editable' => true));
}
查看文档:管理文件-参考-行动清单(主)- 9.2。自定义列表页面上显示的字段
其他批处理操作是否必须每行设置,或者您更喜欢选择多行,然后在列表页脚选择您的操作和设置(价格等)?
这就是我如何解决一个批处理操作,我需要一个额外的日期字段:https://github.com/sonata-project/SonataAdminBundle/issues/2336 issuecomment - 54800396
我将很快添加一篇博客文章,在那里你也可以看到CRUDController内部的动作