Git Product home page Git Product logo

Comments (10)

fdelapena avatar fdelapena commented on May 27, 2024

Try removing the renderif block. If your entity does not have a column called "visible" it won't render actions.

from datatablesbundle.

InternalServerError avatar InternalServerError commented on May 27, 2024

Thanks for your quick answer.
Unfortunately, this does not fix it.
I've already tried to remove it, I've also tried to change the role from ROLE_ADMIN to IS_AUTHENTICATED_ANONYMOUSLY or ROLE_USER to see if it's not the problem.

Any ideas ?

from datatablesbundle.

fdelapena avatar fdelapena commented on May 27, 2024

Are you getting javascript or ajax error 500 in your console?

By the way, the rel tooltip won't work unless you trigger the Bootstrap tooltip after ajax finishes loading. Also, in Bootstrap 3 it should be data-toggle="tooltip" instead of rel="tooltip" (Bootstrap 2).

Mine looks like this:

                    "actions" => array(
                        array(
                            "route" => "client_show",
                            "route_parameters" => array(
                                "id" => "id"
                            ),
                            "icon" => "glyphicon glyphicon-eye-open",
                            "attributes" => array(
                                "data-toggle" => "tooltip",
                                "title" => $this->getTranslator()->trans("Show"),
                                "class" => "btn btn-default",
                                "role" => "button"
                            ),
                            "role" => "ROLE_ADMIN",
                        ),
                        array(
                            "route" => "client_edit",
                            "route_parameters" => array(
                                "id" => "id"
                            ),
                            "icon" => "glyphicon glyphicon-edit",
                            "attributes" => array(
                                "data-toggle" => "tooltip",
                                "title" => $this->getTranslator()->trans("Edit"),
                                "class" => "btn btn-default",
                                "role" => "button"
                            ),
                            "role" => "ROLE_ADMIN",
                        ),

If you are getting an error 500 from AJAX response saying the route does not exist, I guess you are getting issues with routing exposure. Make sure your controller action looks like this:

    /**
     * Finds and displays a Client entity.
     *
     * @Route("/{id}", name="client_show", options={"expose"=true})
     * @Method("GET")
     * @Template()
     */
    public function showAction($id)
    {
        // ...

Note the , options={"expose"=true} in the annotation. If not, AJAX won't be able to access to the route action and will say it does not exist. You need to add this to all controller actions you use from buttons.

from datatablesbundle.

InternalServerError avatar InternalServerError commented on May 27, 2024

The first thing I've done was to check in Firebug if I did not have any 500 status code in Network or XHR, and I do not have.

I've almost the same code as you, I've tried to add the expose option on my controller but with no effects.

My code :

$this->getColumnBuilder()
        ->add("username", "column", array(
            "title" => "Username",
            "searchable" => true,
            "orderable" => true,
            "visible" => true,
            "class" => "active",
        ))
        ->add("email", "column", array(
            "title" => "E-mail",
            "searchable" => true,
            "orderable" => true,
            "visible" => true,
            "class" => "active",
        ))
        ->add(null, "action", array(
            "title" => "Actions",
            "start" => '<div class="wrapper">',
            "end" => '</div>',
            "actions" => array(
                array(
                    "route" => "user_view",
                    "icon" => 'glyphicon glyphicon-edit',
                    "attributes" => array(
                        "data-toggle" => "tooltip",
                        "title" => "Edit",
                        "class" => "btn btn-primary btn-xs",
                        "role" => "button"
                    ),
                    "confirm" => true,
                    "confirm_message" => "Are you sure ?",
                    "role" => "IS_AUTHENTICATED_ANONYMOUSLY",
                ),
            )
        ))
    ;
}

And my Controller :

/**
 * @Route("/users/view", name="user_view", options={"expose"=true})
 * @Template()
 */
public function viewUserAction() {
    return new Response();
}

So I don't know where might be the trouble ...

from datatablesbundle.

fdelapena avatar fdelapena commented on May 27, 2024

Are you using at least v0.5.2 or master? 0.5.1 had some issues with this.
Are you getting row results or is it always empty? Zero results won't show action buttons.
Apart of network errors, do you have any other error in the JavaScript console?
How is set your indexAction and your indexResultsAction?
Is your view loading properly the route callback script? e.g. your browser shows this in the html head:

<script src="/fdelapena/web/bundles/fosjsrouting/js/router.js"></script>
<script src="/fdelapena/web/app_dev.php/js/routing?callback=fos.Router.setData"></script>

from datatablesbundle.

InternalServerError avatar InternalServerError commented on May 27, 2024

Hi,

I am using the dev-master version.
My results rows are not empty, I have my correct results.
Apart of network/XHR errors I do not have any JS console error.
And finally I have these lines in my HTML source

<script src="/app_dev.php/js/routing?callback=fos.Router.setData"></script>
<script type="text/javascript" src="/app_dev.php/js/scripts_router_15.js"></script>

Apparently everything might be fine, but icon still does not display

from datatablesbundle.

fdelapena avatar fdelapena commented on May 27, 2024

Did you clear all cache and keeping app/console assetic:dump --watch --force to update dev environment changes? Sometimes cache:clear is not enough and removing app/cache/prod/ and app/cache/dev/ solves some weird issues.

I don't know why is failing then for you. Here is my configuration, just for reference:

Here is my clientController.php:

<?php

namespace Fdelapena\SomeBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Fdelapena\SomeBundle\Entity\Client;
use Fdelapena\SomeBundle\Form\ClientType;

/**
 * Client controller.
 *
 * @Route("/panel/client")
 */
class ClientController extends Controller
{

    /**
     * Lists all Client entities.
     *
     * @Route("/", name="client")
     * @Method("GET")
     * @Template()
     *
     * @return array
     */
    public function indexAction()
    {
        $clientDatatable = $this->get("sg_datatables.client");
        $clientDatatable->buildDatatableView();

        return array(
            "datatable" => $clientDatatable,
        );
    }

    /**
     * Get all Client entities.
     *
     * @Route("/results", name="client_results")
     *
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function indexResultsAction()
    {
        /**
         * @var \Sg\DatatablesBundle\Datatable\Data\DatatableData $datatable
         */
        $datatable = $this->get("sg_datatables.datatable")->getDatatable($this->get("sg_datatables.client"));

        return $datatable->getResponse();
    }

    /**
     * @Route("/bulk/delete", name="client_bulk_delete")
     * @Method("POST")
     *
     * @return Response
     */
    public function bulkDeleteAction()
    {
        $request = $this->getRequest();
        $isAjax = $request->isXmlHttpRequest();

        if ($isAjax) {
            $choices = $request->request->get("data");

            $em = $this->getDoctrine()->getManager();
            $repository = $em->getRepository("FdelapenaSomeBundle:Client");

            foreach ($choices as $choice) {
                $entity = $repository->findOneByUsername($choice["value"]);
                $em->remove($entity);
            }

            $em->flush();

            return new Response("This is ajax response.");
        }

        return new Response("This is not ajax.", 400);
    }

    /**
     * @Route("/bulk/disable", name="client_bulk_disable")
     * @Method("POST")
     *
     * @return Response
     */
    public function bulkDisableAction()
    {
        $request = $this->getRequest();
        $isAjax = $request->isXmlHttpRequest();

        if ($isAjax) {
            $choices = $request->request->get("data");

            $em = $this->getDoctrine()->getManager();
            $repository = $em->getRepository("FdelapenaSomeBundle:Client");

            foreach ($choices as $choice) {
                var_dump($choice["value"]);
                $entity = $repository->findOneByUsername($choice["value"]);
                $entity->setEnabled(false);
                $em->persist($entity);
            }

            $em->flush();

            return new Response("This is ajax response.");
        }

        return new Response("This is not ajax.", 400);
    }

    /**
     * @Route("/bulk/enable", name="client_bulk_enable")
     * @Method("POST")
     *
     * @return Response
     */
    public function bulkEnableAction()
    {
        $request = $this->getRequest();
        $isAjax = $request->isXmlHttpRequest();

        if ($isAjax) {
            $choices = $request->request->get("data");

            $em = $this->getDoctrine()->getManager();
            $repository = $em->getRepository("FdelapenaSomeBundle:Client");

            foreach ($choices as $choice) {
                $entity = $repository->findOneByUsername($choice["value"]);
                $entity->setEnabled(true);
                $em->persist($entity);
            }

            $em->flush();

            return new Response("This is ajax response.");
        }

        return new Response("This is not ajax.", 400);
    }

    /**
     * Creates a new Client entity.
     *
     * @Route("/", name="client_create")
     * @Method("POST")
     * @Template("FdelapenaSomeBundle:Client:new.html.twig")
     */
    public function createAction(Request $request)
    {
        $entity = new Client();
        $form = $this->createCreateForm($entity);
        $form->handleRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($entity);
            $em->flush();

            return $this->redirect($this->generateUrl('client_show', array('id' => $entity->getId())));
        }

        return array(
            'entity' => $entity,
            'form'   => $form->createView(),
        );
    }

    /**
     * Creates a form to create a Client entity.
     *
     * @param Client $entity The entity
     *
     * @return \Symfony\Component\Form\Form The form
     */
    private function createCreateForm(Client $entity)
    {
        $form = $this->createForm(new ClientType(), $entity, array(
            'action' => $this->generateUrl('client_create'),
            'method' => 'POST',
        ));

        $form->add('submit', 'submit', array('label' => 'Create'));
        $form->get('enabled')->setData(true);

        return $form;
    }

    /**
     * Displays a form to create a new Client entity.
     *
     * @Route("/new", name="client_new")
     * @Method("GET")
     * @Template()
     */
    public function newAction()
    {
        $entity = new Client();
        $form   = $this->createCreateForm($entity);

        return array(
            'entity' => $entity,
            'form'   => $form->createView(),
        );
    }

    /**
     * Finds and displays a Client entity.
     *
     * @Route("/{id}", name="client_show", options={"expose"=true})
     * @Method("GET")
     * @Template()
     */
    public function showAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $entity = $em->getRepository('FdelapenaSomeBundle:Client')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Client entity.');
        }

        $deleteForm = $this->createDeleteForm($id);

        return array(
            'entity'      => $entity,
            'delete_form' => $deleteForm->createView(),
        );
    }

    /**
     * Displays a form to edit an existing Client entity.
     *
     * @Route("/{id}/edit", name="client_edit", options={"expose"=true})
     * @Method("GET")
     * @Template()
     */
    public function editAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $entity = $em->getRepository('FdelapenaSomeBundle:Client')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Client entity.');
        }

        $editForm = $this->createEditForm($entity);
        $deleteForm = $this->createDeleteForm($id);

        return array(
            'entity'      => $entity,
            'edit_form'   => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
        );
    }

    /**
    * Creates a form to edit a Client entity.
    *
    * @param Client $entity The entity
    *
    * @return \Symfony\Component\Form\Form The form
    */
    private function createEditForm(Client $entity)
    {
        $form = $this->createForm(new ClientType(), $entity, array(
            'action' => $this->generateUrl('client_update', array('id' => $entity->getId())),
            'method' => 'POST',
        ));

        $form->add('submit', 'submit', array('label' => 'Update'));
        $form->remove('plainPassword');
        return $form;
    }
    /**
     * Edits an existing Client entity.
     *
     * @Route("/{id}", name="client_update")
     * @Method({"POST"})
     * @Template("FdelapenaSomeBundle:Client:edit.html.twig")
     */
    public function updateAction(Request $request, $id)
    {
        $em = $this->getDoctrine()->getManager();

        $entity = $em->getRepository('FdelapenaSomeBundle:Client')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Client entity.');
        }

        $deleteForm = $this->createDeleteForm($id);
        $editForm = $this->createEditForm($entity);
        $editForm->handleRequest($request);

        if ($editForm->isValid()) {
            $em->flush();

            return $this->redirect($this->generateUrl('client_show', array('id' => $id)));
        }

        return array(
            'entity'      => $entity,
            'edit_form'   => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
        );
    }
    /**
     * Deletes a Client entity.
     *
     * @Route("/{id}/delete", name="client_delete", options={"expose"=true})
     * @Method({"GET", "POST"})
     */
    public function deleteAction(Request $request, $id)
    {
        $form = $this->createDeleteForm($id);
        $form->handleRequest($request);

        $em = $this->getDoctrine()->getManager();
        $entity = $em->getRepository('FdelapenaSomeBundle:Client')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Client entity.');
        }

        $em->remove($entity);
        $em->flush();

        return $this->redirect($this->generateUrl('client'));
    }
    /**
     * Disables a Client entity.
     *
     * @Route("/{id}/disable", name="client_disable", options={"expose"=true})
     * @Method({"GET", "POST"})
     */
    public function disableAction(Request $request, $id)
    {
        $form = $this->createDisableForm($id);
        $form->handleRequest($request);

        $em = $this->getDoctrine()->getManager();
        $entity = $em->getRepository('FdelapenaSomeBundle:Client')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Client entity.');
        }

        $entity->setEnabled(false);
        $em->persist($entity);
        $em->flush();

        return $this->redirect($this->generateUrl('client'));
    }
    /**
     * Enables a Client entity.
     *
     * @Route("/{id}/enable", name="client_enable", options={"expose"=true})
     * @Method({"GET", "POST"})
     */
    public function enableAction(Request $request, $id)
    {
        $form = $this->createEnableForm($id);
        $form->handleRequest($request);

        $em = $this->getDoctrine()->getManager();
        $entity = $em->getRepository('FdelapenaSomeBundle:Client')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Client entity.');
        }

        $entity->setEnabled(true);
        $em->persist($entity);
        $em->flush();

        return $this->redirect($this->generateUrl('client'));
    }

    /**
     * Creates a form to enable a Client entity by id.
     *
     * @param mixed $id The entity id
     *
     * @return \Symfony\Component\Form\Form The form
     */
    private function createEnableForm($id)
    {
        return $this->createFormBuilder()
            ->setAction($this->generateUrl('client_enable', array('id' => $id)))
            ->setMethod('POST')
            ->add('submit', 'submit', array('label' => 'Enable'))
            ->getForm()
        ;
    }
    /**
     * Creates a form to disable a Client entity by id.
     *
     * @param mixed $id The entity id
     *
     * @return \Symfony\Component\Form\Form The form
     */
    private function createDisableForm($id)
    {
        return $this->createFormBuilder()
            ->setAction($this->generateUrl('client_disable', array('id' => $id)))
            ->setMethod('POST')
            ->add('submit', 'submit', array('label' => 'Disable'))
            ->getForm()
        ;
    }

    /**
     * Creates a form to delete a Client entity by id.
     *
     * @param mixed $id The entity id
     *
     * @return \Symfony\Component\Form\Form The form
     */
    private function createDeleteForm($id)
    {
        return $this->createFormBuilder()
            ->setAction($this->generateUrl('client_delete', array('id' => $id)))
            ->setMethod('POST')
            ->add('submit', 'submit', array('label' => 'Delete'))
            ->getForm()
        ;
    }
}

My services.yml:

services:
    sg_datatables.client:
        class: Fdelapena\SomeBundle\Datatables\ClientDatatable
        tags:
            - { name: sg.datatable.view }

My routing.yml:

client:
    resource: "@FdelapenaSomeBundle/Controller/ClientController.php"
    type:     annotation

My config.yml:

assetic:
    assets:
        data_tables_css:
            input:  %kernel.root_dir%/../vendor/datatables/plugins/integration/bootstrap/3/dataTables.bootstrap.css
            output: css/datatables.css
            filter: [cssrewrite]
        data_tables_js:
            inputs:
                    - %kernel.root_dir%/../vendor/datatables/datatables/media/js/jquery.dataTables.js
                    - %kernel.root_dir%/../vendor/datatables/plugins/integration/bootstrap/3/dataTables.bootstrap.js
            output: js/datatables.js
        moment_js:
            inputs:
                    - '%kernel.root_dir%/../vendor/moment/moment/moment.js'
            output: js/moment.js
        moment_locale:
            inputs:
                    - '%kernel.root_dir%/../vendor/moment/moment/lang/%locale%.js'
            output: js/moment.locale.js
        data_tables_jquery_css:
            input:  %kernel.root_dir%/../vendor/datatables/datatables/media/css/jquery.dataTables.css
            output: css/jquery.dataTables.css
            filter: ['cssrewrite']
        data_tables_bootstrap_css:
            input:  %kernel.root_dir%/../vendor/datatables/plugins/integration/bootstrap/3/dataTables.bootstrap.css
            output: css/dataTables.bootstrap.css
            filter: ['cssrewrite']
        data_tables_responsive_css:
            input:  %kernel.root_dir%/../vendor/datatables/responsive/css/dataTables.responsive.css
            output: css/dataTables.responsive.css
        data_tables_responsive_js:
            input:  %kernel.root_dir%/../vendor/datatables/responsive/js/dataTables.responsive.js
            output: js/dataTables.responsive.js
        data_tables_bootstrap_js:
            input:  %kernel.root_dir%/../vendor/datatables/plugins/integration/bootstrap/3/dataTables.bootstrap.js
            output: js/datatables.js
        data_tables_img_sort_both:
            input:  %kernel.root_dir%/../vendor/datatables/plugins/integration/bootstrap/images/sort_both.png
            output: images/sort_both.png
        data_tables_img_sort_asc:
            input:  %kernel.root_dir%/../vendor/datatables/plugins/integration/bootstrap/images/sort_asc.png
            output: images/sort_asc.png
        data_tables_img_sort_desc:
            input:  %kernel.root_dir%/../vendor/datatables/plugins/integration/bootstrap/images/sort_desc.png
            output: images/sort_desc.png
        data_tables_img_sort_asc_disabled:
            input:  %kernel.root_dir%/../vendor/datatables/plugins/integration/bootstrap/images/sort_asc_disabled.png
            output: images/sort_asc_disabled.png
        data_tables_img_sort_desc_disabled:
            input:  %kernel.root_dir%/../vendor/datatables/plugins/integration/bootstrap/images/sort_desc_disabled.png
            output: images/sort_desc_disabled.png

My custom CSS:

table.dataTable.dtr-inline.collapsed tbody td.dataTables_empty:first-child:before,
table.dataTable.dtr-inline.collapsed tbody th.dataTables_empty:first-child:before {
    display: none;
}

td.action-cell {
    padding: 0.125em 0 0 !important;
    text-align: center;
}

td.multiselect-checkbox-cell {
    padding-left: 18px !important;
    padding-right: 18px !important;
}

td .glyphicon-ok:before {
    color: green;
}

td .glyphicon-remove:before {
    color: red;
}

My custom JavaScript to add better experience:

$(document).ready(function() {
    // Make popover position responsive
    $('[data-toggle=popover]').popover({
        container: 'body',
        trigger: 'focus',
        placement: function() { return $(window).width() < 975 ? 'top' : 'right'; }
    });
    // Add datatables responsiveness (requires datatables responsive plugin)
    $('#client_datatable').addClass('dt-responsive');
}
$(document).on('ajaxComplete', function() {
    // Add bootstrap 3 style to bulk actions dropdown and submit
    $('[name="bulk_action_routes[select]"]').addClass('form-control');
    $('#multiselect_submit').addClass('btn btn-default');
    // Enable tooltip functionality
    $('[data-toggle=tooltip]').tooltip({container: 'body'});
});

My index.html.twig:

{% extends "FdelapenaSomeBundle::layout.html.twig" %}

{% block title %}{% trans %}Clients{% endtrans %}{% endblock %}

{% block content_header '' %}

{% block content %}
    <h1>{% trans %}Clients{% endtrans %}</h1>

    <p class="btn-group">
        <a href="{{ path('client_new') }}" class="btn btn-success">
            <span class="glyphicon glyphicon glyphicon-plus"></span>
            {% trans %}New client{% endtrans %}
        </a>
    </p>
    <p>
        {% trans %}Client list:{% endtrans %}
    </p>

{% block content_content %}
    {{ datatable_render(datatable) }}
{% endblock %}

{% endblock %}

My ClientDatatable.php:

<?php

namespace Fdelapena\SomeBundle\Datatables;

use Sg\DatatablesBundle\Datatable\View\AbstractDatatableView;

/**
 * Class ClientDatatable
 *
 * @package Fdelapena\SomeBundle\Datatables
 */
class ClientDatatable extends AbstractDatatableView
{
    /**
     * {@inheritdoc}
     */
    public function buildDatatableView()
    {
        $this->getFeatures()
                        ->setServerSide(true)
                        ->setProcessing(true);

        $this->getAjax()->setUrl($this->getRouter()->generate("client_results"));

        $this->getMultiselect()
            ->setEnabled(true)
            ->setPosition("last")
            ->setWidth("0.875em")
            ->setClassName("multiselect-checkbox-cell")
            ->addAction($this->getTranslator()->trans("Disable selected clients"), "client_bulk_disable")
            ->addAction($this->getTranslator()->trans("Enable selected clients"), "client_bulk_enable")
            ->addAction($this->getTranslator()->trans("Delete selected clients"), "client_bulk_delete");

        $this->setStyle(self::BOOTSTRAP_3_STYLE);

        $this->getColumnBuilder()
                ->add('id', 'column', array('title' => $this->getTranslator()->trans('Id'),))
                ->add('username', 'column', array('title' => $this->getTranslator()->trans('Username'),))
                ->add('email', 'column', array('title' => $this->getTranslator()->trans('Email'),))
                ->add('firstName', 'column', array('title' => $this->getTranslator()->trans('First name'),))
                ->add('lastName', 'column', array('title' => $this->getTranslator()->trans('Last name'),))
                ->add('enabled', 'boolean', array(
                    "title" => $this->getTranslator()->trans("Enabled"),
                    "true_icon" => "glyphicon glyphicon-ok",
                    "false_icon" => "glyphicon glyphicon-remove",
                    "true_label" => $this->getTranslator()->trans("Yes"),
                    "false_label" => $this->getTranslator()->trans("No"),
                ))
                ->add(null, "action", array(
                    "title" => $this->getTranslator()->trans("Actions"),
                    "start" => '<span class="btn-group">',
                    "end" => '</span>',
                    "class" => "action-cell",
                    "width" => "11em",
                    "actions" => array(
                        array(
                            "route" => "client_show",
                            "route_parameters" => array(
                                "id" => "id"
                            ),
                            "icon" => "glyphicon glyphicon-eye-open",
                            "attributes" => array(
                                "data-toggle" => "tooltip",
                                "title" => $this->getTranslator()->trans("Show"),
                                "class" => "btn btn-default",
                                "role" => "button"
                            ),
                            "role" => "ROLE_ADMIN",
                        ),
                        array(
                            "route" => "client_edit",
                            "route_parameters" => array(
                                "id" => "id"
                            ),
                            "icon" => "glyphicon glyphicon-edit",
                            "attributes" => array(
                                "data-toggle" => "tooltip",
                                "title" => $this->getTranslator()->trans("Edit"),
                                "class" => "btn btn-default",
                                "role" => "button"
                            ),
                            "role" => "ROLE_ADMIN",
                        ),
                        array(
                            "route" => "client_disable",
                            "route_parameters" => array(
                                "id" => "id"
                            ),
                            "icon" => "glyphicon glyphicon-ban-circle",
                            "attributes" => array(
                                "data-toggle" => "tooltip",
                                "title" => $this->getTranslator()->trans("Disable"),
                                "class" => "btn btn-default",
                                "role" => "button"
                            ),
                            "role" => "ROLE_USER",
                            "renderif" => array("enabled"),
                        ),
                        array(
                            "route" => "client_enable",
                            "route_parameters" => array(
                                "id" => "id"
                            ),
                            "icon" => "glyphicon glyphicon-ok-circle",
                            "attributes" => array(
                                "data-toggle" => "tooltip",
                                "title" => $this->getTranslator()->trans("Enable"),
                                "class" => "btn btn-default",
                                "role" => "button"
                            ),
                            "role" => "ROLE_USER",
                            "renderif" => array("enabled) == false; var dummy = function(){}; dummy("),
                        ),
                        array(
                            "route" => "client_delete",
                            "route_parameters" => array(
                                "id" => "id"
                            ),
                            "icon" => "glyphicon glyphicon-trash",
                            "attributes" => array(
                                "data-toggle" => "tooltip",
                                "title" => $this->getTranslator()->trans("Delete"),
                                "class" => "btn btn-default",
                                "role" => "button"
                            ),
                            "confirm" => true,
                            "confirm_message" => $this->getTranslator()->trans("This operation will erase the client, all its groups and all their contacts"),
                            "role" => "ROLE_ADMIN",
                        )
                    )
                ))
                ;
    }

    /**
     * {@inheritdoc}
     */
    public function getEntity()
    {
        return "Fdelapena\SomeBundle\Entity\Client";
    }

    /**
     * {@inheritdoc}
     */
    public function getName()
    {
        return "client_datatable";
    }
}

My layout.html.twig head:

    <head>
        {% block head %}
        <meta http-equiv="Content-Type" content="text/html; charset={{ _charset }}"/>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta charset="utf-8"> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="icon" sizes="16x16" href="{{ asset('favicon.ico') }}" />
        <link rel="stylesheet" href="{{ asset('css/bootstrap.css') }}" />
        {% block stylesheets %}
            {% stylesheets
                '@data_tables_css'
                '@data_tables_responsive_css'
                '@FdelapenaSomeBundle/Resources/public/css/site.css'
                output='css/sit.css' filter='cssrewrite'
            %}
                <link rel="stylesheet" href="{{ asset_url }}" />
            {% endstylesheets %}
        {% endblock %}
        {% block javascripts %}
            <script src="{{ asset('js/jquery.js') }}"></script>
            <script src="{{ asset('js/bootstrap.js') }}"></script>
            <script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script>
            <script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script>
            <script type="text/javascript" src="/support/js/compiled/widget.js"></script>
            {% javascripts
                '@moment_js'
                '@data_tables_js'
                '@data_tables_responsive_js'
                '@data_tables_bootstrap_js'
                '@FdelapenaSomeBundle/Resources/public/js/site.js'
                output='js/site.js'
            %}
                <script type="text/javascript" src="{{ asset_url }}"></script>
            {% endjavascripts %}
            {% if app.request.locale != 'en' %}
            <script src="{{ asset('js/moment.locale.js') }}"></script>
            {% endif %}
        {% endblock %}
        <title>{% block title %}{% endblock %} - {% trans %}Some site{% endtrans %}</title>
        {% endblock %}
    </head>

from datatablesbundle.

stwe avatar stwe commented on May 27, 2024

@fdelapena thanks for your example. You're right. This problem should be fixed with version 0.5.2

from datatablesbundle.

InternalServerError avatar InternalServerError commented on May 27, 2024

Thanks a lot for your example.
It works very well, you saved me :)

Regards,

from datatablesbundle.

habibun avatar habibun commented on May 27, 2024

TypeError: document.body is null

from datatablesbundle.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.