본문에 앵커 태그가 있는 Zend Framework URL을 어떻게 작성할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/405338

문제

Zend Framework에 설정된 표준 MVC를 사용하여 전체적으로 앵커가 있는 페이지를 표시할 수 있기를 원합니다.지금은 .phtml 파일 내에 원하는 '#anchor'가 포함된 의미 없는 매개변수를 추가하고 있습니다.

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

이렇게 하면 URL이 /my.controller/my.action/anchor/#myanchor와 같이 설정됩니다.

이를 수행하는 더 좋은 방법이 있습니까?앵커 링크로 이동한 후 추가 항목 매개변수가 사용자의 URL에 설정되는데, 이는 제가 원하지 않는 일입니다.

도움이 되었습니까?

해결책

가능성 중 하나는 URL 헬퍼를 무시하거나 새 제품을 만드는 것입니다.

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;
    }
}

이 헬퍼는 URL 도우미를 무시하고 URL에서 앵커로 변경되기 때문에 '앵커'라는 매개 변수를 사용할 수 없다는 것입니다.

당신은 당신의 예에서와 같이 그것을 부를 것입니다

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

도움이되기를 바랍니다

다른 팁

구현 방법에는 여러 가지가 있습니다. 조각 ID 귀하의 URL에.다음은 각각의 장단점과 함께 몇 가지 옵션입니다.

직접 추가

간단히 추가하면 됩니다. "#$fragment_id" 당신의 후에 url() 부르다.우아하지 않지만 단순합니다.페이지 앵커를 많이 사용하지 않는 경우(예:한두 페이지만) 이 방법으로 진행합니다.

맞춤 작성 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 클래스 (극단)

세 번째 옵션으로 다음의 사용자 정의 버전을 작성할 수 있습니다. Zend_Controller_Router_Route 클래스, 특히 assemble($data, $reset, $encode) 방법( match($path) 메소드는 기본적으로 조각 ID를 무시합니다).

이 방법을 사용하는 것은 매우 까다로울 수 있지만 특히 사용이 특정 경로로만 제한되는 경우 매우 유용합니다(이 방법은 모든 변수를 기준으로 조각 ID를 기반으로 사용할 수 있습니다).

경고

특정 고려 사항 ~ 해야 하다 조각 ID를 사용할 때 고려해야 합니다.예를 들어, 쿼리 문자열은 URI에서 조각 ID 앞에 와야 합니다. 그렇지 않으면 쿼리 문자열은 PHP에서 무시됩니다.그러나 대부분의 ZF 애플리케이션은 쿼리 문자열 사용을 피하는 경향이 있으므로 문제가 되지 않을 수 있습니다.

URL보기 헬퍼는 세 번째 옵션의 '조각'키를 수락합니다.

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

#anchor로 자동으로 URL을 종료합니다.

-감사합니다

다른 도우미가 동일한 동작 (리디렉터 액션 도우미)을 가질 것이기 때문에 사용자 정의 노선 클래스를 작성하는 극단적 인 방법이 더 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top