]> git.andy128k.dev Git - ipf.git/commitdiff
rework rendering on inline tables
authorAndrey Kutejko <andy128k@gmail.com>
Sun, 11 Aug 2013 20:25:04 +0000 (23:25 +0300)
committerAndrey Kutejko <andy128k@gmail.com>
Sun, 11 Aug 2013 20:25:04 +0000 (23:25 +0300)
ipf/admin/modelinline.php
ipf/admin/templates/admin/change.html

index f49d666465455822b8a71f66fdb13d2a0fba479f..8e1b9fe6217f98482e871a8bdfc29b2b309ab9a3 100644 (file)
@@ -34,6 +34,32 @@ abstract class IPF_Admin_ModelInline
         return get_class($this->model);
     }
 
+    public function listColumns()
+    {
+        if (!$this->formset || !count($this->formset))
+            return array();
+
+        $header = array();
+        foreach ($this->formset[0]->fields as $fieldname => $field) {
+            $header[] = array(
+                'fieldname' => $fieldname,
+                'label'     => $field->label,
+                'is_hidden' => $field->widget->is_hidden,
+                'is_del'    => $field->label == 'Del',
+                'has_display_method' => method_exists($this, 'column_'.$fieldname),
+            );
+        }
+        return $header;
+    }
+
+    public function displayField($fieldname, $obj)
+    {
+        $method = 'column_'.$fieldname;
+        if (!method_exists($this, $method))
+            throw new IPF_Exception('No method '.$method.' defined.');
+        return $this->$method($obj);
+    }
+
     function isValid()
     {
         foreach ($this->formset as &$form) {
@@ -84,8 +110,6 @@ abstract class IPF_Admin_ModelInline
         if ($o)
             $form_extra['exclude'][] = $o;
 
-        $first = true;
-
         if ($this->parentModel->exists()) {
             $query = IPF_ORM_Query::create()
                 ->from(get_class($this->model))
@@ -119,12 +143,6 @@ abstract class IPF_Admin_ModelInline
                 ), $form->fields);
 
                 $form->isAdd = false;
-                if ($first) {
-                    $form->isFirst = true;
-                    $first = false;
-                } else {
-                    $form->isFirst = false;
-                }
                 $this->formset[] = $form;
             }
         }
@@ -136,12 +154,6 @@ abstract class IPF_Admin_ModelInline
             $form->prefix = 'add_'.get_class($this->model).'_'.$i.'_';
             $form->data = $data;
             $form->isAdd = true;
-            if ($first) {
-                $form->isFirst = true;
-                $first = false;
-            } else {
-                $form->isFirst = false;
-            }
             $this->formset[] = $form;
         }
     }
index 4fe5de546610e0caa69e90bd6ceb3d0653a94f26..2984d46dec8f31b6bbbd2d63aa40bbe7d421565b 100644 (file)
                     <fieldset class="module">
                     <h2>{$inline->getLegend()}</h2>
                     <table{if $inline->_orderable()} class="orderable-inlne" data-url="{url 'IPF_Admin_Views_ListItems', array($inline->getApplication()->getSlug(), strtolower($inline->getModelName()))}"{/if}>
-                        {foreach $inline.formset as $formset}
-                        {if $formset.isFirst}
                         <thead>
                         <tr class="nodrop">
-                            {foreach $formset.fields as $fieldname=>$field}
-                            <th{if $formset.field($fieldname).label=='Del'} style="width:20px;"{elseif $field.widget.is_hidden} style="display:none;"{/if}>{if !$field.widget.is_hidden}{$formset.field($fieldname).label}{/if}</th>
+                            {foreach $inline->listColumns() as $column}
+                            <th{if $column['is_del']} style="width:20px;"{elseif $column['is_hidden']} style="display:none;"{/if}>{$column['label']}</th>
                             {/foreach}
                         </tr>
                         </thead>
                         <tbody>
-                        {/if}
-                        <tr{if !$formset.isAdd} data-id="{$formset.model.pk()}"{else} class="nodrag nodrop"{/if}>
-                            {foreach $formset.fields as $fieldname=>$field}
-                            <td{if $field.widget.is_hidden} style="display:none;"{/if}>{$formset.field($fieldname).fieldErrors()}{$formset.field($fieldname)|safe}</td>
+                        {foreach $inline.formset as $form}
+                        <tr{if !$form.isAdd} data-id="{$form.model.pk()}"{else} class="nodrag nodrop"{/if}>
+                            {foreach $inline->listColumns() as $column}
+                            <td{if $column['is_hidden']} style="display:none;"{/if}>
+                                {assign $field = $form.field($column['fieldname'])}
+                                {if $column['has_display_method']}
+                                    {$inline->displayField($column['fieldname'], $form->model) |safe}
+                                {else}
+                                    {$field.fieldErrors()}
+                                    {$field |safe}
+                                {/if}
+                            </td>
                             {/foreach}
                         </tr>
                         {/foreach}