Laravel-datatables: [7.0] Ne rend pas le HTML

Créé le 27 janv. 2017  ·  18Commentaires  ·  Source: yajra/laravel-datatables

J'utilise Laravel Datatables 7, mais ma table ne rend pas le code HTML. Il rendait HTML auparavant, mais lorsque j'ai mis à jour les nouveaux Laravel DataTables à 7 à partir de 6, il a cessé de rendre HTML en colonne. http://prntscr.com/e11n84

C'est avec Laravel DataTables 6 - http://prntscr.com/e11ph0

Commentaire le plus utile

    return Datatables::of($this->users->getForDataTable($request->get('status'), $request->get('trashed')))
        ->editColumn('confirmed', function ($user) {
            return $user->confirmed_label;
        })
        ->addColumn('roles', function ($user) {
            return $user->roles->count() ?
                implode('<br/>', $user->roles->pluck('name')->toArray()) :
                trans('labels.general.none');
        })
        ->addColumn('actions', function ($user) {
           return $user->action_buttons;
        })
        ->rawColumns(['actions', 'confirmed'])
        ->withTrashed()
        ->make(true);

Tous les 18 commentaires

Les résultats sont échappés par défaut sur la v7. Je n'ai pas encore documenté tous les changements de rupture, mais le journal des modifications devrait fournir des indices. Merci!

Comment puis-je résoudre le même problème mais en service ?

@ brian2694 utilise la nouvelle méthode ->rawColumns(['column_with_html']) .

J'ai un problème similaire, un exemple pour utiliser les rawColumns ?

    return Datatables::of($this->users->getForDataTable($request->get('status'), $request->get('trashed')))
        ->editColumn('confirmed', function ($user) {
            return $user->confirmed_label;
        })
        ->addColumn('roles', function ($user) {
            return $user->roles->count() ?
                implode('<br/>', $user->roles->pluck('name')->toArray()) :
                trans('labels.general.none');
        })
        ->addColumn('actions', function ($user) {
           return $user->action_buttons;
        })
        ->rawColumns(['actions', 'confirmed'])
        ->withTrashed()
        ->make(true);

Bon!

Peut-être permettre

->rawColumns(['*'])

?

@divdax essayez peut-être d'utiliser ->escapeColumns([]) pour obtenir le même résultat.

merci beaucoup c'est très utile

->escapeColumns([]) a fonctionné pour moi. rawColumns('column_with_html') ne l'a pas fait.
Utiliser laravel 5.5 avec "yajra/laravel-datatables-oracle": "~8.0"

Nara, rawColumns prend un argument de tableau, il devrait donc être rawColumns(['column_with_html'])

Si vous souhaitez afficher une vue dans une colonne, vous pouvez procéder comme suit :

  ->editColumn('action', function(User $u){
       return view('users.action-btns', ['id'=>$u->id])->render();
  })

Si je modifie une colonne pour la rendre avec une vue, ne peut-on pas supposer par défaut que la vue sera entièrement échappée par la lame, et n'a donc pas besoin de s'échapper à nouveau? Une colonne modifiée avec une vue peut être automatiquement définie (par défaut) pour être brute, tout comme une colonne action l'est déjà (bien que la documentation ne le mentionne pas).

j'ai le même problème, et mon ami me dit d'ajouter ->escapeColumns([]), et ses travaux.

`if ($request->ajax()) {
$ajax = Datatables::of(Admin::query())->escapeColumns([])->make(true);
retourne $ajax;
}

    $dataTable = $htmlBuilder
        ->addColumn(['data' => 'admin_id', 'name' => 'admin_id', 'class' => 'id-column', 'title' => 'Id', 'searchable' => false, 'render' => function () {
            $editUrl = route('backend.staff.edit', '');
            return "function(data,type,full,meta){ return '<a href=" . $editUrl . "/'+data+'>'+data+'</a>'; }";
        }])
        ->addColumn(['data' => 'username', 'name' => 'username', 'title' => trans('default.name'), 'class' => 'name-column', 'render' => function () {
            $editUrl = route('backend.staff.edit', '');
            return "function(data,type,full,meta){ return '<a href=" . $editUrl . "/'+full.admin_id+'>'+data+'</a>'; }";
        }])
        ->addColumn(['data' => 'ip_address', 'name' => 'ip_address', 'title' => trans('default.ip_address')])
        ->addColumn(['data' => 'last_login', 'name' => 'last_login', 'title' => trans('default.last_login'), 'class' => 'date-column', 'searchable' => false])
        ->addColumn(['data' => 'html_status', 'name' => 'html_status', 'title' => trans('default.status'), 'class' => 'status-column', 'searchable' => false])
        ->addAction(['data' => 'action_button', 'name' => 'action', 'title' => trans('default.action'), 'class' => 'actions-column'])`

@tonihidayt Comprenez-vous ce que fait escapeColumns([]) ? Il me semble qu'il a désactivé TOUS les échappements HTML en définissant AUCUNE colonne pour appliquer l'échappement HTML. Cela peut être un moyen facile de résoudre un problème, qui vous mène ensuite dans une situation dangereuse dans d'autres circonstances.


->escapeColumns([])

Cela fonctionne correctement pour moi.

Je suis d'accord avec @jugej . Je ne veux pas risquer d'échapper à TOUTES les colonnes, mais celle que je veux rendre brute est un accesseur et ne produit pas de résultat brut avec $datatables->rawColumns(['full_link']);

@yajra Veuillez mettre à jour cette documentation

https://datatables.yajrabox.com/eloquent/add-edit-remove-column

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

kamrava picture kamrava  ·  3Commentaires

shadoWalker89 picture shadoWalker89  ·  3Commentaires

ahmadbadpey picture ahmadbadpey  ·  3Commentaires

hari-web picture hari-web  ·  3Commentaires

hohuuhau picture hohuuhau  ·  3Commentaires