Существует несколько способов реализовать идентификатор фрагмента в ваших URL. Ниже приведены некоторые варианты, а также некоторые плюсы и минусы для каждого.
Прямое добавление
Вы можете просто добавить "#$fragment_id"
после вашего url()
вызова. Не элегантный, но простой. Если вы не используете якоря страниц (например, одну или две страницы), то это путь.
Написать пользовательский url()
помощник
Вы можете написать собственную версию url()
, добавив необязательный 5-й аргумент для идентификатора фрагмента:
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;
}
}
Таким образом, информация привязки (и идентификатор привязки / фрагмента) хранится строго в пределах области просмотра. Это хорошо для общего использования, но может стать немного громоздким для маршрута по умолчанию. Кроме того, это все еще слишком сложно для некоторых целей.
Написать пользовательский Route
класс (Extreme)
В качестве третьего варианта вы можете написать собственную версию класса (ов) Zend_Controller_Router_Route
, в частности, метода assemble($data, $reset, $encode)
(метод match($path)
по умолчанию игнорирует идентификаторы фрагментов).
Использование этого метода может быть довольно сложным, но очень полезным, особенно если его использование ограничено только конкретными маршрутами (этот метод можно использовать для определения идентификатора фрагмента любой переменной).
Протест
Некоторые соображения необходимо учитывать при использовании идентификаторов фрагментов. Например, строки запроса должны предшествовать идентификатору фрагмента в URI, в противном случае строка запроса игнорируется PHP. Тем не менее, большинство приложений ZF, как правило, избегают использования строк запроса, поэтому это может не быть проблемой.