1

選択した値でツリーを生成するのはどうですか? 選択したキーを保存し、編集時に、選択したキーを使用して追加の json 配列を使用してツリーを生成します。しかし、問題は、mysql を介して画像の順序を変更すると、キーが実際の値を表していないことです。

これは、深さ = 1 でツリーの json 配列を作成する方法です。

    /*** get image tree structure ***/
    $i = 0; $j = 0;//$j = 0;  $l = 0;
    $counter = 0;
    $whole_tree = $this->cms_model->get_tree_big_array('0');
    foreach ($whole_tree as $node_key => $node_array) {
        foreach ($node_array as $key_name => $node_element_value) {

            if($key_name == 'title'):
                $new_array[$i][$key_name] = $node_element_value;                
            elseif($key_name == 'filename'):
                $new_array[$i][$key_name] = $node_element_value;
            elseif($key_name == 'id'):
                $new_array[$i][$key_name] = $node_element_value;
            elseif($key_name == 'is_folder'):
                $new_key_name = 'isFolder';

                if($node_element_value == '1'):
                    $new_node_element_value = 'true';
                    $new_array[$i][$new_key_name] = $new_node_element_value;

                    $cur_id = $node_array['id'];
                    $children = $this->cms_model->get_children_array($cur_id);

                    foreach ($children as $child_key_name => $child_element_value) {
                        foreach ($child_element_value as $super_child_key_name => $childnode_element_value) {

                        if($super_child_key_name == 'title'):
                            $new_array[$i]['children'][$child_key_name][$super_child_key_name] = $childnode_element_value;
                        elseif($super_child_key_name == 'filename'):
                            $new_array[$i]['children'][$child_key_name][$super_child_key_name] = $childnode_element_value;
                        elseif($super_child_key_name == 'id'):
                            $new_array[$i]['children'][$child_key_name][$super_child_key_name] = $childnode_element_value;
                        endif;
                        }
                        $counter++;
                    }
                else:
                    $new_node_element_value = 'false';
                endif;



                $cur_id = $node_array['id'];
                $children = $this->cms_model->get_children_array($cur_id);

            endif;
            $j++;
        }
        $i++;
    }
    //print_r($new_array);
    $json_tree = json_encode($new_array);
    $data['json'] = $json_tree; 

上記は dynatree スクリプトです。ページの写真をいくつか選択し、選択されたものとアクティブ化されたもののプレビューを作成します。この場合、私は写真を持っています。

jQuery(function(){
jQuery("#tree").dynatree({
    checkbox: true,

    onPostInit: function(isReloading, isError){
        var data = <?php echo $json;?>; // the whole json array tree object
        var array = <?php echo $key_array;?>; // these the stored keys where selected from last post.
        var imgarray = <?php echo $img_array;?>; // these are the selected images id's

        for(i=0; i<array.length; i++){
            var tree = jQuery("#tree").dynatree("getTree");
            tree.getNodeByKey(array[i]).select(); // i'm selecting on load the selected nodes using this function.
            // what i want is to select the nodes using the $img_array array in order to have
            // an independence in what order the nodes are generated
        }

    },                              

    onActivate: function(node) {
        var site_url = '<?php echo site_url(); ?>';
        var controller_path = '/admin/actions/get_image_path/';
        var image_id = node.data.id;


        jQuery.ajax({
            url: site_url+controller_path+image_id,
            type: 'GET',
            datatype: 'html',
            processData: false,
            success: function(msg){
                jQuery('.image-previewer').css({display: 'block'});
                jQuery('.image-previewer').html(msg);
            }
        });

    },
    onSelect: function(flag, node) {
        //alert(node.data.id);
        if(flag){
            jQuery('<div id="'+node.data.id+'">').css({
                    display: 'block',
                    borderRadius: '3px',
                    margin: '0 0 10px 0',
            })
            .appendTo('.list');
            jQuery('<span id="'+node.data.id+'" style="padding:0px 5px; line-height:40px; margin-right:5px; float:left; background:#fffccc;">Εχεις επιλέξει: '+node.data.filename+' </span>').appendTo('div#'+node.data.id+'');
            jQuery('<img id="img_'+node.data.id+'" src="http://pinecone.gr/files/thumbs/'+node.data.filename+'" style="float:left; margin-right:5px">').appendTo('div#'+node.data.id+'');   
            jQuery('<span>').css({
                lineHeight: '40px',
                display: 'block',
                float: 'left',
                id: 'span_'+node.data.id
            })

            jQuery('<input>',
            { 
                type: 'hidden',
                name: 'img_array[]',
                id : 'input_'+node.data.id,
                value: 'img_'+node.data.id
            }).appendTo('div#'+node.data.id+'');

            jQuery('<input>',
            { 
                type: 'hidden',
                name: 'keys_array[]',
                id : 'inputkeys_'+node.data.id,
                value: node.data.key
            }).appendTo('div#'+node.data.id+'');                                        

            jQuery('<br clear="all" />').appendTo('div#'+node.data.id+'');
            jQuery('input#input_'+node.data.id+'').attr({ value: node.data.id})

        }else if(!flag){
            jQuery('.list div#'+node.data.id+'').remove();
        }

    },
    persist: false,
    children:
    <?php echo $json; ?>

});

});

データベース内の画像レコードの順序を変更したり、画像を追加したりすると、構造が変更され、データの整合性に問題があるため、現在のレコードの選択されたキーは実際のものではなくなります。解決策として何を提案しますか。前もって感謝します

4

0 に答える 0