رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
Dynamic select box With Ajax
#1
درود بر همه دوستان
من یک فرم با 2 لیست انتخابی دارم و میخوام آیتمهای لیست دوم بر اساس ایتم انتخابی لیست اول پر بشه مثلا اگر لیست اول کشور باشه لیست دوم شهر با انتخاب کشور ایران از لیست اول در لیست دوم فقط شهرهای ایران نمایش داده بشه کسی ایده یا راه حلی داره؟
من با جستجو یک راه پیدا کردم ولی همه جا درست کار نمیکنه فرض کنیم 3 جدول بصورت زیر داریم:
کد:
CREATE TABLE `categories` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(60) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `categories` (`id`, `name`)
VALUES
    (1,'books'),
    (2,'music'),
    (3,'electronics');

CREATE TABLE `posts` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(50) DEFAULT NULL,
  `subcategory_id` INT(10) UNSIGNED DEFAULT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `posts` (`id`, `title`, `subcategory_id`)
VALUES
    (1,'The title',1),
    (2,'A title once again',4),
    (3,'Title strikes back',7);

CREATE TABLE `subcategories` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `category_id` INT(10) UNSIGNED DEFAULT NULL,
  `name` VARCHAR(60) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `subcategories` (`id`, `category_id`, `name`)
VALUES
    (1,1,'fiction'),
    (2,1,'biography'),
    (3,1,'children'),
    (4,2,'classical'),
    (5,2,'rock'),
    (6,2,'jazz'),
    (7,3,'camera'),
    (8,3,'audio'),
    (9,3,'tv');
در کنترلر Sub Categury یک تابع آژاکسی بصورت زیر تعریف میکنیم
کد:
<?php
App::uses('AppController', 'Controller');

class SubcategoriesController extends AppController {

    public function getByCategory() {
        $category_id = $this->request->data['Post']['category_id'];

        $subcategories = $this->Subcategory->find('list', array(
            'conditions' => array('Subcategory.category_id' => $category_id),
            'recursive' => -1
            ));

        $this->set('subcategories',$subcategories);
        $this->layout = 'ajax';
    }
}
یه ویو برای نمایش گزینه ها در View/Subcategories/get_by_category.ctp تعریف می کنیم (می توانیم از المنت هم استفاده کنیم)
کد:
<?php foreach ($subcategories as $key => $value): ?>
<option value="<?php echo $key; ?>"><?php echo $value; ?></option>
<?php endforeach; ?>
در آخر در ویو add که برای post ایجاد کرده ایم عبارات زیر را اضافه می کنیم
کد:
<?php
$this->Js->get('#PostCategoryId')->event('change',
    $this->Js->request(array(
        'controller'=>'subcategories',
        'action'=>'getByCategory'
        ), array(
        'update'=>'#PostSubcategoryId',
        'async' => true,
        'method' => 'post',
        'dataExpression'=>true,
        'data'=> $this->Js->serializeForm(array(
            'isForm' => true,
            'inline' => true
            ))
        ))
    );
?>
این راه دقیقا جواب میده ولی تنها در ویو های که با Cack bake درست شده کسی غیر از این روش راه دیگه ای بلده ؟
پاسخ
سپاس شده توسط


پیام‌های این موضوع
Dynamic select box With Ajax - irandiablo - 2014/02/07, 05:12 AM
RE: Dynamic select box With Ajax - saleh - 2014/02/07, 07:37 AM
RE: Dynamic select box With Ajax - saleh - 2014/02/07, 05:06 PM

موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  عدم نمایش متغیرها در select box vioming 9 4,748 2015/02/12, 03:56 AM
آخرین ارسال: saleh
  ساختن خطای معتبرسازی برای FormHelper::select() cyletech 0 1,793 2013/05/01, 06:16 PM
آخرین ارسال: cyletech
  بهترین راه حل برای change select چیست؟ ghasem.fattahpour 15 14,099 2012/10/06, 02:14 PM
آخرین ارسال: fery
  ارسال فرم با ajax fery 12 13,768 2012/05/15, 12:50 AM
آخرین ارسال: cybercoder
Exclamation مشکل با آژاکس (Ajax) farmad 13 10,866 2012/03/17, 02:01 AM
آخرین ارسال: saleh

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان