Great, Eugene, thanks a lot!

That's how I did it:

        $city->removeDecorator('Label');

(there is no DtDdWrapper on a standard Zend_Form_Element_Text, so I just 
removed the "Label" (dt) decorator, the dd tag comes from the "HtmlTag" 
decorator)

Form element output:

<dt id="zipcode-label"><label for="zipcode" class="required">Zipcode / 
City</label></dt>
<dd id="zipcode-element">
  <input type="text" name="zipcode" id="zipcode" value="" size="10" />
</dd>
<dd id="city-element">
  <input type="text" name="city" id="city" value="" />
</dd>


My CSS looks like this:

------------------
fieldset dt {
    width: 210px;
    float: left;
}

fieldset dd {
    float: left;
}

fieldset dd#zipcode-element {
    width: 110px;
}
fieldset dd#city-element {
    width: 330px;
}
fieldset input#zipcode {
    width: 100px;
}
fieldset input#city {
    width: 325px;
}

fieldset dd#city-element ul.errors {
    margin-left: -115px;
}
------------------

It's kind of an ugly hack, especially the positioning of ul.errors - errors of 
both input fields override each other. But as Zend_Validate_NotEmpty::IS_EMPTY 
is the only possible error message in this case, this doesn't matter and looks 
even better than two identical errors.

take care
Philip



Am 14.05.2010 um 16:03 schrieb Eugene Morgan:

> This is one way to do it:
> 
> $city->removeDecorator('DtDdWrapper')
>            ->addDecorator('HtmlTag', array(
>                'tag' => 'dd'
>            ));
> 
> You'll get markup like this:
> <dt id="zipcode-label"><label for="zipcode" class="required">Zipcode /
> City</label></dt>
> <dd id="zipcode-element">
>   <input type="text" name="zipcode" id="zipcode" value="" />
> </dd>
> <dd>
>   <input type="text" name="city" id="city" value="" />
> </dd>
> 
> Then you can use CSS to make that second <dd> display inline.
> 
> 
> On Thu, May 13, 2010 at 4:50 PM, Philip Iezzi <li...@iezzi.ch> wrote:
>> Hi,
>> 
>> What I'm trying to accomplish is to group two Zend_Form_Element_Text 
>> elements that they show up on the same line.
>> I'm styling my standard Zend_Form output (standard decorators) by CSS to 
>> bring the form element's label to the left side of the input field.
>> 
>>    $zipcode = new Zend_Form_Element_Text('zipcode', array('size' => 10));
>>    $zipcode->setLabel('City')
>>            ->setRequired(true);
>> 
>>    $city = new Zend_Form_Element_Text('city');
>>    $city->setLabel('Ort')
>>         ->setRequired(true);
>> 
>> The rendered form produces the following:
>> 
>>  <dt id="zipcode-label"><label for="zipcode" 
>> class="required">Zipcode</label></dt>
>>  <dd id="zipcode-element">
>>    <input type="text" name="zipcode" id="zipcode" value="" />
>>  </dd>
>>  <dt id="city-label"><label for="city" class="required">City</label></dt>
>>  <dd id="city-element">
>>    <input type="text" name="city" id="city" value="" />
>>  </dd>
>> 
>> Now I would like to group those two input fields together that they show up 
>> on the same line, say:
>> 
>>  <dt id="zipcode-label"><label for="zipcode" class="required">Zipcode / 
>> City</label></dt>
>>  <dd id="zipcode-element">
>>    <input type="text" name="zipcode" id="zipcode" value="" />
>>    <input type="text" name="city" id="city" value="" />
>>  </dd>
>> 
>> Removing the HtmlTag & Label decorators of $city doesn't do the trick...
>> 
>>    $city->removeDecorator('HtmlTag')
>>         ->removeDecorator('Label');
>> 
>> How can I attach the $city element into the HtmlTag decorator (dd-Tag) of 
>> the previous element? If possible, without building the whole form from 
>> scratch with a ViewScript decorator.
>> 
>> Thanks a lot
>> Philip
> 

Reply via email to