איסוף קלט מאסיבי

לפעמים אנו צריכים לאסוף את הקלט של המשתמש בצורה מאסיבית. זאת אומרת, המשתמש יכול להזין מידע עבור מספר רב של מודלים ולשלוח אותם בבת אחת. אנו קוראים לזה קלט מאסיבי (טבלאי) מאחר ושדות הקלט מוצגים בטבלת HTML בדרך כלל.

בכדי לעבוד עם נתונים טבלאיים, אנו קודם צריכים ליצור או לאכלס מערך אובייקטים של מודלים, תלוי במידה ואנו רוצים להזין תוכן חדש או לעדכן תוכן קיים. לאחר מכן אנו שולפים את הקלט של המשתמש מהמשתנה POST_$ ומגדירים אותו לכל מודל. הבדל קטן מקלט המתקבל ממודל אחד הוא שאנו שולפים את המידע על ידי שימוש ב

$_POST['ModelClass'][$i]

במקום ב $_POST['ModelClass']

public function actionBatchUpdate()
{
    // שליפת מידע בצורה מאסיבית
    // בנחה שכל ערך הוא מודל של המחלקה `Item`
    $items=$thisgetItemsToUpdate();
    if(isset($_POST['Item']))
    {
        $valid=true;
        foreach($items as $i$item)
        {
            if(isset($_POST['Item'][$i]))
                $itemattributes=$_POST['Item'][$i];
            $valid=$valid && $itemvalidate();
        }
        if($valid)  // כל הערכים תקינים
            // פעולות לביצוע
    }
    // הצג את הטופס
    $thisrender('batchUpdate',array('items'$items));
}

לאחר שיש לנו את הפעולה כתובה, אנו צריכים לעבוד על קובץ התצוגה batchUpdate המציג את השדות בטבלת HTML.

«div class="form"»
«?php echo CHtml::beginForm(); ?»
«table»
«tr»«th»Name«/th»«th»Price«/th»«th»Count«/th»«th»Description«/th»«/tr»
«?php foreach($items as $i$item): ?»
«tr»
«td»«?php echo CHtml::activeTextField($item,"[$i]name"); ?»«/td»
«td»«?php echo CHtml::activeTextField($item,"[$i]price"); ?»«/td»
«td»«?php echo CHtml::activeTextField($item,"[$i]count"); ?»«/td»
«td»«?php echo CHtml::activeTextArea($item,"[$i]description"); ?»«/td»
«/tr»
«?php endforeach; ?»
«/table»
 
«?php echo CHtml::submitButton('Save'); ?»
«?php echo CHtml::endForm(); ?»
«/div»«!-- form --»

יש לשים לב למעלה שאנו משתמשים ב

"[$i]name"

במקום ב "name" כפרמטר שני בעת הקריאה ל CHtml::activeTextField.

במידה ויש שגיאה כלשהי באימות הנתונים, שדות הקלט המכילים את השגיאות יקבלו מחלקת CSS אוטומטית בכדי להציג שישנה שגיאה בשדה, בידיוק כמו בשימוש עם מודל אחד כפי שהוסבר קודם לכן.

«div class="revision"»$Id: form.table.txt 2161 2009-12-26 20:56:05Z qiang.xue $«/div»

Be the first person to leave a comment

Please to leave your comment.