سؤال

أحاول إضافة بعض سمات CSS إلى الملصقات في sfform المخصصة ولكن لا يمكنني تحقيق ذلك.

في صفي المخصص myForm extends sfForm, ، أقوم بإنشاء جميع حقول النص ديناميكيًا:

public function configure()
{
    $widgetFixtures = array();
    foreach ($fixtures as $fixture) {  
     $widgetFixtures[$fixture->getId()] = new sfWidgetFormInputText(  
            array('label' => $fixture->getTeamNameDom()),  
            // I would like to add something like: array('class' => $fixture->getCSS()),
            array('value' => $fixture->getScore1(), 'readonly' => 'readonly')
            );
    }
    $this->setWidgets($widgetFixtures);
}

حاولت تنسيق العرض setFormFormatterName ولكن من دون نجاح.

ملاحظة: لا يمكنني استخدام renderLabel($value, $attributes = array()) في القالب لأنني أحصل على فئة CSS من DB (كما قد تكون قد رأيت ، يجب أن أستخدم: $ Fixture-> getCSS ()).

هل يمكن لأحد أن يلقي نوري؟

شكرا جزيلا.

هل كانت مفيدة؟

المحلول

إليكم كيف قمت بحلها.
أخذت كلا الاقتراحين من جونوارد وريتشساج ووضعهما معًا:
"يجب التعامل مع هذا النوع من الأشياء في العرض/العمل."
"الوصول إلى الخيارات/السمات التي تم تمريرها إلى عنصر واجهة المستخدم نفسها."

أولاً ، أقوم بإضافة فئة CSS إلى الإدخال نفسه (حتى لو لم أستخدمها).

في صفي المخصص myForm extends sfForm,

foreach ($fixtures as $fixture) {    
     $widgetFixtures[$fixture->getId()] = new sfWidgetFormInputText(  
         array('label' => $fixture->getTeamNameDom()),  
         array('value' => $fixture->getScore1(), 
               'readonly' => 'readonly',  
               'class' => $fixture->getCSS())  
         );  
}  

ثم ، في القالب ، بدلاً من الاستخدام echo $form;, ، أضيف فئة CSS إلى الملصق كما هو موضح أدناه:

foreach ($form as $widgetId => $widget) {  
    ...
    $labelClass = $widget->getWidget()->getAttribute('class');  
    echo '<td>'.$widget->renderLabel(null, array('class' => $labelClass)).'</td>';  
    ...
}

ربما ليست أفضل طريقة لحل هذه المشكلة ولكنها تعمل.

شكرا جميعا لردودكم!

نصائح أخرى

ما تحاول القيام به يبدو ممكنًا ، لكن بناء جملة الرمادي يبدو بعيدًا. جرب هذا:

    $widgetFixtures[$fixture->getId()] = new sfWidgetFormInputText(  
        array('label' => $fixture->getTeamNameDom()),  
        array('class' => $fixture->getCSS()),
        array('value' => $fixture->getScore1(), 'readonly' => 'readonly')
    );

... أو تحقق من قسم "فئة قاعدة SFWIDGETForm" هنا: http://www.symfony-project.org/forms/1_4/en/a-widgets

يجب تمرير سمة الفصل كصفيف في المعلمة الثانية لجميع مصادر النماذج.

$this->setWidget('foo', new sfWidgetFormInputText(array(),array('class','fooclass'));

يمكنك محاولة تجاوز فئة القطعة إذا كنت ترغب في إضافة CSS إلى الملصقات - وتحديداً الطرق التي تقدم الملصق. يمكنك بعد ذلك فعل شيء مثل

$foo = new myWidgetFormInputText(array("myCSSClass" => $fixture->getCSS()));

ثم تجاوزك renderLabel() طريقة أو ما شابه في عنصر واجهة المستخدم. ستتمكن عنصر القطعة من الوصول إلى الخيارات التي تنقلها - في المثال أعلاه myCSSClass هو مفتاح الخيار. يمكنك بعد ذلك تطبيق قيمة الفئة هذه على ملصق القطعة.

إنه أسهل بكثير من ذلك. فقط قم بتطبيق CSS على الملصق للعلامة ...

label[for=payment_cardNumber]
{
    margin-top: 20px;
    color: red;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top