یلدا ادامه داره... ❤️ ۴۰ درصد تخفیف همه دورهها
استفاده از تخفیفهاسلام
وقت همه دوستان بخیر
شرح مسئله:
الف) ما یک فایل منیجر داریم که شامل دو بخش هست.
1- روت اصلی list که مسیر اصلی پوشه آپلودر رو بررسی میکنه و لیست پوشه ها و فایل هارو result میکنه.
2- بخشی از result بالا ، پوشه های درون پوشه آپلودر هست که وقتی روی اون ها کلیک میشه folder-id به کنترلر پاس میشه و result بر اساس اون بروز میشه.
ب) حالا ما در blade های زیادی به عنوان دکمه آپلود میخواهیم view فایل منیجر رو در مودال incloude کنیم.
مشکل: با ارور اینکه اطلاعاتی وجود ندارد مواجه میشیم دلیلش هم اینه که باید همراه incloude به صورت دستی اطلاعات رو پاس بدیم و ما به اون اطلاعات دسترسی نداریم چون پس از پردازش کنترلر روت list اون اطلاعات result میشه.
راه حل خودم پس از تحقیق که به نتیجه نرسید: استفاده از view composer در Service Providers که باهاش میشه دیتاهایی رو در همه View ها به اشتراک گذاشت اما اون جا هم ما اطلاعاتی نداریم چون اول باید توسط کنترلر پردازش بشه.
راه کار شما چیه؟
Controller
public function filesInDir($folder_dir)
{
function scan2( $dir , &$saved = [] ) : array {
$folders = glob( "{$dir}/*" , GLOB_ONLYDIR ) ;
foreach( $folders as $folder ) {
$saved[] = [
"path" => str_replace(public_path() . '/fileUpload'.'/', '', $folder) ,
"name" => basename($folder),
"childrens" => scan2($folder)
];
}
return $saved ;
}
$AllFiles = File::where('file_direction', $folder_dir)->get();
$options = scan2(public_path() . '/fileUpload');
$folderPath = $folder_dir;
$folderInPath = scan2(public_path() . '/fileUpload' .'/' . $folderPath);
return view('admin.file.list', compact('AllFiles', 'options', 'folderPath' , 'folderInPath'))->with(['collapseItemFiles' => 'active']);
}
blade
<div id="modal-up" style="display: none;">
@include('admin.file.list')
</div>
بهترین توصیه من برای شما اینه که به هیچ عنوان از مودال استاتیک در پروژه استفاده نکنید و مودال رو با const یا ajax فراخوانی کنید تا هم سورس سبک تری داشته باشید و هم اطلاعات سرعت واکنش بیشتری داشته باشند
سلام دوست عزیز وقت بخیر
برای مثال در تابع زیر چطور result رو به include پاس بدهم؟
$('#workshops_avatar').click(function(){
$.ajax({
type:'GET',
url:"{{ route('admin.file.list.get.ajax') }}",
success:function(data){
$('#modal-up').html(
@include('admin.file.modal' , data)
)}
});
$('#modal-up').show();
})
<div class="row flex-row-reverse">
<div class="col-lg-12 mb-4">
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">مدیریت فایل ها</h6>
</div>
<div class="card-body">
<form action="{{ Route('admin.file.store') }}" method="POST" enctype="multipart/form-data">
{{ csrf_field() }}
<div class="form-row" dir="rtl">
<div class="col-md-3 mb-3 custom-file">
<input type="file" class="custom-file-input" name="file" id="customFile">
<label class="custom-file-label" for="customFile">انتخاب فایل</label>
</div>
<div class="col-md-3 mb-3">
<input type="text" class="form-control" name="file_title" placeholder="عنوان فارسی">
</div>
<div class="col-md-3 mb-3">
<input type="text" class="form-control" name="file_title_en" placeholder="عنوان انگلیسی">
</div>
<div class="col-md-3 mb-3">
<select name="file_direction" class="form-control">
<option selected value="root" class="text-left" dir="ltr">root</option>
@foreach($options as $option)
<option value="{{ $option['path'] }}" class="text-left" dir="ltr">{{ $option['path'] }}</option>
@if($option['childrens'] != 0)
@include('admin.partials.listFolder' ,[
'childrens' => $option['childrens'],
])
@endif
@endforeach
</select>
</div>
<div class="col-md-11 mb-3">
<input type="text" class="form-control" name="file_description" placeholder="توضیحات">
</div>
<div class="col-md-1 mb-3">
<button class="btn w-100 btn-primary" type="submit">آپلود</button>
</div>
</div>
</form>
@include('admin.partials.errors')
<hr>
<div class=" row w-100 m-0 p-0 mt-4" dir="rtl">
<div class="col-lg-12 mb-3">
<div class="filemanager-header row w-100 m-0 p-2">
<form class="row" action="{{ Route('admin.file.newfolder') }}" method="POST">
{{ csrf_field() }}
<div class="col-md-4">
<input type="text" class="form-control" name="folder_name" placeholder="عنوان پوشه">
</div>
<input type="hidden" name="folder_path" value="{{ $folderPath }}">
<button class="btn btn-secondary " type="submit"> <i class="fas fa-folder-plus ml-2"></i>ایجاد پوشه جدید</button>
</form>
<p style="direction: ltr !important;" class="m-0 ltr" >root{{ $folderPath ? '/'.$folderPath : '' }} </p>
</div>
</div>
<div class="col-md-3 m-0">
<ul class="folder-list">
<li class="p-2"><a class="d-flex align-items-center" href="{{ Route('admin.file.list') }}"><i class="fa fa-folder ml-1"></i> root</a>
<ul style="list-style: none;">
@foreach($options as $option)
<li class="p-2"><a class="d-flex align-items-center" href="{{ Route('admin.file.folder',$option['path']) }}"><i class="fa fa-folder ml-1"></i> {{ $option['name'] }}</a></li>
@if($option['childrens'] != 0)
@include('admin.partials.listFolderInUl' ,[
'childrens' => $option['childrens'],
])
@endif
@endforeach
</ul>
</li>
</ul>
</div>
<div class="col-md-9 m-0 file-field">
<div class="row w-100 m-0">
@foreach($folderInPath as $option)
<div class="col-xl-2 col-lg-3 col-md-4 col-sm-12 mb-3 p-1">
<a class="w-100 h-100" href="{{ Route('admin.file.folder',$option['path']) }}">
<div class="card app-file-list">
<div class="app-file-icon d-flex justify-content-center align-items-center">
<div class="dropdown no-arrow position-absolute top-0 right-0">
<button class="dropdown-toggle border-0" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400"></i>
</button>
<div class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="dropdownMenuLink" style="">
<div class="dropdown-divider"></div>
</div>
</div>
<i style="font-size: 73px;" class="fa fa-folder file-image"></i>
</div>
<div class="p-2 small text-left">
<div dir="ltr">{{ $option['name'] }}</div>
</div>
</div>
</a>
</div>
@endforeach
@foreach($AllFiles as $item)
<div class="col-xl-2 col-lg-3 col-md-4 col-sm-12 mb-3 p-1">
<div class="card app-file-list">
<div class="app-file-icon d-flex justify-content-center align-items-center">
<!-- <i class="fa fa-file-text-o text-warning"></i> -->
<div class="dropdown no-arrow position-absolute top-0 right-0">
<a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400"></i>
</a>
<div class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="dropdownMenuLink" style="">
<a class="dropdown-item text-right" href="#">کپی</a>
<a class="dropdown-item text-right" href="#">انتقال</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-right" href="{{ Route( 'admin.student.delete' , $item->id) }}">حذف</a>
</div>
</div>
<img alt="image" class="file-image" src="{{ asset($item->file_url) }}">
</div>
<div class="p-2 small text-left">
<div dir="ltr">{{ $item->file_name }}</div>
<div class="text-muted">{{ $item->file_size }}</div>
</div>
</div>
</div>
@endforeach
</div>
</div>
</div>
</div>
</div>
</div>
</div>
اصلا از ریپازیتوری استفاده نکردی.
یکی از اساسی ترین ایراداتت اینه که در کوئری هات از php بصورت مستقیم استفاده کردی.
این چیزی که من دارم میبینم همواره فقط یک المنت رو برات نشون میده و مشکلت همینجاست ک از result هیچ جای پروژت استفاده نکردی.
فقط اومدی php اینکلود کردی.
پیشنهاد میکنم دوره جاوا اسکریپت و nude.js رو ببینی.
اینفورمنت کار هم کلا غلطه.
@masterspyware
وقتت بخیر مجید جان!
متشکرم که من رو با دیزاین پترن repository آشنا کردی، دیزاین پترن repository در لاراول را مطالعه کردم و بسیار مفید بود اما در رابطه با مشکلی که داشتم احساس نکردم که میتوه کمک کنه و یا شاید اصلا جواب سوالم همینه ، اگر بشه نکته کلیدی که در نهایت من چطور از blade یک داده ای رو بدون روتر به سمت سرور برسونم و اون نتیجه رو برگردونه و در چیزی مثل incloude قرار بده تا مودال مورد نظر فراخوانی بشه ( یا هر راه دیگری )
کاری که میخوام انجام بدم همینه ، که blade فایل منیجر رو بعد از کلیک روی دکمه های آپلود در blade های مختلف به صورت مودال اجرا کنم.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟