За последние 24 часа нас посетили 18798 программистов и 1607 роботов. Сейчас ищут 650 программистов ...

Использование yajra datatables вместе с laravel-breeeze

Тема в разделе "Laravel", создана пользователем volnistii11, 7 окт 2021.

Метки:
  1. volnistii11

    volnistii11 Новичок

    С нами с:
    5 авг 2020
    Сообщения:
    26
    Симпатии:
    0
    Здравствуйте, я настроил yajra datatables, все успешно работает, но сейчас хочу реализовать это совместно с laravel-breeze, но у меня не получается этого сделать. Не выводятся данные таблицы, отображаются только заглавия столбцов, в чем может быть проблема?
    Ниже я представил 2 листинга:
    -в первом просто реализация yajra datatables (я не стал приводить роутинг и контроллеры, т.к. все работает, перестает работать только при изменении шаблона index.blade.php, поэтому я привожу только его, но если нужно что-то еще только скажите)
    -моя попытка реализовать yajra datatables при помощи компонентов laravel-breeze

    Также привел скрины до(1) и после(2)...
    Листинг 1
    HTML:
    1.    <!doctype html>
    2. <html lang="en">
    3.     <meta charset="UTF-8">
    4.     <meta name="viewport"
    5.          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    6.     <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7.     <title>Format Documents</title>
    8.  
    9.     {{--    bootstrap   --}}
    10.     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet"
    11.          integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
    12.     <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.bundle.min.js"
    13.            integrity="sha384-U1DAWAznBHeqEIlVSCgzq+c9gqGAJn5c/t99JyeKa9xxaYpSvHU5awsuZVVFIhvj"
    14.            crossorigin="anonymous"></script>
    15.     {{-- jquery --}}
    16.     <script src="https://code.jquery.com/jquery-3.6.0.min.js"
    17.            integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
    18.  
    19.     {{--    datatables --}}
    20.     <link rel="stylesheet" href="https://cdn.datatables.net/1.11.0/css/dataTables.bootstrap5.min.css">
    21.     <script src="https://cdn.datatables.net/1.11.0/js/jquery.dataTables.min.js"></script>
    22.     <script src="https://cdn.datatables.net/1.11.0/js/dataTables.bootstrap5.min.js"></script>
    23.  
    24.     {{--    buttons--}}
    25.     <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/buttons/2.0.0/css/buttons.bootstrap5.css"/>
    26.     <script type="text/javascript" src="https://cdn.datatables.net/buttons/2.0.0/js/dataTables.buttons.js"></script>
    27.     <script src="https://cdn.datatables.net/buttons/2.0.0/js/buttons.bootstrap5.min.js"></script>
    28.     <script src="/vendor/datatables/buttons.server-side.js"></script>
    29.  
    30.  
    31.     {{--    select--}}
    32.     <link rel="stylesheet" href="https://cdn.datatables.net/select/1.3.3/css/select.bootstrap.min.css">
    33.     <script src="https://cdn.datatables.net/select/1.3.3/js/dataTables.select.min.js"></script>
    34.  
    35.     <script src="{{asset('plugins/editor/js/dataTables.editor.js')}}"></script>
    36.     <script src="{{asset('plugins/editor/js/editor.bootstrap5.min.js')}}"></script>
    37.  
    38.  
    39. </head>
    40. <section style="padding-top: 60px;">
    41.     <div class="container">
    42.         {!! $dataTable->table(['id' => 'format-table'], true) !!}
    43.     </div>
    44.     $(function () {
    45.  
    46.         var editor = new $.fn.dataTable.Editor({
    47.             ajax: "/service/formats",
    48.             table: "#format-table",
    49.             display: "bootstrap",
    50.             fields: [
    51.                 {label: "Formats name:", name: "name"},
    52.             ]
    53.         });
    54.  
    55.         $('#format-table').on('click', 'tbody td:not(:first-child)', function (e) {
    56.             editor.inline(this);
    57.         });
    58.  
    59.         {{$dataTable->generateScripts()}}
    60.     })
    61.  
    62.  
    63. </body>
    Листинг 2
    HTML:
    1.  <x-app-layout>
    2. <x-slot name="header">
    3.  
    4.     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet"
    5.          integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
    6.     <link rel="stylesheet" href="https://cdn.datatables.net/1.11.0/css/dataTables.bootstrap5.min.css">
    7.     <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/buttons/2.0.0/css/buttons.bootstrap5.css"/>
    8.     <link rel="stylesheet" href="https://cdn.datatables.net/select/1.3.3/css/select.bootstrap.min.css">
    9.  
    10.     <h2 class="font-semibold text-xl text-gray-800 leading-tight">
    11.         {{ __('Dashboard') }}
    12.     </h2>
    13. </x-slot>
    14.  
    15. <x-content-body>
    16.     <section style="padding-top: 60px;">
    17.         <div class="container">
    18.             {!! $dataTable->table(['id' => 'format-table'], true) !!}
    19.         </div>
    20.     </section>
    21.  
    22.     <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.bundle.min.js"
    23.            integrity="sha384-U1DAWAznBHeqEIlVSCgzq+c9gqGAJn5c/t99JyeKa9xxaYpSvHU5awsuZVVFIhvj"
    24.            crossorigin="anonymous"></script>
    25.     <script src="https://code.jquery.com/jquery-3.6.0.min.js"
    26.            integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
    27.     <script src="https://cdn.datatables.net/1.11.0/js/jquery.dataTables.min.js"></script>
    28.     <script src="https://cdn.datatables.net/1.11.0/js/dataTables.bootstrap5.min.js"></script>
    29.     <script type="text/javascript" src="https://cdn.datatables.net/buttons/2.0.0/js/dataTables.buttons.js"></script>
    30.     <script src="https://cdn.datatables.net/buttons/2.0.0/js/buttons.bootstrap5.min.js"></script>
    31.     <script src="/vendor/datatables/buttons.server-side.js"></script>
    32.     <script src="https://cdn.datatables.net/select/1.3.3/js/dataTables.select.min.js"></script>
    33.     <script src="{{asset('plugins/editor/js/dataTables.editor.js')}}"></script>
    34.     <script src="{{asset('plugins/editor/js/editor.bootstrap5.min.js')}}"></script>
    35.  
    36.     <script>
    37.         $(function () {
    38.  
    39.             var editor = new $.fn.dataTable.Editor({
    40.                 ajax: "/service/formats",
    41.                 table: "#format-table",
    42.                 display: "bootstrap",
    43.                 fields: [
    44.                     {label: "Наименование формата:", name: "name"},
    45.                 ]
    46.             });
    47.  
    48.             $('#format-table').on('click', 'tbody td:not(:first-child)', function (e) {
    49.                 editor.inline(this);
    50.             });
    51.  
    52.             {{$dataTable->generateScripts()}}
    53.         })
    54.  
    55.     </script>
    56.  
    57. </x-content-body>
    58. </x-app-layout>
    1
    [​IMG]
    2
    [​IMG]
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    Ну читать надо доку чё там и к чему... Или инициализация как то по другому, или может не все что нужно подключил...
    Кто ж его знает
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.105
    Симпатии:
    1.243
    Адрес:
    там-сям
    Что-то с авторизацией не так. То есть таки в маршрутах или контроллерах. Только не надо выкладывать весь проект. Отлаживайся: поставь брейкпоинты там где datatables отдаёт данные для отрисовки, пробуй отключать/подключать автоиризующие мидвары.
    --- Добавлено ---
    Ну и конечно логи надо смотреть. Может там есть ошибки. Короче, надо лучше стараться.
     
  4. volnistii11

    volnistii11 Новичок

    С нами с:
    5 авг 2020
    Сообщения:
    26
    Симпатии:
    0
    как можно заметить, я не самый опытный...
    Соответственно, в контроллерах написано всё по документации на минимальном уровне (для yajra datatable это resource контроллер и пара контроллеров со стандартным функционалом FormatDataTable и FormatDataTableEditor). Маршрут тоже самый обычный
    PHP:
    1. Route::resource('/service/formats', FormatController::class);
    Также, они друг без друга отлично работают...
    Спасибо за вектор, в каком направлении разбираться.
    P.S. но если у вас будет время одним глазом взглянуть, что у меня не так, буду очень благодарен https://github.com/volnistii11/archive
     
  5. volnistii11

    volnistii11 Новичок

    С нами с:
    5 авг 2020
    Сообщения:
    26
    Симпатии:
    0
    Перечитав кучу всего, я пришел к выводу, может быть мне нужно где-то csrf токен добавить куда-нибудь в ajax(я просто не очень понимаю куда)?
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    Посмотри в консоли xhr запрос уходит к бэку за данными? Если уходит - то какой ответ (статус ответа) 419 ? Если да то точно токен

    скорее всего сюда:

    PHP:
    1. var token = $("meta[name=csrf-token]").attr("content");
    2. var editor = new $.fn.dataTable.Editor({
    3.                 ajax: "/service/formats",
    4.                 table: "#format-table",
    5.                 display: "bootstrap",
    6.                 fields: [
    7.                     {label: "Наименование формата:",
    8. name: "name",
    9. _token: token},
    10.                 ]
    11.             });
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.105
    Симпатии:
    1.243
    Адрес:
    там-сям
    Исходя из принципа "мы не кормим рыбой, а учим её ловить", скажу: тебе надо точно выяснить ошибку чтобы знать что делать дальше. Если возникает ошибка на стороне клиента, её можно найти в инспекторе. Если на стороне сервера, то в логах Laravel. Не надо вставлять токены просто на всякий случай.
     
  8. volnistii11

    volnistii11 Новичок

    С нами с:
    5 авг 2020
    Сообщения:
    26
    Симпатии:
    0
    @artoodetoo
    @ADSoft
    Хм, решил в консоль заглянуть, и увидел предупреждения и ошибку, которых нету в варианте без laravel-breeze.
    upload_2021-10-12_12-25-41.png

    Решил убрать эдитор, чтобы посмотреть, что будет дальше, он начал жаловаться теперь на саму DataTable.
    upload_2021-10-12_12-25-26.png
     
    #8 volnistii11, 12 окт 2021
    Последнее редактирование: 12 окт 2021
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.760
    Ну вот. Тут чтой-то со скриптами явно, раз $(...).DataTable is not a function.
     
  10. volnistii11

    volnistii11 Новичок

    С нами с:
    5 авг 2020
    Сообщения:
    26
    Симпатии:
    0
    интересно то, что я не использую никаких своих скриптов. Только стандартные для breeze и datatable. И по отдельности они работают.
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.760
    Какие-то не подключились. Все собираете через Laravel Mix? Я бы предложил jQuery и эту фигню вынести наружу. Или была какая-то настройка веб-пака, чтоб он часть скриптов оставлял в глобальном пространстве, а не засовывал в свою замысловатую систему. Только я её последний раз пользовался года 4 назад, поэтому не помню точно. Поищите.
     
  12. volnistii11

    volnistii11 Новичок

    С нами с:
    5 авг 2020
    Сообщения:
    26
    Симпатии:
    0
    Нет, Laravel mix не использую, да и не использовал никогда еще, пока только с этим разбираюсь, почитаю про него, спасибо. Я просто подключал несколько js и css по отдельности, ну это видно в листинге
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.760
    Судя по скрину консоли, что-то не так подключили. Если микс не использовали тут, то и не надо :) Он далеко не всегда удобен
     
  14. volnistii11

    volnistii11 Новичок

    С нами с:
    5 авг 2020
    Сообщения:
    26
    Симпатии:
    0
    Да вот пока не могу понять, что именно, т.к. по отдельности бриз и дататейбл работают...
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.760
    А селектор правильный? Дайте ваш жабаскрипт сюда, чтоб глянуть
     
  16. volnistii11

    volnistii11 Новичок

    С нами с:
    5 авг 2020
    Сообщения:
    26
    Симпатии:
    0
    #16 volnistii11, 14 окт 2021
    Последнее редактирование: 14 окт 2021
  17. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.760
    О, такие компоненты в ларавел появились в тот период, когда я на нём не писал новых проектов, а сопровождал огромный проект на старой версии. Так что я ещё не в курсе. Надо посмотреть, точно ли этот пуш в таком варианте срабатывает.
     
  18. volnistii11

    volnistii11 Новичок

    С нами с:
    5 авг 2020
    Сообщения:
    26
    Симпатии:
    0
    Да я и без push пробовал, как видно в варианте в шапке поста, ошибка одна и та же остается, в network браузера тоже ничего не меняется...
    Может ли это быть как-то связано с пространством имен в javascript? Просто предположение, т.к. я в js вообще ничего не понимаю...