TigerZF
🌐Español

33.8. Clases personalizadas de Feed y Entry

Por último, puede extender las clases de Zend_Feed si desea proporcionar su propio formato o comodidades como el manejo automático de elementos que deben ir en un espacio de nombres personalizado.

Aquí tiene un ejemplo de una clase de entrada Atom personalizada que gestiona sus propias entradas del espacio de nombres myns:. Observe que también realiza la llamada a registerNamespace() por usted, de modo que el usuario final no necesita preocuparse en absoluto por los espacios de nombres.

Ejemplo 33.7. Extendiendo la clase Atom Entry con espacios de nombres personalizados

/**
 * The custom entry class automatically knows the feed URI (optional) and
 * can automatically add extra namespaces.
 */
class MyEntry extends Zend_Feed_Entry_Atom
{

    public function __construct($uri = 'http://www.example.com/myfeed/',
                                $xml = null)
    {
        parent::__construct($uri, $xml);

        Zend_Feed::registerNamespace('myns',
                                     'http://www.example.com/myns/1.0');
    }

    public function __get($var)
    {
        switch ($var) {
            case 'myUpdated':
                // Translate myUpdated to myns:updated.
                return parent::__get('myns:updated');

            default:
                return parent::__get($var);
            }
    }

    public function __set($var, $value)
    {
        switch ($var) {
            case 'myUpdated':
                // Translate myUpdated to myns:updated.
                parent::__set('myns:updated', $value);
                break;

            default:
                parent::__set($var, $value);
        }
    }

    public function __call($var, $unused)
    {
        switch ($var) {
            case 'myUpdated':
                // Translate myUpdated to myns:updated.
                return parent::__call('myns:updated', $unused);

            default:
                return parent::__call($var, $unused);
        }
    }
}

Luego, para usar esta clase, simplemente la instanciaría directamente y establecería la propiedad myUpdated:

$entry = new MyEntry();
$entry->myUpdated = '2005-04-19T15:30';

// method-style call is handled by __call function
$entry->myUpdated();
// property-style call is handled by __get function
$entry->myUpdated;