私はカスタムフォームクラスを持ち、ベースをZend_Form
に拡張し、フォーム自体と要素のデコレータも指定しています。フォーム要素のデフォルトクラス
そして、私は立ち往生しています - すべての入力要素に特定のHTMLクラスを追加するには?
私が考えることができるのはaddElement()
をオーバーライドすることだけですが、もしあれば、より良い解決策が開かれています。
私はカスタムフォームクラスを持ち、ベースをZend_Form
に拡張し、フォーム自体と要素のデコレータも指定しています。フォーム要素のデフォルトクラス
そして、私は立ち往生しています - すべての入力要素に特定のHTMLクラスを追加するには?
私が考えることができるのはaddElement()
をオーバーライドすることだけですが、もしあれば、より良い解決策が開かれています。
だけで、別の解決策のようなものです:あなたは、自動的に各要素に一意のクラスを割り当てる方法をしたいよう
class My_Form extends Zend_Form
{
public function render(Zend_View_Interface $view = null)
{
foreach ($this->getElements() as $element) {
$element->setAttrib('class', 'default');
}
return parent::render($view);
}
}
if(!$ this - > _ getIsRendered()) 'このメソッドの本体の周りにいくつかのCPUを節約することができます – zerkms
HTMLクラスは、要素に属性を追加すると、この
$element->setAttrib('class', 'text'):
or directly
$element->class = 'text;
彼は500要素を持っている場合、これを手動で行う必要がありますか? –
もし彼が500の要素を持っていて、すべて同じクラス名を持っているのであれば、確かにそうではありません。でも、最初にクラスを作る必要はありません。 –
残念ながら、これは質問に答えません。私は**クラスを設定する方法を知っている**。そして、問題は "どのようにすべての入力要素に特定のHTMLクラスを追加するのか?"でした。自動的に – zerkms
が鳴ります。 b.b3rn4rdによって与えられた答えに拡大
、何かしてみてください:私はZend_Formのを継承ソリューションを好きではないので、私は別の方法を考案し
class My_Form extends Zend_Form
{
public function render(Zend_View_Interface $view = null)
{
foreach ($this->getElements() as $element) {
//assign the class as some unique identifier that is part of the element
//each element requires a unique name so it's a good place to start
$element->setAttrib('class', $element->getName());
}
return parent::render($view);
}
}
をこの。
<?php
abstract class Application_Style
{
private $_object;
function __construct ($object = null)
{
if (isset ($object))
{
$this->apply ($object);
}
}
function apply ($object)
{
$this->setObject ($object);
if ($this->filter())
{
$this->onApply();
}
return $object;
}
function __call ($method, $arguments)
{
return call_user_func_array (array (
$this->getObject(),
$method
), $arguments);
}
abstract protected function onApply();
protected function filter()
{
return true;
}
function setObject ($_object)
{
$this->_object = $_object;
}
function getObject()
{
return $this->_object;
}
}
class Application_Style_ElementClass extends Application_Style
{
function onApply()
{
foreach ($this->getObject()
->getElements() as $element)
{
$element->setOptions (array (
'class' => 'test-class'
));
}
}
function filter()
{
return $this->getObject() instanceof Zend_Form;
}
}
$form = new Zend_Form();
$form->addElement ('text', 'name');
new Application_Style_ElementClass ($form); // apply the class name
echo $form;
このようにして、任意のフォームに必要なすべてのスタイルを任意の順序で適用できます。
'get_class_methods($ formObject)'を試して、あなたのリクエストに対処できる他のメソッドがあるかどうか確認しましたか? –
@Mike Purcell:私は現在 'Zend_Form'ソースを見て、何が私を助けてくれるのか分かりません。 – zerkms
「特定のクラス」とはどういう意味ですか? HTMLクラス属性? –