الإطار زند:كيف يمكنني إزالة الديكور على زند شكل مخفي عنصر ؟

StackOverflow https://stackoverflow.com/questions/481871

سؤال

أحاول إزالة الافتراضي ديكور على شكل خفي عنصر.بشكل افتراضي ، يتم إخفاء عنصر يتم عرض مثل هذا:

<dt>Hidden Element Label (if I had set one)</dt>
<dd><input type="hidden" name="foobar" value="1" id="foobar"></dd>

أنا لا أريد إخفاء عنصر تأخذ مساحة على الصفحة الخاصة بي.أريد إزالة كل الافتراضي الديكور لذلك أنا تركت مع الإدخال الوسم.

<input type="hidden" name="foobar" value="1" id="foobar">

كيف يمكنني تحقيق ذلك ؟

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

المحلول

لحقل مخفي تحتاج فقط مصمم واحد - ViewHelper:

$field = new Zend_Form_Element_Hidden('id');
$field->setDecorators(array('ViewHelper'));

وهذا سيجعل فقط حقل الإدخال، دون تثنية-DD المجمع والتسمية.

نصائح أخرى

من زند عنصر الديكور الوثائق:

الافتراضي الديكور لا تحتاج إلى أن تكون تحميل

افتراضي افتراضي والديكور تحميل خلال تهيئة كائن.يمكنك تعطيل هذا عن طريق تمرير 'disableLoadDefaultDecorators' الخيار إلى المنشئ:

$element = new Zend_Form_Element('foo', 
    array('disableLoadDefaultDecorators' => true)
);

وأنا استخدم هذا

$element->removeDecorator('DtDdWrapper');

وللتخلص من العلامات دينارا دد حول عناصر محددة

و// على أساس فوق - وظيفة بسيطة لإضافة العنصر الخفي ل$ هذا النموذج

/**
 * Add Hidden Element
 * @param $field
 * @param value
 * @return nothing - adds hidden element
 * */
public function addHid($field, $value){     
    $hiddenIdField = new Zend_Form_Element_Hidden($field);
    $hiddenIdField->setValue($value)
          ->removeDecorator('label')
          ->removeDecorator('HtmlTag');     
    $this->addElement($hiddenIdField);
}

وعندما يكون لديك الكثير من المدخلات الخفية أفضل إجابة هو ما يلي:

$elements = $this->getElements();
foreach ($elements as $elem)
    if ($elem instanceof Zend_Form_Element_Hidden)
        $elem->removeDecorator('label')->removeDecorator('HtmlTag');

وكما ذكر في وظائف أخرى setDisableLoadDefaultDecorators(true) لا تعمل لو انهم تحميلها بالفعل ... ولكن clearDecorators() لا!

لم أستطع الحصول على disableLoadDefaultDecorators للعمل على حق تماما. وهنا حل خطرت لي.

$hiddenIdField = new Zend_Form_Element_Hidden('id');
$hiddenIdField->setValue($portalId)
              ->removeDecorator('label')
              ->removeDecorator('HtmlTag'); 

في HTML، يظهر حقل مخفي دون أية علامات إضافية حوله.

...
<dt><label for="password" class="required">Password</label></dt>
<dd><input type="password" name="password" id="password" value="" /></dd>
<input type="hidden" name="id" value="1" id="id" />
...

وهنا هو ما takeme2web من http://www.phpfreaks.com/ المنتديات / index.php؟ الموضوع = 225848.0 يشير

و$ yourhiddenzendformelement-> setDecorators (صفيف ( 'ViewHelper'))؛

وطريق واحد فقط "ViewHelper" الديكور سيولد العلامات غير صالحة إذا كنت لا تزال تستخدم المجمع <dl>. ويرد نهج آخر في <لأ href = "http://framework.zend.com/issues/browse/ZF-2718؟focusedCommentId=40837&page=com.atlassian.jira.plugin.system.issuetabpanels٪3acomment-tabpanel#action_40837" يختلط = "نوفولو"> ZF-2718. وهذا يضيف حقول مخفية إلى نموذج فرعي التي ملفوفة في <dd>.

حسنا, 2012 ومازال نفس المشكلة.إذا قمت بإزالة الديكور, html لن التحقق من صحة.إذا تركت لهم ، عناصر خفية تأخذ مساحة.في كل من بلدي المشاريع لدي CSS المساعد .مخفي, لذلك أنا فقط تطبيقه على <dd> و ضبطه التسمية:

$element = new Zend_Form_Element_Hidden('foo', array('value' => 'bar'));
$element->removeDecorator('Label');
$element->getDecorator('HtmlTag')->setOption('class', 'hidden');

صالحة html(5), لطيفة تبحث الأشكال.هذا يمكن أن تذهب أيضا إلى العرف الديكور على الحقول المخفية.

تحرير

هذا هو كيف أضع في بلدي شكل عنصر:

class Exanto_Form_Element_Hidden extends Zend_Form_Element_Hidden
{
    public function render(Zend_View_Interface $view = null)
    {
        $this->removeDecorator('Label');
        $this->getDecorator('HtmlTag')->setOption('class', 'hidden');
        return parent::render($view);
    }
}

استخدم هذا:

    foreach ($this->getElements() as $element) {

        $decorator = $element->getDecorator('label');
        if (!$decorator) {
            continue;
        }
        $decorator->removeOption('tag');
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top