浏览代码

Add more semantic into the layout

Thomas Rabaix 13 年之前
父节点
当前提交
ce8d535b01

+ 13 - 0
DependencyInjection/SonataAdminExtension.php

@@ -66,6 +66,19 @@ class SonataAdminExtension extends Extension
         $pool->addMethodCall('__hack__', $config);
 
         $container->setAlias('sonata.admin.security.handler', $config['security_handler']);
+
+        /**
+         * This is a work in progress, so for now it is hardcoded
+         */
+        $classes = array(
+            'textarea' => 'sonata-medium',
+            'text'     => 'sonata-medium',
+            'choice'   => 'sonata-medium',
+            'datetime' => 'sonata-medium-date'
+        );
+
+        $container->getDefinition('sonata.admin.form.extension.field')
+            ->replaceArgument(0, $classes);
     }
 
     /**

+ 35 - 0
Form/Extension/Field/Type/FormTypeFieldExtension.php

@@ -21,6 +21,16 @@ use Sonata\AdminBundle\Admin\FieldDescriptionInterface;
 
 class FormTypeFieldExtension extends AbstractTypeExtension
 {
+    protected $defaultClasses = array();
+
+    /**
+     * @param array $defaultClasses
+     */
+    public function __construct(array $defaultClasses = array())
+    {
+        $this->defaultClasses = $defaultClasses;
+    }
+
     /**
      * @param \Symfony\Component\Form\FormBuilder $builder
      * @param array $options
@@ -47,6 +57,7 @@ class FormTypeFieldExtension extends AbstractTypeExtension
             $sonataAdmin['name']              = $fieldDescription->getName();
             $sonataAdmin['edit']              = $fieldDescription->getOption('edit', 'standard');
             $sonataAdmin['inline']            = $fieldDescription->getOption('inline', 'natural');
+            $sonataAdmin['class']             = $this->getClass($builder);
 
             $builder->setAttribute('sonata_admin_enabled', true);
         }
@@ -54,6 +65,21 @@ class FormTypeFieldExtension extends AbstractTypeExtension
         $builder->setAttribute('sonata_admin', $sonataAdmin);
     }
 
+    /**
+     * @param \Symfony\Component\Form\FormBuilder $formBuilder
+     * @return string
+     */
+    protected function getClass(FormBuilder $formBuilder)
+    {
+        foreach ($formBuilder->getTypes() as $type) {
+            if (isset($this->defaultClasses[$type->getName()])) {
+                return $this->defaultClasses[$type->getName()];
+            }
+        }
+
+        return '';
+    }
+
     /**
      * @param \Symfony\Component\Form\FormView $view
      * @param \Symfony\Component\Form\FormInterface $form
@@ -80,6 +106,15 @@ class FormTypeFieldExtension extends AbstractTypeExtension
             $view->set('types', $types);
             $view->set('sonata_admin_enabled', true);
             $view->set('sonata_admin', $sonataAdmin);
+
+            $attr = $view->get('attr', array());
+
+            if (!isset($attr['class'])) {
+                $attr['class'] = $sonataAdmin['class'];
+            }
+
+            $view->set('attr', $attr);
+
         } else {
             $view->set('sonata_admin_enabled', false);
         }

+ 1 - 0
Resources/config/form_types.xml

@@ -36,6 +36,7 @@
         <!-- Form Extension -->
         <service id="sonata.admin.form.extension.field" class="Sonata\AdminBundle\Form\Extension\Field\Type\FormTypeFieldExtension">
             <tag name="form.type_extension" alias="field" />
+            <argument />
         </service>
 
         <!-- Form Filter Type -->

+ 16 - 1
Resources/public/css/layout.css

@@ -19,7 +19,6 @@ div.sonata-ba-field-inline-table textarea.title {
     height: 50px;
 }
 
-
 fieldset.filter_legend {
     font-weight: bold;
     border: 1px solid #E4E4E4;
@@ -111,4 +110,20 @@ em.sonata-ba-field-help {
 
 fieldset legend {
     padding-left: 0px;
+}
+
+select.sonata-medium, textarea.sonata-medium, input.sonata-medium {
+    width: 400px;
+}
+
+textarea.sonata-medium {
+    height: 125px;
+}
+
+div.sonata-medium-date select {
+    width: 75px;
+}
+
+div.sonata-medium-date div {
+    float: left;
 }

+ 50 - 3
Resources/views/Form/form_admin_fields.html.twig

@@ -21,16 +21,63 @@ file that was distributed with this source code.
         <label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>
             {{ widget|raw }}
             <span>
-                {{ label|trans({}, sonata_admin.admin.translationDomain) }}
+                {% if not sonata_admin.admin%}
+                    {{- label -}}
+                {% else %}
+                    {{- label|trans({}, sonata_admin.admin.translationDomain) -}}
+                {% endif%}
+                {{ required ? '*' : '' }}
             </span>
-            {{ required ? '*' : '' }}
         </label>
     {% else %}
-        <label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>{{ label|trans({}, sonata_admin.admin.translationDomain) }} {{ required ? '*' : '' }} </label>
+        <label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>
+            {% if not sonata_admin.admin%}
+                {{ label }}
+            {% else %}
+                {{ label|trans({}, sonata_admin.admin.translationDomain) }}
+            {% endif%}
+            {{ required ? '*' : '' }}
+        </label>
     {% endif %}
 {% endspaceless %}
 {% endblock %}
 
+{% block widget_container_attributes_choice_widget %}
+    {% spaceless %}
+        id="{{ id }}"
+        {% for attrname,attrvalue in attr %}{{attrname}}="{% if attrname == 'class' %}inputs-list {% endif%}{{attrvalue}}" {% endfor %}
+    {% endspaceless %}
+{% endblock %}
+
+{% block choice_widget %}
+{% spaceless %}
+    {% if expanded %}
+        <ul {{ block('widget_container_attributes_choice_widget') }}>
+        {% for child in form %}
+            <li>
+                {{ form_label(child, null, { 'in_list_checkbox' : true, 'widget' : form_widget(child) } ) }}
+            </li>
+        {% endfor %}
+        </ul>
+    {% else %}
+    <select {{ block('widget_attributes') }}{% if multiple %} multiple="multiple"{% endif %}>
+        {% if empty_value is not none %}
+            <option value="">{{ empty_value|trans }}</option>
+        {% endif %}
+        {% if preferred_choices|length > 0 %}
+            {% set options = preferred_choices %}
+            {{ block('widget_choice_options') }}
+            {% if choices|length > 0 %}
+                <option disabled="disabled">{{ separator }}</option>
+            {% endif %}
+        {% endif %}
+        {% set options = choices %}
+        {{ block('widget_choice_options') }}
+    </select>
+    {% endif %}
+{% endspaceless %}
+{% endblock choice_widget %}
+
 {% block field_row %}
     {% if sonata_admin is not defined or not sonata_admin_enabled or not sonata_admin.field_description %}
         {{ parent() }}