SonataAdminBundle批量更新



我试图在管理仪表板中创建一个功能,我有一个products表,我想创建这些批处理功能:

价格更新

选择一个或多个产品,单击"价格更新",在一个名为new_price的输入文本中显示所选产品的当前价格,键入以下任意一个:%10或-%10或5或-5 [..]],点击更新按钮,用新的价格更新所选产品

<<p> 活跃/strong>

这几乎与价格更新相同,但使用输入复选框并取消/激活所选产品

更新数量

更新所选产品数量/库存

我所尝试的是,重写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内部的动作

相关内容

  • 没有找到相关文章

最新更新