За последние 24 часа нас посетили 59123 программиста и 1811 роботов. Сейчас ищут 983 программиста ...

(Yii) множественные чекбоксы?

Тема в разделе "Прочие вопросы по PHP", создана пользователем des1roer, 24 фев 2015.

  1. des1roer

    des1roer Новичок

    С нами с:
    10 апр 2014
    Сообщения:
    55
    Симпатии:
    0
    странно что нет вкладки php+framework. была бы очень востребованна


    есть такая задача - записать битовую маску в базу.
    то есть имеем
    ротор, статор, мотор
    + - +
    запишется
    101
    при
    ротор, статор, мотор
    + + -
    запишется
    110

    думаю идея ясна.
    как это реализовать? дощел пока до такого

    Код (Text):
    1. <?php echo $form->checkBox($model,'estado',  array('checked'=>'checked')); ?>


    но как это увязать с формой ввода?

    Код (Text):
    1. <div class="row">
    2.         <?php echo $form->labelEx($model,'m_complect'); ?>
    3.         <?php echo $form->textField($model,'m_complect',array('size'=>11,'maxlength'=>11)); ?>
    4.         <?php echo $form->error($model,'m_complect'); ?>
    5.     </div>
     
  2. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    ну возможно потому что у каждого фреймворка есть свой форум и поддержка где люди знают продукт о котором ведут речь, особенно учитывая что фреймворки постоянно развиваются.
    а здесь вам придется ожидать того кто хорошо знаком с yii.
     
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ну такой псевдо код

    Код (PHP):
    1. <?php
    2.  
    3. class MyForm extends CFormModel
    4. {
    5.     public $id;
    6.     public $title;
    7.     public $mask;
    8.     public $checkbox1;
    9.     public $checkbox2;
    10.     public $checkbox3;
    11.  
    12.     public function rules()
    13.     {
    14.         return array(
    15.             array('title, checkbox1, checkbox2, checkbox3', 'required'),
    16.         );
    17.     }
    18.  
    19.     public function update()
    20.     {
    21.         $mask = $this->checkbox1.$this->checkbox2.$this->checkbox3;
    22.         $mydata = Mydata::model()->updateByPk(
    23.             $this->id,
    24.             array('id'=>$this->id, 'title'=>$this->title, 'mask'=>$mask),
    25.             'id=:id',
    26.             array(':id'=>$this->id),
    27.             true
    28.         );
    29.         return $mydata;
    30.     }
    31. } 
     
  4. des1roer

    des1roer Новичок

    С нами с:
    10 апр 2014
    Сообщения:
    55
    Симпатии:
    0
    ба тот же yiiframework.ru умер\умирает. там активность полтора землекопа. а здесь сразу видна работа мысли. трабла в том что полей не 3, а 10 и может их число увеличиваться. думаю в сторону checkboxlist. в listdata вгружать данные из связанной таблицы. также из данныз базы 101010 указывать какие чекбоксы чекнуты. но вот как вбить в базу данные? думаю про hiddenText .= model->m_sector.
    поправьте как правильней и проще сделать
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Делай в классе public $checkbox_list; там будет маска 0001 и тд, в отображении через foreach делай чекбоксы с именами mycheck[0], mycheck[1], mycheck[3] и тд (кол-во битов в маске), и этот массив проверяй своей функцией валидации и собирай опять в строку и пиши в базу.
     
  6. des1roer

    des1roer Новичок

    С нами с:
    10 апр 2014
    Сообщения:
    55
    Симпатии:
    0
    в теории оно так и есть. можно более-менее рабочий код который мона допиливать?
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    А ты умеешь связывать через контролер, модель и отображение формы?
    Если да, то просто в шаблон передай маску и её с помощью array_chunk разбей по одному символу в массив
    и formeach <?php echo CHtml::activeCheckBox($model,'mybox[$key]'); ?>
     
  8. des1roer

    des1roer Новичок

    С нами с:
    10 апр 2014
    Сообщения:
    55
    Симпатии:
    0
    не очень понятно о чем ты. тем более activeCheckBox вряд ли сканает. вот в listdata вгружать данные из связанной таблицы. но как обратно загружать?
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Обратно делать update по уникальный ключу записи.

    Я о том что у тебя есть битовая маска переменной длины, ты её получаешь в переменную, во отображении превращаешь в чекбоксы с одним именем для организации массива по ключам, результат сохранить обратно в базу
     
  10. des1roer

    des1roer Новичок

    С нами с:
    10 апр 2014
    Сообщения:
    55
    Симпатии:
    0
    а нужен ли activeCheckBox ? или лучше checkboxlist
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  12. des1roer

    des1roer Новичок

    С нами с:
    10 апр 2014
    Сообщения:
    55
    Симпатии:
    0
    [​IMG]
    все ж круто получается

    Код (Text):
    1. $type_list=CHtml::listData(Department::model()->findAll(),'F_ID','F_Name');
    2.        
    3.         (string) $buf_string =    $model->m_complect;
    4.         for ($i=0, $z=1;$i<strlen($buf_string); $i++, $z++)    
    5.         {
    6.             if ($buf_string[$i] == 1)
    7.             $arr_bit[] = $z;
    8.         }
    9.        
    10.         echo CHtml::checkBoxList('Motor[m_complect][]', $arr_bit, $type_list);
    как сейчас узнать состояние чекбокса? понятно что в afterValidate. но как?
     
  13. des1roer

    des1roer Новичок

    С нами с:
    10 апр 2014
    Сообщения:
    55
    Симпатии:
    0
  14. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ты же делаешь populate заполнение класса формы $model=new MyForm; $model->attributes=$_POST['MyForm'];
     
  15. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    как по мне, то странное решение.

    на чём-то экономия?
     
  16. des1roer

    des1roer Новичок

    С нами с:
    10 апр 2014
    Сообщения:
    55
    Симпатии:
    0
    да на спичках экономия. на месте в базе. писать не 1,3,4 а 1011
     
  17. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    такое используется, если мало памяти или канала передачи. например, во встроенных устройствах.

    но в вебе просто геморрой. сначала с формами, потом с поиском, потом с миграцией.

    короче, сделай просто несколько доп. полей :)