خانه > PHP, Yii Framework > ایجاد لیست های وابسته به هم در Yii

ایجاد لیست های وابسته به هم در Yii

در فریمورک Yii یکی از فیلدهایی که در فرم ها استفاده می شود، فیلد DropDownList هست که در خروجی تگ های HTML کد مربوط به قسمت <select> را به همراه <option> های مربوط به آن را تولید می کند.

حتما برای شما هم پیش آمده که بخواهید هنگام استفاده از این نوع لیست ها، با تغییر مقدار آن، اطلاعاتی در قسمتی از صفحه بدون اینکه کل صفحه به سرور ارسال شود، به صورت AJAX، تغییر کند یا به روز شوند. مثال معروف برای این مطلب این است که مثلا شما یک لیست از نام استان ها دارید، و می خواهید هنگامی که کاربر استان مورد نظر خودش را انتخاب می کند در لیست بعدی آن شهرهای مربوط به آن استان فهرست شوند تا وی بتواند شهر خود را از داخل آن انتخاب کند.

یا کاربر با انتخاب یک گزینه در لیست، در کادر مقابل آن یک سری اطلاعات تغییر کرده و به وی نمایش داده شوند.

اجازه بدید تا این نوشته را با مثال انتخاب استان، تغییر لیست شهرها بیشتر و کاربردی توضیح بدیم.

همانطور که در بالا هم بیان شد، یک لیست کشویی داریم حاوی نام استان ها به همراه ID آن ها که با انتخاب یک گزینه آن از طرف کاربر، در لیست بعدی شهرهای مربوط به آن استان به صورت Ajax فهرست می شوند.کد مربوط به لیست نام استان ها به این صورت نوشته می شود:

و در پایین آن هم لیست مربوط به شهرها وجود دارد که البته خالی است:

حالا برای پر کردن لیست شهرها بر اساس ID استان انتخاب شده، زمانی که لیست استان ها تغییر کند، ID استان انتخاب شده توسط AJAX به کنترلر مربوطه آن ارسال شده و نام شهرهای آن استان توسط آن کنترلر از دیتابیس گرفته شده و به از طریق AJAX به این صفحه باز گردانده شده و در لیست مربطو به شهرها قرار داده می شوند.

کد مربوط به اکشن کنترلر مربوطه:

خوب همه چیز آماده است. فقط بعد از اجرا آن ممکن است با خطای ۴۰۴ مواجه شوید و آن هم به دلیل کنترل های امنیتی Yii برای کنترلرهایش می باشد. برای برطرف شدن این مشکل، کافی است در کنترلر مربوطه، در متد accessRules نام اکشن بالا را به رکورد مربوطه همانند زیر اضافه کنید تا دسترسی لازم به آن اکشن اعمال شود:

خوب این تمام کاری بود که باید انجام می شد. دقت داشته باشید برای انتخاب فیلدی که قراره بسته به تغییر اطلاعات لیستی به صورت AJAX تغییر کند، همان طور که در مثال بالا هم مشاهده کردید، باید id آن در html به عنوان مقدار به کلید update در آرایه فیلد DropDownList داده شود.

دسته هاPHP, Yii Framework برچسب ها:, , , , ,
  1. masato
    ۳۰ مهر ۱۳۹۲ در ۱۳:۰۳ | #1

    عالی بود
    مرسی

  2. maryam
    ۱۰ آذر ۱۳۹۲ در ۱۲:۳۳ | #3

    من این sample رو انجام دادم ولی بعد تغییر dropdown هیچ اتفاقی نمی یوفته نباید چیزی رو تو Widget فرمم چیزی رو تنظیم کنم ؟
    در قسمت ‘url’ => Yii::app()->createUrl(‘currentController/dynamiccities’) منظور از
    currentController چیه اسم currentController رو باید بنویسم یا همین currentController رو بنویسم ؟
    فکر می کنم اصلا توی اکشن dynamiccities نمی ره چون محتویاتشو پاک کردم و توش یه echo و exit گذاشتم اگه اکشن صدا زده بشه باید این echo رو نشون بده

  3. ۱۰ آذر ۱۳۹۲ در ۲۱:۱۴ | #4

    @maryam
    منظور از currentController کنترلر مزبوطه شما است که در آن قرار است dynamiccities نوشته شود. اطلاعات از طریق POST برای اکشن dynamiccities در کنترلر currentController ارسال می شوند. پیاده سازی اکشن dynamiccities را می توانید در بالا ببینید. کاری به ویدجت فرم نداشته باشید.

  1. بدون بازتاب


6 + = 15