我试图在管理信息中心创建一个功能,我有一个products
表,我想创建这些批处理功能:
价格更新
选择一个或多个产品,点击价格更新,以带有当前价格选择的产品,在带有名为new_price
的输入文本的表单中输入以下内容:%10或 - %10或5或-5 [..],单击“更新”按钮并使用新价格更新所选产品
有效
这与价格更新几乎相同,但使用输入复选框并取消/激活所选产品
数量更新
更新所选产品数量/库存
我试过的是,覆盖CRUDController,如here所述,但在示例中它只显示如何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 %}
此外,我必须覆盖batchAction()
中的方法CRUDController
来管理请求
这是正确的方法吗?
答案 0 :(得分:0)
我认为您的 Active 复选框应该只是一个可编辑的布尔值:
public function configureListFields(ListMapper $list)
{
$list->add('active', null, array('editable' => true));
}
是否必须每行设置其他批处理操作,或者您希望选择多行,然后在列表的页脚上选择您的操作和设置(价格等)?
这就是我解决批处理操作的方法,我需要一个额外的日期字段: https://github.com/sonata-project/SonataAdminBundle/issues/2336#issuecomment-54800396
我将很快添加一篇博文,您还可以在其中看到CRUDController中的操作。