【问题标题】:How to give different row id's for two different variables in the same table, one for folders and the other for medias?如何为同一张表中的两个不同变量提供不同的行 ID,一个用于文件夹,另一个用于媒体?
【发布时间】: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


【解决方案1】:

我找到了一个简单的解决方案来添加一个 id 和一个类:-) :

$('#pl_medias tr').attr('id', 'table-row-id');

$('#pl_medias tr').attr('class', 'table-row-class');

非常感谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多