zend mac how framework for dummies composer php zend-framework zend-framework-mvc

php - mac - zend framework download



¿Cómo puedo escribir las URL de Zend Framework que tienen etiquetas de anclaje en el cuerpo? (4)

Usando el MVC estándar configurado en Zend Framework, quiero poder mostrar páginas que tengan anclajes en todas partes. En este momento solo estoy agregando un parámetro sin sentido con el ''#anchor'' que quiero dentro del archivo .phtml.

<?= $this->url(array( ''controller''=>''my.controller'', ''action''=>''my.action'', ''anchor''=>''#myanchor'' ));

Esto configura la URL para que se vea como /my.controller/my.action/anchor/#myanchor

¿Hay una mejor manera de lograr esto? Después de la navegación al enlace de anclaje, el parámetro de elemento adicional se establece en la URL del usuario, que es algo que preferiría que no ocurriera.


una de las posibilidades es anular url helper o crear uno nuevo.

class My_View_Helper_Url extends Zend_View_Helper_Url { public function url(array $urlOptions = array(), $name = null, $reset = false, $encode = true) { if (isset($urlOptions[''anchor'']) && !empty($urlOptions[''anchor''])) { $anchor = $urlOptions[''anchor'']; unset($urlOptions[''anchor'']); } else { $anchor = ''''; } return parent::url($urlOptions, $name, $reset, $encode).$anchor; } }

este helper anula el url helper, el problema es que no puedes usar el parámetro llamado ''anchor'', porque se cambiará a anchor en url.

lo llamarás como en tu ejemplo

<?= $this->url(array( ''controller''=>''my.controller'', ''action''=>''my.action'', ''anchor''=>''#myanchor'' ));

Espero que ayude


Existen varias maneras de implementar una identificación de fragmento en sus URL. A continuación hay algunas opciones, junto con algunos pros y contras para cada uno.

Direct Add

Simplemente puede agregar el "#$fragment_id" después de su llamada a url() . Inelegante, pero simple. Si no usa mucho los anclajes de página (es decir, una o dos páginas solamente), este es el camino a seguir.

Escribir un helper personalizado url()

Puede escribir una versión personalizada de url() añadiendo un quinto argumento opcional para la identificación del fragmento:

class My_View_Helper_Url extends Zend_View_Helper_Url { public function url(array $urlOptions = array(), $name = null, $reset = false, $encode = true, $fragment_id = null) { $uri = parent::url($urlOptions, $name, $reset, $encode); if(!is_null($fragment_id)) { $uri .= "#$fragment_id"; } return $uri; } }

De esta forma, la información de ancla (y de anclaje / fragmento) se guarda estrictamente dentro del ámbito de la Vista. Esto es bueno para uso general, pero puede ser un poco difícil de manejar para la ruta predeterminada. Además, esto todavía está un poco codificado para algunos usos.

Escribir una clase de Route personalizada (extrema)

Como tercera opción, puede escribir una versión personalizada de la clase Zend_Controller_Router_Route , específicamente el método assemble($data, $reset, $encode) (el método match($path) ignora los identificadores de fragmentos por defecto).

El uso de este método puede ser bastante complicado, pero muy útil, especialmente si el uso solo se limita a rutas específicas (este método se puede utilizar para basar el fragmento de identificación de cualquier variable).

Advertencia

Ciertas consideraciones deben tenerse en cuenta al usar identificadores de fragmentos. Por ejemplo, las cadenas de consulta deben preceder al identificador de fragmento en el uri; de lo contrario, la cadena de consulta será ignorada por PHP. Sin embargo, la mayoría de las aplicaciones de ZF tienden a evitar el uso de cadenas de consulta, por lo que puede no ser un problema.


Creo que el método Extreme de escribir una clase de ruta personalizada es mejor porque otro helper tendrá el mismo comportamiento (como el helper de acción de redirección).


El asistente de vista de url acepta una clave de ''fragmento'' para la tercera opción:

url(''[route]'',array([params]),array(''fragment''=>''anchor''));

esto terminará automáticamente la url con #anchor.

-Gracias a Exlord