I am planning to use JsTree as the plugin due to its capability to search within subfolders. I have created an array but the requirements needed for the JsTree is from this documentation, which is this array.
{
id : "string" // will be autogenerated if omitted
text : "string" // node text
icon : "string" // string for custom
state : {
opened : boolean // is the node open
disabled : boolean // is the node disabled
selected : boolean // is the node selected
},
children : [] // array of strings or objects
li_attr : {} // attributes for the generated LI node
a_attr : {} // attributes for the generated A node
}
This is my current code before implementing the requirements object array from the jstree plugin.
$drawings = [];
$getDrawings = DrawingFolder::latest()->get();
$drawings = $getDrawings;
foreach ($getDrawings as $key => $drawing) {
// get root folder files
$draws = Drawing::getDrawingsPDFById($drawing->id);
$drawSubFolders = DrawingSubFolder::getDrawingFolderById($drawing->id, DrawingSubFolder::PARENT_FIRST_FOLDER);
$drawings[$key]['drawings'] = $draws;
$drawings[$key]['folders'] = $drawSubFolders;
// get first folder
foreach ($drawSubFolders as $key1 => $drawSubFolder) {
$draw2 = DrawingSubFolder::getSubFoldersById($drawSubFolder->id, DrawingSubFolder::PARENT_SECOND_FOLDER);
$getFiles = DrawingRelation::getPDFByParentId($drawSubFolder->id);
$drawings[$key]['folders'][$key1]['folders'] = $draw2;
$drawings[$key]['folders'][$key1]['files'] = $getFiles;
// get second folder
foreach ($draw2 as $key2 => $draw) {
$draw3 = DrawingSubFolder::getSubFoldersById($draw->id, DrawingSubFolder::PARENT_THIRD_FOLDER);
$getFiles = DrawingRelation::getPDFByParentId($draw->id);
$drawings[$key]['folders'][$key1]['folders'][$key2]['folders'] = $draw3;
$drawings[$key]['folders'][$key1]['folders'][$key2]['files'] = $getFiles;
// get the last files
foreach ($draw3 as $key3 => $item) {
$filez = Drawing::getChildPDFFiles($item->id, DrawingSubFolder::PARENT_THIRD_FOLDER);
$drawings[$key]['folders'][$key1]['folders'][$key2]['folders'][$key3]['files'] = $filez;
}
}
}
}
This is the output:
{
"success":true,
"data":[
{
"id":8,
"folder_name":"A Brand new folder",
"slug_name":"a-brand-new-folder",
"parent":0,
"status":null,
"created_by":1,
"created_at":"2018-10-11 09:41:22",
"updated_at":"2018-10-11 09:41:22",
"drawings":[
{
"id":61,
"drawing_folder_id":8,
"filename":"spec/pdf/YEdXSQyVSouMphBp4Pif6y5SHQGoDNWuKeWm9EB3.xls",
"title":"annoying",
"status":null,
"created_by":1,
"created_at":"2018-10-11 09:41:43",
"updated_at":"2018-10-11 09:41:43"
},
{
"id":62,
"drawing_folder_id":8,
"filename":"spec/pdf/59iLD0KX8e3foyhWQb88qLa2XNKW9jLaPJO8odwC.ppt",
"title":"Javascript",
"status":null,
"created_by":1,
"created_at":"2018-10-11 09:41:44",
"updated_at":"2018-10-11 09:41:44"
}
],
"folders":[
{
"id":59,
"sub_folder_name":"That girl",
"slug_folder_name":"that-girl",
"created_by":1,
"created_at":"2018-10-11 09:41:53",
"updated_at":"2018-10-11 09:41:53",
"folders":[
{
"drawing_folder_id":8,
"sub_folder_id":60,
"parent_num":2,
"id":60,
"sub_folder_name":"Thesis",
"slug_folder_name":"thesis",
"text":"Thesis",
"folders":[
],
"files":[
]
},
{
"drawing_folder_id":8,
"sub_folder_id":61,
"parent_num":2,
"id":61,
"sub_folder_name":"Project",
"slug_folder_name":"project",
"text":"Project",
"folders":[
],
"files":[
]
}
],
"files":[
{
"id":63,
"filename":"spec/pdf/QjqjGI3baLEeMxBK1yQ5O5pw0duUs1zOXI7lEBCn.doc",
"title":"Complicated"
},
{
"id":64,
"filename":"spec/pdf/2YVAD1Vdvtg6NWeoItfMK3s7sxdjlMxm2v1XwbmA.txt",
"title":"Project overload"
}
]
}
]
},
{
"id":6,
"folder_name":"Magic",
"slug_name":"magic",
"parent":0,
"status":null,
"created_by":1,
"created_at":"2018-10-08 14:52:44",
"updated_at":"2018-10-08 14:52:44",
"drawings":[
{
"id":55,
"drawing_folder_id":6,
"filename":"spec/pdf/5fYjBCbw1toKlp0dAYH328XQ1U4nkmt4VBbPw6eK.xls",
"title":"Rodel short",
"status":null,
"created_by":1,
"created_at":"2018-10-11 07:56:57",
"updated_at":"2018-10-11 07:56:57"
},
{
"id":56,
"drawing_folder_id":6,
"filename":"spec/pdf/s0MxZFArsOt5IGpD9ucReu1BzRLTN2ts3bx6DyrY.zip",
"title":"Rodel Cute",
"status":null,
"created_by":1,
"created_at":"2018-10-11 07:57:03",
"updated_at":"2018-10-11 07:57:03"
}
],
"folders":[
{
"id":18,
"sub_folder_name":"New Folder",
"slug_folder_name":"new-folder",
"created_by":1,
"created_at":"2018-10-09 11:29:17",
"updated_at":"2018-10-09 11:29:17",
"folders":[
{
"drawing_folder_id":6,
"sub_folder_id":56,
"parent_num":2,
"id":56,
"sub_folder_name":"Power Ranger",
"slug_folder_name":"power-ranger",
"text":"Power Ranger",
"folders":[
{
"drawing_folder_id":6,
"sub_folder_id":58,
"parent_num":3,
"id":58,
"sub_folder_name":"Folder here",
"slug_folder_name":"folder-here-1",
"text":"Folder here",
"files":[
{
"drawingId":54,
"filename":"spec/pdf/licqS1sasdTANKTAEqK7QzCcLBnlNVqtu1BL6a75.ppt",
"title":"SamplePPTFile_500kb.ppt",
"text":"SamplePPTFile_500kb.ppt"
},
{
"drawingId":53,
"filename":"spec/pdf/hZPdpqUKvJIw79k40RXVMx3iESpIm8bpICfzQlOS.xls",
"title":"SampleXLSFile_19kb.xls",
"text":"SampleXLSFile_19kb.xls"
},
{
"drawingId":52,
"filename":"spec/pdf/wyuIkzrt1asI8nYrgKFpTJcdI9W3oi1liHZeNdp2.doc",
"title":"SampleDOCFile_100kb.doc",
"text":"SampleDOCFile_100kb.doc"
}
]
}
],
"files":[
]
},
{
"drawing_folder_id":6,
"sub_folder_id":57,
"parent_num":2,
"id":57,
"sub_folder_name":"Ranger Power",
"slug_folder_name":"ranger-power",
"text":"Ranger Power",
"folders":[
],
"files":[
]
}
],
"files":[
{
"id":57,
"filename":"spec/pdf/qdLf9GhDZdvT9fT7PwV8yifR2EQoVbP75ygIPX26.txt",
"title":"Jumps over the lazy dog"
},
{
"id":58,
"filename":"spec/pdf/f6ExjPNS73RECuHT45yTThduT0wMl8RD1dZmgXEY.ppt",
"title":"Quick brown fox"
}
]
}
]
}
]
}
This is my attempt:
$drawings = [];
$getDrawings = DrawingFolder::latest()->get([
"id",
"folder_name as text"
]);
$drawings = $getDrawings;
foreach ($getDrawings as $key => $drawing) {
// get root folder files
$draws = Drawing::getDrawingsPDFById2($drawing->id);
$drawSubFolders = DrawingSubFolder::getDrawingFolderById2($drawing->id, DrawingSubFolder::PARENT_FIRST_FOLDER);
$files = [];
$drawings[$key]['children'] = [];
$folderz = [];
foreach ($drawSubFolders as $key1 => $drawSubFolder) {
$folderz[$key1] = $drawSubFolder;
}
// First Child
$drawings[$key]['children'] = array_merge($folderz, $files);
// get first folder
foreach ($drawSubFolders as $index => $drawSubFolder) {
$draw2 = DrawingSubFolder::getSubFoldersById2($drawSubFolder->id, DrawingSubFolder::PARENT_SECOND_FOLDER);
$getFiles = DrawingRelation::getPDFByParentId($drawSubFolder->id);
$folders = [];
// get second folder
foreach ($draw2 as $key2 => $draw) {
$folders[$key2] = $draw;
}
$filesDrawingRelation = [];
foreach ($getFiles as $key2 => $file) {
$filesDrawingRelation[$key2] = $file;
}
$drawings[$key]['children'][$index]['children'] = array_merge($filesDrawingRelation, $folders);
// $drawings[$key]['children'][$key1] = [];
if ($drawing->id === $drawSubFolder->drawing_folder_id) {
// $drawings[$key]['childrens'] = array_merge(json_decode($getFiles), $folders);
}
}
}
I am not sure if where do I miss, but the error is from $drawings[$key]['children'][$index]['children'] = array_merge($filesDrawingRelation, $folders); or from $drawings[$key]['children'] = array_merge($folderz, $files);.
Because every time I try removing the $drawings[$key]['children'] = array_merge($folderz, $files) and replace it to $drawings[$key]['children'] = $folderz; works fine then adding up another array children $drawings[$key]['children'][$index]['children'] = $folders; will encounter an error which is the Indirect modification of overloaded element of App\\DrawingFolder has no effect.
Anyone has an idea on how to fix it?
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire