【发布时间】:2019-05-27 08:50:53
【问题描述】:
我需要一些帮助!!
我需要给每个变量一个 id 以便稍后使用它来进行 ajax 单击方法操作以进入表内的 $folder 子目录。
我必须在控制器或 ajax 中这样做吗?
应用中使用的数据表插件:https://datatables.net/
//这三个函数:Controller函数、Ajax函数和Bootstrap,你可以看到表格顶部的文件夹然后列出媒体,我对代码及其代码没有任何问题工作正常。
public function ajaxSearchMedias() {
$this->checkAccessPlaylists(false) ;
$this->loadModelSpe('Media');
$this->loadModelSpe('media');
$orderby = 'name' ;
$orderway = 'ASC' ;
$search = NULL ;
if(isset($_POST['order'][0]["column"])) {
$column_to_order = (int) $_POST['order'][0]["column"] ;
if($column_to_order == 2)
$orderby = 'length' ;
}
if(isset($_POST['order'][0]["dir"])) {
$way_to_order = $_POST['order'][0]["dir"] ;
if(strtolower($way_to_order) == 'desc')
$orderway = 'DESC' ;
}
if($_POST['search']["value"])
$search = $_POST['search']["value"] ;
$data = array();
// Display folders in the content playlists
if(isset($_POST['folderId']) && $_POST['folderId'] != -1) {
$level = $this->media->getFolderLevel($_POST['folderId'])->level;
$level++;
$parentFolder = $_POST['folderId'];
$folders = $this->media->getFoldersByParentFolderId($_POST['folderId']);
$medias = $this->media->getMediasByParentFolderId($_POST['folderId']);
}else {
$siteId = $_SESSION["sess_id_site"];
$folders = $this->media->getRootFoldersBySiteId($siteId);
$medias = $this->media->getRootMediasBySiteId($siteId);
}
if($folders) {
foreach ($folders as $folder){
//$name = $newtext = wordwrap( $one_media->name, 15, "\n", true );
$name = $folder->name;
$name = '<span>'.$name.'</span>';
$unformatted_length = Helper::getLengthForMedia(array("type" => $folder->type)) ;
$length = Helper::convertSecondsToMinutesSeconds($unformatted_length) ;
$orientation_and_type_icon = '<div class="" data-name="'.htmlspecialchars($folder->name, ENT_QUOTES, 'UTF-8').'" data-length="'.$length.'" data-unformatted_length="'.$unformatted_length.'" data-id="'.$one_media->id.'" data-type="media" >' ;
$orientation_and_type_icon .= '<span class="icon">'.Helper::getIconForTypeAndOrientationForMedia($folder).'</span>' ;
$orientation_and_type_icon .= '<span class="thumbnail" style="display:none;">'.Helper::getThumbnailForMedia($folder, $this->current_id_company, $this->current_id_site, "img-thumbnail").'</span>' ;
$orientation_and_type_icon .= '<button type="button" id="'.$folder->name.'" > <span class="glyphicon glyphicon-plus-sign"></span></span></button>' ;
$orientation_and_type_icon .= '</div>' ;
array_push($data, array('orientation_and_type_icon' => $orientation_and_type_icon, 'name' => $name, 'length' => $length));
}
}
// Display Medias in the content playlist
$medias = $this->Media->getMediasForContentPlaylists($search, $orderby, $orderway, 500, $this->current_id_site, $id_folder = NULL);
if($medias) {
foreach ($medias as $one_media){
//$name = $newtext = wordwrap( $one_media->name, 15, "\n", true );
$name = $newtext = $one_media->name;
$name = '<span>'.$name.'</span>';
$unformatted_length = Helper::getLengthForMedia(array("type" => $one_media->type, "length" => $one_media->length)) ;
$length = Helper::convertSecondsToMinutesSeconds($unformatted_length) ;
$orientation_and_type_icon = '<div class="pl_media_data" data-name="'.htmlspecialchars($one_media->name, ENT_QUOTES, 'UTF-8').'" data-length="'.$length.'" data-unformatted_length="'.$unformatted_length.'" data-id="'.$one_media->id.'" data-type="media" >' ;
$orientation_and_type_icon .= '<span class="icon">'.Helper::getIconForTypeAndOrientationForMedia($one_media).'</span>' ;
$orientation_and_type_icon .= '<span class="thumbnail" style="display:none;">'.Helper::getThumbnailForMedia($one_media, $this->current_id_company, $this->current_id_site, "img-thumbnail").'</span>' ;
$orientation_and_type_icon .= '</div>' ;
array_push($data, array('orientation_and_type_icon' => $orientation_and_type_icon, 'name' => $name, 'length' => $length));
}
}
$json_result = json_encode(array("data" => $data));
print $json_result;
}
// This is the ajax function, this function list media's and folders using data tables plugin without any problem, the main problem is giving an id to folders different than the media's so I can use it to make the click on for the folders.
this.getMediaList = function() {
var jqxhr = $.getJSON( url + 'plugins/DataTables-1.10.12/media/js/i18n/fr_FR.json', function( data ) {});
jqxhr.done(function(data) {
self.pl_dt_language_json = data ;
var languages_dt = self.pl_dt_language_json ;
languages_dt = $.extend(languages_dt, {"sSearch": ""});
self.pl_medias_dt = $('#pl_medias').DataTable({
language: languages_dt,
"columns": [
{ "data": "type" },
{ "data": "orientation_and_type_icon" },
{ "data": "name" },
{ "data": "length" },
],
"columnDefs": [
{ "searchable": false, "orderable": false, "targets": 0 },
{ className: "pl_media_cell_type", "targets": [ 0 ] } ;
{ className: "pl_media_cell_icon", "targets": [ 1 ] } ,
{ className: "pl_media_cell_name", "targets": [ 2 ] } ,
{ className: "pl_media_cell_length", "targets": [ 3 ] }
],
"order": [[ 1, 'asc' ]],
initComplete: function(settings, json) {
// search
if($('#pl_medias_filter input').eq(0).size() > 0) {
$('#pl_medias_filter input').eq(0).attr("placeholder", "Rechercher un fichier") ;
$('#pl_medias_filter input').unbind();
$('#pl_medias_filter input').on( 'keyup', function () {
var searchInput = $(this).val();
if(searchInput.length == 0) {
window.clearTimeout(self.pl_medias_dt_filter_status);
self.pl_medias_dt.search( searchInput ).draw();
} else {
if(searchInput.length < 3) {
window.clearTimeout(self.pl_medias_dt_filter_status);
self.pl_medias_dt_filter_status = setTimeout(function() {
self.pl_medias_dt.search( searchInput ).draw() ;
}, 3000);
} else {
window.clearTimeout(self.pl_medias_dt_filter_status);
self.pl_medias_dt_filter_status = setTimeout(function() {
self.pl_medias_dt.search( searchInput ).draw()
}, 1000);
}
}
});
}
},
drawCallback: function(settings) {
// refresh drag and drop
self.initDragDropSortElementForContentPlaylist();
},
"serverSide": true,
"paging": false,
"lengthChange" : false,
"scrollY": 122,
"info": false,
"ajax": {
url : url + "playlists/ajaxSearchMedias", // json datasource
type: "post"
},
"dom": '<lf<t>ip>'
});
});
},
// This is the Bootstrap script
<div class="pl_block_wrapper pl_block_media_wrapper row">
<div class="col-xs-2 pl_block_label"><span>AUTOPROMO</span></div>
<div class="col-xs-10 pl_block_container_middle">
<table id="pl_medias" class="table table-striped table-bordered" width="100%" cellspacing="0">
<thead>
<tr>
<th>Type</th>
<th>Nom</th>
<th>Durée</th>
</tr>
</thead>
</table>
</div>
</div>
</div>
如您所见,三个 Bootstrap ajax jquery 和 PHP 脚本。
【问题讨论】:
-
你好像忘记翻译代码块之间的段落了。
-
您好,Haem,这是翻译:内容播放列表是根据您已加载到 Autopromo 部分的电影相关媒体(海报和预告片)以及图像和视频内容构建的播放列表,谢谢您重新评论,你有什么解决办法吗? :-)
-
恐怕这不是我的专业领域。你应该edit你的问题,当你在处理它的时候,试着把你的代码示例缩短为minimal reproducible example。
-
您想通过点击实现什么目标?你的问题很不清楚
-
哈姆先生您好,您的要求已经完成了:-)
标签: php jquery sql ajax model-view-controller