Создание новых / редактировать формы в CodeIgniter с наименьшим количеством ввода - PullRequest
1 голос
/ 21 октября 2011

Невероятно распространено создание формы «Новая» или «Редактировать» в CodeIgniter (или любой другой платформе в этом отношении).

Не прибегая к автоматизированным лесам, что является самым быстрым / простым способом создания этих форм в CodeIgniter с наименьшим количеством ввода / суеты / и т. Д.

Идеальное решение должно обрабатывать множество элементов, проверять себя перед отправкой, не должно очищать форму, если допущена ошибка, и все же быть читаемым разработчиком. Он не будет полагаться на сценарий «генератора».

Ответы [ 3 ]

1 голос
/ 22 октября 2011

Я написал набор кода, который в настоящее время находится в MY_Controller, который использует $ config, который вы пишете для проверки формы, для генерации формы.

По мере создания формы, добавления * к меткам и т. Д.

Я выкопаю и выложу в понедельник.

Я бы предпочел, чтобы это была библиотека, но мои знания о КИ все еще растут ...

ДОБАВЛЕНО MY_controller.php подробнее:

В моем файле MY_Controller.php есть следующее

function generate_form($config, $legend = 'Details', $wraptag = 'div', $buttontext = 'update')
{

    $fields = array();
    $files  = 0;

    if($config)
    {



        foreach($config as $c)
        {

            if(strpos($c['rules'],'required') === FALSE) {
                $label = $c['label'];               
            }
            else
            {
                $label = $c['label'].' <span class="required">*</span>';
            }               

            $data = array(
                'name'        => $c['field'],
                'id'          => $c['field'],
                'value'       => set_value($c['field'], $c['value']),
                'class'       => $c['field'],

            );

            $fields[] = '<'.$wraptag.'>'."\r\n";

            $func = 'form_'.$c['input_type'];

            switch ($c['input_type'])
            {

                case 'displayonly':

                    $fields[] = form_label($label, $c['field'])."\r\n";
                    $fields[] = '<input type="text" value="'.$c['value'].'" disabled="disabled"/>';

                    break;


                case 'dropdown':
                case 'multiselect':

                    $fields[] = form_label($label, $c['field'])."\r\n";
                    $fields[] = $func($c['field'], $c['options'], $c['value']);

                    break;

                case 'datepicker':

                    $fields[] = form_label($label, $c['field'])."\r\n";
                    $fields[] = $func($c['field'])."\r\n";

                    break;
                case 'timezone':

                    $fields[] = form_label($label, $c['field'])."\r\n";
                    $fields[] = timezone_menu($c['value'],$c['field'], $c['field']);
                    break;

                case 'upload':

                    $fields[] = form_label($label, $c['field'])."\r\n";
                    $fields[] = $func($data)."\r\n";
                    $files = 1;
                    break;

                default:

                    $fields[] = form_label($label, $c['field'])."\r\n";
                    $fields[] = $func($data)."\r\n";

                    break;


            }

            $fields[] = '</'.$wraptag.'>'."\r\n";


        }

        $fields[] = '<'.$wraptag.'>'."\r\n";
        $fields[] = form_submit('btnSubmit', 'Update');
        $fields[] = '</'.$wraptag.'>'."\r\n";


        $form_start[]   = validation_errors('<div class="error">', '</div><!--class="error"-->');
        if($files)
        {   
            $form_start[]   = form_open_multipart(uri_string());
        }
        else
        {
            $form_start[]   = form_open(uri_string());
        }

        $form_start[]   = '<fieldset>';
        $form_start[]   = '<legend>'.$legend.'</legend>';


        $form_end[] = '</fieldset>'."\r\n";
        $form_end[] = form_close();     

    }

    if($wraptag == 'li')
    {
        $fields_start   = '<ul>';
        $fields_end     = '</ul>';
    }
    else
    {
        $fields_start   = '';
        $fields_end     = '';
    }       
    return (implode('',$form_start).$fields_start.implode('',$fields).$fields_end.implode('',$form_end)); 

}

function create_validation_from_config($config)
{

    foreach($config as $c)
    {

        if($c['rules'] != '')
        {

            if($c['input_type'] == 'datepicker')
            {
                $validation[] = array(
                    'field' => $c['field'].'_day',
                    'label' => $c['label'],
                    'rules' => $c['rules'],         
                );
                $validation[] = array(
                    'field' => $c['field'].'_month',
                    'label' => $c['label'],
                    'rules' => $c['rules'],         
                );
                $validation[] = array(
                    'field' => $c['field'].'_year',
                    'label' => $c['label'],
                    'rules' => $c['rules'],         
                );
            }
            else
            {
                $validation[] = array(
                    'field' => $c['field'],
                    'label' => $c['label'],
                    'rules' => $c['rules'],         
                );
            }
        }

    }

    return $validation;

}
0 голосов
/ 22 октября 2011

Я использую CI с Smarty . Я создал add.tpl smarty-template и modify.tpl, который расширяет add.tpl. Мой контроллер имеет функцию modify и add, которая загружает modify.tpl и add.tpl. Все tpl s отображают таблицу: thead и tbody. modify.tpl отображает еще одну строку в thead: исходные данные. И modify.tpl отображает / устанавливает исходные значения в своих полях ввода.

У меня есть простая структура данных, которая описывает, что данные должны получать от пользователей, и tpl -файлы знают, как должны отображаться их поля ввода (например, поле ввода, выбор, флажок и т. Д.).

Если вы не хотите использовать plus Framework (Smarty), я думаю, что создать аналогичную вещь в PHP / CI несложно.

0 голосов
/ 22 октября 2011

NETTE Framework имеет автоматизированную систему автоматической проверки, которая дает обратную связь пользователю через javascript (на стороне клиента) и php (на стороне сервера) - Ссылка .

Возможно, вы могли бы написать что-то подобное в CI (с пониманием исходных файлов Nette) или вместо этого вы можете использовать инфраструктуру Nette ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...