سلام دوستان
من در رابطه با سوالم خیلی سرچ کردم ولی به جوابی نرسیدم . یه صفحه فروشگاهی دارم که با livewire نوشتم
چندتا باکس فیلتر گذاشتم . کدی که نوشتم به تنهایی با انتخاب یک چک باکس محصولات فیلتر میکنه
اما میخواستم زمانی که از دوتا بیشتر چک باکس انتخاب میکنم بر اساسشون فیلتر انجام بده
@foreach($value->getChild as $key2=>$value2)
<input type="checkbox"
wire:click="filter_click('{{$value->id.'_'.$value2->id}}')"
value="{{$value->id.'_'.$value2->id}}" >
@endforeach
public function filter_click($id)
{
$this->f_id =$id;
}
public function render)(
if(array_search($this->f_id, $this->_all_filters))
{
unset($this->_all_filters[$this->f_id]);
}else
{
$this->_all_filters[$this->f_id] = $this->f_id;
}
این کد هایی که نوشتم . کد آخر برای اینکه بتونم به صورت آرایه _all_filters تمام مقادیر چک باکس ها دریافت کنم
وقتی _all_filters داخل php به صورت
{{print_r($_all_filters)}}
قرار میدم با هر بار انتخاب . تمامی چک باکس انتخاب شده نمایش میده . درست کار میکنه
اما در ادامه میخوام از _all_filters استفاده کنم بذارم حلقه foreach و داخل کوئری استفاده کنم ، امکانش نیست ! ارایه فقط آخرین مقدار انتخابی داره
کسی راه حلی میدونه کمکم کنه ؟
سلام دوست عزیز، یلدای قشنگتونو پیشاپیش تبریک میگم.
اگه منظورت اینه که وقتی یه چک باکس رو انتخاب میکنی، مقدار جدید روی مقدار قبل ریرایت میشه، بدونِ در نظر گرفتن اینکه روشهای بهتری هن برای پیاده سازی چکباکس با لایووایر هست، بیا دوتا نکته رو بررسی کنیم با هم:
اول بیا توی این شرط ک برات پایین میزارم، جلوی array_search بزن اگه false ==!، بعدا بیا توی ایف رو اجرا کن. یا پشت ارَی سروت یه نات بزار و محتویات ایف و الستو جابجا کن ببین حل نمیش؟؟
if(array_search($this->f_id, $this->_all_filters))
اگه نشد بیا استپ بعدی:
توی این لاین کد، احتمالا داری هی ریرایت میکنی:
$this->_all_filters[$this->f_id] = $this->f_id-
اگه ضرورتی نداره برات که حتما f_id هم کلید باشه هم ولیو، بیا اینطوری بنویسش ببین چی میش؟ دیس، آلفیلترز، جلوش یه [] خالی بزار. حالا مساوی است با f_id.
اگه نشد بازم، منشن کن حلش میکنیم.
و در نهایت، چون با موبایل جواب میدم، اصلا نشد تست کنم کدت رو یا حتی نشد بتونم صحیح با کیبوردش کد بنویسم. دیگ معذرت از شما..
روش بهینهتر هم اینه که توی وایر کلیکت، یا وایر دیسپچت، یه فیلد ب نام this.checked رو با یه اسمی، ارسال میکنی سمت متدت. این this.checked حامل مقدار true & false هستش. اگه برای اولین بار روی چک باکس کلیک کنی true برمیگردونه و اگه تیک داشته باشه و کلیک کنی برای برداشتنش، false. حالا اونطرف روش راحت شرط رو اعمال میکنی ...
ب هرحال هر مشکلی بود حتما منشن کن ک ببینم.
موفق باشی
@mjokarr
سلام ممنونم از این که وقت گذاشتید
ببینید برعکسش میخواستم
یه ارایه داشته باشم شامل مقدار چندتا از چک باکس ها
مثلا میخوام وقتی سه تا چک باکس انتخاب کرده باشم
بتونم با مقادیرش برای کوئری که دارم شرط بذارم
کدی که گذاشتم فقط مقدار چند چک باکس داخل ارایه قرار میده . در ادامه وقتی از مقادیر میخوام برای شرط استفاده کنم میاد آخرین انتخابم استفاده میکنه
اگر راه دیگه هم هست ممنون میشم کمکم کنید فقط میخواستم با live wire باشه حتما
ببین! چک باکس تو یه سری ایدی میده درسته؟؟ که تو میخوای بعدا روی اون آیدیهایی که از چک باکس گرفتی کوئری بزنی. قبول؟؟
خب بلیدت در صورتی که آیدی ها رو دقیق میبره توی متد کلیکت، درس کار میکنه پس.
بیا متد کلیکت رو ب این مدل تغییر بده اول ببین آیدی ها ب درستی ذخیره میشن؟
public function filter_click($id)
{
if (in_array($id, $this->_all_filters)) {
$this->_all_filters = array_diff($this->_all_filters, [$id]);
} else {
$this->_all_filters[] = $id;
}
}
اگه ب درستی آیدی ها ذخیره بشن، خب دیگ تو یه لیست از آیدیهایی داری ک میتونی کوئری بزنی روشون. دیگ ب هر روشی ک دلت میخاد. whereIn یا هر مدل دیگهای ...
بازم اگه اشتبا متوجه شدم یا نیاز به توضیحه، بگو.
کوئریتم دیگ توی رندر میتونی بزنی
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟