الإطار زند:كيف يمكنني إزالة الديكور على زند شكل مخفي عنصر ؟
-
20-08-2019 - |
سؤال
أحاول إزالة الافتراضي ديكور على شكل خفي عنصر.بشكل افتراضي ، يتم إخفاء عنصر يتم عرض مثل هذا:
<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');
}