z
4 روز پیش توسط z مطرح شد
3 پاسخ

انتخاب و گرفتن اطلاعات چند چک باکس در livewir

سلام دوستان
من در رابطه با سوالم خیلی سرچ کردم ولی به جوابی نرسیدم . یه صفحه فروشگاهی دارم که با 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 و داخل کوئری استفاده کنم ، امکانش نیست ! ارایه فقط آخرین مقدار انتخابی داره
کسی راه حلی میدونه کمکم کنه ؟


ثبت پرسش جدید
محمدجوکار
تخصص : دانشجوی برنامه‌نویسی
@mjokarr 4 روز پیش مطرح شد
0

سلام دوست عزیز، یلدای قشنگتونو پیشاپیش تبریک میگم‌.
اگه منظورت اینه که وقتی یه چک باکس رو انتخاب میکنی، مقدار جدید روی مقدار قبل ری‌رایت میشه، بدونِ در نظر گرفتن اینکه روش‌های بهتری هن برای پیاده سازی چک‌باکس با لایووایر هست، بیا دوتا نکته رو بررسی کنیم با هم:
اول بیا توی این شرط ک برات پایین میزارم، جلوی 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. حالا اونطرف روش راحت شرط رو اعمال میکنی‌ ...

ب هرحال هر مشکلی بود حتما منشن کن ک ببینم‌.
موفق باشی


z
تخصص : برنامه نویسی
@zr.1991 4 روز پیش آپدیت شد
0

@mjokarr
سلام ممنونم از این که وقت گذاشتید
ببینید برعکسش میخواستم
یه ارایه داشته باشم شامل مقدار چندتا از چک باکس ها
مثلا میخوام وقتی سه تا چک باکس انتخاب کرده باشم
بتونم با مقادیرش برای کوئری که دارم شرط بذارم

کدی که گذاشتم فقط مقدار چند چک باکس داخل ارایه قرار میده . در ادامه وقتی از مقادیر میخوام برای شرط استفاده کنم میاد آخرین انتخابم استفاده میکنه

اگر راه دیگه هم هست ممنون میشم کمکم کنید فقط میخواستم با live wire باشه حتما


محمدجوکار
تخصص : دانشجوی برنامه‌نویسی
@mjokarr 4 روز پیش آپدیت شد
0

ببین! چک باکس تو یه سری ایدی میده درسته؟؟ که تو میخوای بعدا روی اون آیدی‌هایی که از چک باکس گرفتی کوئری بزنی. قبول؟؟
خب بلیدت در صورتی که آیدی ها رو دقیق میبره توی متد کلیکت، درس کار میکنه پس.
بیا متد کلیکت رو ب این مدل تغییر بده اول ببین آیدی ها ب درستی ذخیره میشن؟

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 یا هر مدل دیگه‌ای ...
بازم اگه اشتبا متوجه شدم یا نیاز به توضیحه، بگو.
کوئریتم دیگ توی رندر میتونی بزنی


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام