URLにフラグメントIDを実装する方法は複数あります。以下は、いくつかのオプションと、それぞれの長所と短所です。
直接追加
"#$fragment_id"
呼び出しの後に単に追加することができますurl()
。エレガントではありませんが、シンプルです。ページアンカーをあまり使用しない場合(つまり、1ページまたは2ページのみ)、これが最適な方法です。
url()
カスタムヘルパーを書く
url()
フラグメントIDにオプションの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;
}
}
このようにして、アンカー(およびアンカー/フラグメントID)情報は、ビューの領域内で厳密に保持されます。これは一般的な使用には適していますが、デフォルトルートでは少し扱いにくい場合があります。また、これは一部の用途にはまだ少しハードコーディングされています。
カスタムRoute
クラスを作成する(Extreme)
Zend_Controller_Router_Route
3番目のオプションとして、クラスのカスタムバージョン、具体的にはassemble($data, $reset, $encode)
メソッドを記述できます(match($path)
メソッドはデフォルトでフラグメントIDを無視します)。
このメソッドの使用は非常に難しい場合がありますが、特に使用が特定のルートのみに制限されている場合は非常に便利です(このメソッドは、任意の変数に基づいてフラグメントIDを作成するために使用できます)。
警告
Certain considerations must be taken into account when using fragment ids. For example, query strings have to precede the fragment id in the uri, otherwise, the query string ignored by PHP. However, most ZF applications tend to avoid use of query strings, so it may not be an issue.