Una vez que el User-Agent ha sido analizado y se han obtenido las capacidades desde el adaptador Features, se le devolverá un objeto que representa el dispositivo de navegador descubierto. Esta interfaz describe las diversas capacidades que ahora puede introspeccionar.
Además, las diversas clases de dispositivo definen algoritmos para determinar la coincidencia de los dispositivos que describen. Al implementar esta interfaz, puede proporcionar lógica adicional en torno a estas capacidades.
La interfaz Zend_Http_UserAgent_Device define los
siguientes métodos.
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();
}
La función estática match() debe utilizarse para determinar si
el User-Agent proporcionado y el entorno (representado por la variable
$server) coinciden con este dispositivo. Si es así, la clase
Zend_Http_UserAgent
creará entonces una instancia de la clase, pasándole el User-Agent,
el array $server, y cualquier configuración disponible; en ese momento, se
espera que la clase Device consulte con un adaptador de características, si está presente, y
se rellene con las capacidades descubiertas.
En la práctica, es probable que extienda
Zend_Http_UserAgent_AbstractDevice, que proporciona funcionalidad
para descubrir capacidades a partir de la propia cadena User-Agent, así como
para descubrir y consultar un adaptador Features.
Las opciones de configuración se definen por cada dispositivo. Las siguientes opciones están
definidas en Zend_Http_UserAgent_AbstractDevice. Como en todas las opciones,
el carácter "." representa un nivel adicional de profundidad en el array de configuración.
Opciones del dispositivo
- features.classname
El nombre de una clase de adaptador Features que haya sido cargada previamente o que se pueda descubrir mediante autocarga, o que se use junto con la opción
features.path. Esta clase debe implementar la interfazZend_Http_UserAgent_Features_Adapter.- features.path
Si se proporciona, la ruta del sistema de archivos a la clase de adaptador de características que se está usando. La ruta debe ser una ruta absoluta o descubrible a través de
include_path.
-
__construct($userAgent = null, array $server = array(), array $config = array()); Espera una cadena User-Agent, un array que representa el entorno HTTP, y un array de valores de configuración. Todos los valores son opcionales, ya que pueden rellenarse durante la deserialización.
-
match($userAgent, $server); -
Este método es estático.
Dada la cadena
$userAgenty un array que representa las cabeceras HTTP proporcionadas en la solicitud, determine si coinciden con las capacidades de este dispositivo. Este método debe devolver un valor booleano. -
getAllFeatures(); Devuelve un array de pares clave/valor que representan las características soportadas por esta instancia de dispositivo.
-
getAllGroups(); Similar a
getAllFeatures(), este método obtiene todas las características, pero agrupadas por tipo.-
hasFeature($feature); Consulta al dispositivo para determinar si contiene información sobre una característica específica.
-
getFeature($feature); Recupera el valor de una característica específica del dispositivo, si está presente. Habitualmente, esto devolverá un booleano
falseo un valornullsi la característica no está definida.-
getBrowser(); Devuelve la cadena del navegador tal como se descubrió a partir de la cadena User-Agent.
-
getBrowserVersion(); Recupera la versión del navegador tal como se descubrió a partir de la cadena User-Agent.
-
getGroup($group); Obtiene todas las características de un grupo de características determinado.
-
getImageFormatSupport(); Recupera una lista de los tipos de imagen soportados.
-
getImages(); Alias de
getImageFormatSupport().-
getMaxImageHeight(); Recupera la altura máxima de imagen soportada para la instancia de dispositivo actual.
-
getMaxImageWidth(); Recupera el ancho máximo de imagen soportado para la instancia de dispositivo actual.
-
getPhysicalScreenHeight(); Recupera la altura física de pantalla para la instancia de dispositivo actual.
-
getPhysicalScreenWidth(); Recupera el ancho físico de pantalla para la instancia de dispositivo actual.
-
getPreferredMarkup(); Recupera el formato de marcado preferido para la instancia de dispositivo actual.
-
getUserAgent(); Recupera la cadena User-Agent para la instancia de dispositivo actual.
-
getXhtmlSupportLevel(); Recupera la versión de X/HTML soportada para la instancia de dispositivo actual.
-
hasFlashSupport(); Determina si la instancia de dispositivo actual soporta Flash.
-
hasPdfSupport(); Determina si la instancia de dispositivo actual soporta PDF.
-
hasPhoneNumber(); Determina si el dispositivo tiene un número de teléfono asociado. Nota: no recupera el número de teléfono. Esto puede ser útil para determinar si el dispositivo es un teléfono móvil frente a otro dispositivo con capacidad inalámbrica.
-
httpsSupport(); Determina si la instancia de dispositivo actual soporta HTTPS.
Ejemplo 38.34. Determinar las características soportadas
Puede que desee dirigir al usuario a áreas específicas de su sitio en función de las características soportadas por el dispositivo que está utilizando. Por ejemplo, si una aplicación en particular funciona solo en Flash, podría dirigir a un dispositivo sin capacidad Flash a una página que indique que la aplicación no funcionará en su dispositivo; o para un dispositivo que no admite HTTPS, podría indicar que ciertas acciones, como las compras, no están disponibles.
$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 38.35. Escalado dinámico de imágenes
Puede que desee alterar los tamaños de imagen presentes para lograr un diseño específico en dispositivos móviles. Puede utilizar una variedad de métodos en el objeto de dispositivo para lograr esto.
$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) && ($maxWidth < 328)) {
echo ' width="' . $maxWidth . '"';
}
if ((null !== $maxHeight) && ($maxHeight < 400)) {
echo ' height="' . $maxHeight . '"';
}
echo '/>';
![]() |
El escalado basado en marcado no es lo ideal |
|---|---|
El escalado basado en marcado, como en el ejemplo anterior, no es el mejor enfoque, ya que implica que la imagen a tamaño completo sigue entregándose al dispositivo. Un mejor enfoque es preescalar sus imágenes a una variedad de tamaños que representen los dispositivos que desea soportar, y luego usar las capacidades del dispositivo para determinar qué imagen usar. |
![[Note]](images/note.png)