Introducción a Zend Framework

 Aprendiendo Zend Framework

Apéndice

 Referencia de Zend Framework


  • Zend_Gdata
  • Zend_Http
  • Zend_InfoCard
  • Zend_Json
  • Zend_Layout
  • Zend_Ldap
  • Zend_Loader
  • Zend_Locale
  • Zend_Log
  • Zend_Mail
  • Zend_Markup
  • Zend_Measure
  • Zend_Memory
  • Zend_Mime
  • Zend_Navigation
  • Zend_Oauth
  • Zend_OpenId
  • Zend_Paginator
  • Zend_Pdf
  • Zend_ProgressBar
  • Zend_Queue
  • Zend_Reflection
  • Zend_Registry
  • Zend_Rest

  • Zend_Search_Lucene
  • Zend_Serializer
  • Zend_Server
  • Zend_Service
  • Zend_Session
  • Zend_Soap
  • Zend_Tag
  • Zend_Test
  • Zend_Text
  • Zend_TimeSync
  • Zend_Tool
  • Zend_Tool_Framework
  • Zend_Tool_Project
  • Zend_Translate
  • Zend_Uri
  • Zend_Validate
  • Zend_Version
  • Zend_View
  • Zend_Wildfire
  • Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Traducción al 26.9% - Actualizado el 2011-11-16 - Revisión 24249 - Versión ZF 1.11.x

    37.7. The UserAgent Device Interface

    37.7.1. Overview

    Once the User-Agent has been parsed and capabilities retrieved from the Features adapter, you will be returned an object that represents the discovered brower device. This interface describes the various capabilities you may now introspect.

    Additionally, the various device classes define algorithms for matching the devices they describe. By implementing this interface, you may provide additional logic around these capabilities.

    37.7.2. Quick Start

    The Zend_Http_UserAgent_Device interface defines the following methods.

    interface Zend_Http_UserAgent_Device extends Serializable
    {
        public function 
    __construct($userAgent null, array $server = array(), array $config = array());
        public static function 
    match($userAgent$server);
        public function 
    getAllFeatures();
        public function 
    getAllGroups();
        public function 
    getBrowser();
        public function 
    getBrowserVersion();
        public function 
    getGroup($group);
        public function 
    getImageFormatSupport();
        public function 
    getImages();
        public function 
    getMaxImageHeight();
        public function 
    getMaxImageWidth();
        public function 
    getPhysicalScreenHeight();
        public function 
    getPhysicalScreenWidth();
        public function 
    getPreferredMarkup();
        public function 
    getUserAgent();
        public function 
    getXhtmlSupportLevel();
        public function 
    hasFlashSupport();
        public function 
    hasPdfSupport();
        public function 
    hasPhoneNumber();
        public function 
    httpsSupport();
    }

    The static function match() should be used to determine whether the provided User-Agent and environment (represented by the $server variable) match this device. If they do, the Zend_Http_UserAgent class will then create an instance of the class, passing it the User-Agent, $server array, and any configuration available; at this time, it is expected that the Device class will consult with a features adapter, if present, and populate itself with discovered capabilities.

    In practice, you will likely extend Zend_Http_UserAgent_AbstractDevice, which provides functionality around discovering capabilities from the User-Agent string itself, as well as discovering and querying a Features adapter.

    37.7.3. Configuration Options

    Configuration options are defined on a per-device basis. The following options are defined in Zend_Http_UserAgent_AbstractDevice. Like all options, the "." character represents an additional level of depth to the configuration array.

    Device Options

    features.classname

    The name of a Features adapter class that has either been previously loaded or which is discoverable via autoloading, or used in conjunction with the features.path option. This class must implement the Zend_Http_UserAgent_Features_Adapter interface.

    features.path

    If provided, the filesystem path to the features adapter class being used. The path must either be an absolute path or discoverable via the include_path.

    37.7.4. Available Methods

    __construct($userAgent = null, array $server = array(), array $config = array());

    Expects a User-Agent string, an array representing the HTTP environment, and an array of configuration values. The values are all optional, as they may be populated during deserialization.

    match($userAgent, $server);

    This method is static.

    Provided the $userAgent string and an array representing the HTTP headers provided in the request, determine if they match the capabilities of this device. This method should return a boolean.

    getAllFeatures();

    Returns an array of key/value pairs representing the features supported by this device instance.

    getAllGroups();

    Similar to getAllFeatures(), this retrieves all features, but grouped by type.

    hasFeature($feature);

    Query the device to determine if it contains information on a specific feature.

    getFeature($feature);

    Retrieve the value of a specific device feature, if present. Typically, this will return a boolean false or a null value if the feature is not defined.

    getBrowser();

    Returns the browser string as discoverd from the User-Agent string.

    getBrowserVersion();

    Retrieve the browser version as discovered from the User-Agent string.

    getGroup($group);

    Get all features from a given feature group.

    getImageFormatSupport();

    Retrieve a list of supported image types.

    getImages();

    Alias for getImageFormatSupport().

    getMaxImageHeight();

    Retrieve the maximum supported image height for the current device instance.

    getMaxImageWidth();

    Retrieve the maximum supported image width for the current device instance.

    getPhysicalScreenHeight();

    Retrieve the physical screen height for the current device instance.

    getPhysicalScreenWidth();

    Retrieve the physical screen width for the current device instance.

    getPreferredMarkup();

    Retrieve the preferred markup format for the current device instance.

    getUserAgent();

    Retrieve the User-Agent string for the current device instance.

    getXhtmlSupportLevel();

    Retrieve the supported X/HTML version for the current device instance.

    hasFlashSupport();

    Determine if the current device instance supports Flash.

    hasPdfSupport();

    Determine if the current device instance supports PDF.

    hasPhoneNumber();

    Determine if the device has an associated phone number. Note: does not retrieve the phone number. This can be useful for determining if the device is a mobile phone versus another wireless capable device.

    httpsSupport();

    Determine if the current device instance supports HTTPS.

    37.7.5. Examples

    Ejemplo 37.34. Determining Supported Features

    You may wish to direct the user to specific areas of your site based on features supported by the device they are using. For instance, if a particular app works only in Flash, you might direct a non-Flash-capable device to a page indicating the application will not work on their device; or for a device not capable of HTTPS, you may indicate certain actions, such as purchases, are not available.

    $userAgent = new Zend_Http_UserAgent();
    $device    $userAgent->getDevice();

    // Redirect to a Flash version of the app:
    if ($device->hasFlashSupport()) {
        
    header('Location: /flash/app');
        exit;
    }

    // Determine whether to show a "purchase" link:
    if ($device->httpsSupport()) {
        echo 
    '<a href="https://store-site.com/purchase">Purchase!</a>';
    } else {
        echo 
    'Purchasing is unavailable on this device.';
    }

    Ejemplo 37.35. Dynamically Scaling Images

    You may wish to alter the image sizes present in order to achieve a specific design within mobile devices. You may use a variety of methods in the device object to make this happen.

    $userAgent = new Zend_Http_UserAgent();
    $device    $userAgent->getDevice();

    // Get the maximum image width and height
    $maxWidth  $device->getMaxImageWidth();
    $maxHeight $device->getMaxImageHeight();

    // Create an <img> tag with appropriate sizes
    echo '<img src="/images/foo.png"';
    if ((
    null !== $maxWidth) &amp;&amp; ($maxWidth 328)) {
        echo 
    ' width="' $maxWidth '"';
    }
    if ((
    null !== $maxHeight) &amp;&amp; ($maxHeight 400)) {
        echo 
    ' height="' $maxHeight '"';
    }
    echo 
    '/>';

    [Nota] Markup- based scaling is not ideal

    Markup-based scaling such as in the example above is not the best approach, as it means that the full-sized image is still delivered to the device. A better approach is to pre-scale your images to a variety of sizes representing the devices you wish to support, and then using the device capabilities to determine which image to use.

    Another approach is to use third-party services. Zend Framework provides one such capability via the TinySrc view helper.

    digg delicious meneame google twitter technorati facebook

    Comentarios

    Loading...