I think you would need two files, My_Form_Element_Phonenumber and My_View_Helper_FormPhonenumber.
Code:
<?php
class My_Form_Element_Phonenumber extends Zend_Form_Element
{
public $helper = 'formPhonenumber';
public function setValue($value)
{
if(is_array($value))
{
@list($first, $second, $third, $ext) = $value;
// saving comma-delimited for simplicity, save however you want
// this is NOT the display
$value = sprintf('%s,%s,%s,%s', $first, $second, $third, $ext);
}
return parent::setValue($value);
}
}
Code:
<?
require_once 'Zend/View/Helper/FormElement.php';
class My_View_Helper_Phonenumber extends Zend_View_Helper_FormElement {
public function formPhonenumber($name, $value = null, $attribs = null) {
$info = $this->_getInfo($name, $value, $attribs);
extract($info); // name, value, attribs, options, listsep, disable
$value=$this->view->escape($value);
// retrieve from comma-delimited list
list($first, second, $third, $ext) = split(',', $value);
$html = '(<input type="text" size=2'
. ' name="' . $this->view->escape($name) . '[]"'
. ' value="' . $first . '">)'
$html = ' <input type="text" size=2'
. ' name="' . $this->view->escape($name) . '[]"'
. ' value="' . $second . '">'
$html = ' - <input type="text" size=3'
. ' name="' . $this->view->escape($name) . '[]"'
. ' value="' . $third . '">'
$html = ' ext. <input type="text" size=3'
. ' name="' . $this->view->escape($name) . '[]"'
. ' value="' . $ext . '">'
return $html;
}
}
This is untested, loosely based on some of my working code.