2016-03-30 7 views
1

Ich habe eine Seite, die eine Datentabelle von MP3-Dateien über ein serverseitiges Skript lädt. Ich benutze das Sound-Manager-Plugin, um die Dateien abzuspielen, aber sie spielen nicht inline und öffnen nur in einem neuen Fenster. Ich denke, das liegt daran, dass der Inline-Player initialisiert wird, bevor die Tabelle vollständig geladen ist, so dass die MP3-Dateien nicht gefunden werden. Wie kann ich den "Hören" -Knopf erhalten, um diese Dateien inline (auf der Seite) abzuspielen?MP3 Dateien, die nicht über Inline-Player wiedergegeben werden

Javascript:

<script src="{{asset('soundmanager/js/soundmanager2-jsmin.js')}}"></script> 
<script src="{{asset('soundmanager/js/inlineplayer.js')}}"></script> 


<script type="text/javascript"> 
$(document).ready(function() { 

    $('#uploads-table').dataTable({ 
     "bProcessing": true, 
     "bServerSide": true, 
     "bPaginate": true, 
     "destroy": true, 
     "sAjaxSource": "/api/admin/tables/uploads", 
     "order": [[5,'desc']], 
     "columnDefs": [ { //this prevents errors if the data is null 
      "targets": "_all", 
      "defaultContent": "" 
     } ], 
     "columns": [ 
     // title will auto-generate th columns 
      { "data": "name", "title": "Name", "orderable": true, "searchable": true }, 
      { "data": "description", "title": "Description", "orderable": true, "searchable": true }, 
      { "data": "file_extension", "title": "File Extension", "orderable": true, "searchable": true }, 
      { "data": "mimetype", "title": "Mimetype", "orderable": true, "searchable": true }, 
      { "data": "created_by", "title": "Created By", "orderable": true, "searchable": true }, 
      { "data": "created_at", "title": "Created At", "orderable": true, "searchable": true }, 
      { "data": "updated_at", "title": "Updated At", "orderable": true, "searchable": true }, 
      { "data": "actions", "title": "Actions", "orderable": false, "searchable": false} 
     ] 
    }); 

}); 
</script> 

Server-Seite Skript:

$upload = Upload::select(array('id','name', 'description', 'file_extension', 'mimetype', 'created_by', 'created_at', 'updated_at', 'filename', 'is_remote')); 

    return Datatables::of($upload) 
     ->edit_column('name', '<a href="/admin/content/uploads/{{$id}}/view">{{$name}}</a>') 
     ->edit_column('created_by', function($upload) { 
      return ($upload->user ? '<a href="/admin/users/'.$upload->user->id.'/view">'.$upload->user->username.'</a>' : 'Unknown'); 
     }) 
     ->edit_column('actions', function($upload) { 

      if($upload->is_remote) { 
       $filePath = URL::to($upload->filename); 
      } 
      else { 
       $filePath = URL::to($upload->getFilePath()); 
      } 

      return ('<a href="'.$filePath.'" type="'.$upload->mimetype.'" class="sm2_link" target="_blank">Listen</a> 
       <a href="/admin/content/uploads/'.$upload->id.'/view" class="btn btn-xs btn-default">View</a> 
       <a href="/admin/content/uploads/'.$upload->id.'/edit" class="btn btn-xs btn-default">Edit</a> 
       <a data-itemname="'.$upload->name.'" data-action="/admin/content/uploads/'.$upload->id.'/delete" data-title="Delete Upload?" data-toggle="modal" href="#deleteModal" class="confirmDelete btn btn-xs btn-default">Delete</a>'); 
     }) 
     ->remove_column('id') 
     ->make(true); 

Antwort

0

Verwenden drawCallback Option SoundManager2 player auf jedem Tisch Unentschieden zu initialisieren.

$('#uploads-table').dataTable({ 
    drawCallback: function(settings){ 
     // Workaround: remove click event handler from 
     // MP3 links other than the once in the table. 
     inlinePlayer.removeEventHandler(document, 'click', inlinePlayer.handleClick); 

     inlinePlayer.init() 
    }, 
    // other options 
}); 

Bitte beachten Sie, dass die Initialisierung des Players der einzige Weg ist, um das erneute Scannen von MP3-Links zu erzwingen. Wenn Sie andere MP3-Links auf der Seite haben, können sie zweimal initialisiert werden. Aus diesem Grund habe ich die Zeile eingefügt, um den Click-Event-Handler zu entfernen, bevor der Player neu initialisiert wird.

+0

Vielen Dank! Es funktioniert jetzt perfekt :) – Taylor23

+0

Also sprach ich ein wenig zu früh, es funktioniert perfekt für die erste Seite. Die Tabelle wird jedoch paginiert, wenn ich also zur nächsten Seite gehe, versucht sie, die Dateien von der vorherigen Seite über die neuen Dateien abzuspielen. Die Standard-Display-Länge beträgt 10 Uploads, aber wenn ich diese auf 25 setze, die nächsten 15 Spiele, aber pausiere nicht beim Klicken. – Taylor23

+0

@ Taylor23, Ich habe den Code aktualisiert, sehen, ob es funktioniert. –

Verwandte Themen