2010-08-22 2 views
0

나는 줌라 1.5 사이트의 간단한 메뉴 hierachy 있습니다줌라 : jroute 및 백업 메뉴 계층 구조 탐색

[Newsletters] -> [publisher A] -> [Newsletter A1] 
           -> [Newsletter A2] 
       -> [publisher B] -> [Newsletter B1] 
           -> [Newsletter B2] 

메뉴 항목이나 빵 부스러기의 SEF URL의 예상대로를 사용하여이 계층 구조를 탐색;

/newsletters/pubA.html 
/newsletters/pubA/letterA1.html 
/newsletters/pubA/letterA2.html 
/newsletters/pubB.html 
/newsletters/pubB/letterAB.html 
/newsletters/pubB/letterAB.html 

그러나 페이지 내 링크를 사용하여 계층 구조를 탐색하면 URL이 엉망이됩니다. 자세한 내용은 다음을 참조하십시오.

페이지는 구성 요소에 의해 생성됩니다. SEF URL을 생성하기 위해 JRouter를 구현했습니다. SEF를 켜면 메뉴 항목과 표준 빵 부스러기를 사용하여 계층 구조를 올바르게 탐색 할 수 있습니다.

그러나 게시자 페이지의 모든 게시자 뉴스 레터에 연결하거나 뉴스 레터 페이지에서 게시자 페이지로 다시 연결하여 페이지 자체의 링크를 탐색하고 싶습니다. 게시자에서 뉴스 레터로 갈 때 잘 작동합니다. 구성 요소는

JRoute::_('index.php?option=' . $option . '&view=newsletter&newsletterid=' . $newsletterId); 

및 (제대로) 생성을 호출하는 URL과 같은 : 그러나

/newsletters/pubA/letterA1.html 

, 사용자가 뉴스 레터 페이지에 다시 게시자의 페이지까지 이동하고자 할 때, 일이 잘못 . 어떤 이유에서 게시자의 별칭이 뉴스 레터의 별칭 뒤에 URL에 추가됩니다 (마치 hierachy의 뉴스 레터 아래에 있음). 구성 요소가

JRoute::_('index.php?option=' . $option . '&view=publisher&publisherid=' . $publisherId); 

를 호출하지만이 (잘못)과 같은 URL을 생성합니다 : 나는 위의 URL에서 다시 뉴스 레터 앞으로 이동하면

/newsletters/pubA/letterA1/pubA.html 

, 다음 URL은

/newsletters/pubA/letterA1/letterA1.html 
/newsletters/pubA/letterA1/pubA.html 
/newsletters/pubA/letterA1/letterA1.html 
/newsletters/pubA/letterA1/pubA.html 
된다

(즉, 하나 또는 두 개의 세그먼트 'wrong'보다 더 깊게 진행되지 않습니다.)

또한 내비게이션 일을합니다 (즉, 오른쪽 페이지가 열림) - 이상한 모양의 URL 일뿐입니다.

위쪽에 표시된 예상 URL을 어떻게 생성 할 수 있는지 알 수 없습니다. '첫 번째'부분이 무엇인지에 관계된 '상대적인 부분'을 지정하는 방법이없는 것처럼 보입니다. JSite :: getRouter()를 어떻게 사용해야할까요?

라우터 코드는 꽤 간단합니다. 라우터를 작성한 것은 처음이므로 뭔가를 엉망으로 만들 수있었습니다. ParseRoute가 단 하나의 세그먼트로 호출된다는 것은 의심 스럽습니다.

function ComponentBuildRoute(&$query) 
{ 
    $segments = array(); 
    if (isset($query['view'])) 
    { 
    if (isset($query['newsletterid'])) 
    { 
     $alias = { figure out newsletter alias from newsletter id } 
     $segments[] = $alias; 
     unset($query['newsletterid']); 
    }  
    else if (isset($query['publisherid'])) 
    { 
     $alias = { figure out publisher alias from publisher id } 
     $segments[] = $alias; 
     unset($query['publisherid']);   
    } 

    unset($query['view']); 
    } 

    return $segments; 
} 

function ComponentParseRoute($segments) 
{ 
    $vars = array(); 

    $id = { try to retrieve newsletter id matching alias in $segments[0] } 
    if (!empty($id)) 
    { 
    $vars['view'] = 'newsletter'; 
    $vars['newsletterid'] = $id;  
    return $vars; 
    } 
    $id = { try to retrieve publisher id matching alias in $segments[0] } 
    if (!empty($id)) 
    { 
    $vars['view'] = 'publisher'; 
    $vars['publisherid'] = $id;  
    return $vars; 
    } 

    return $vars; 
} 
는 내가 게시자의 메뉴 항목이 뉴스 레터 메뉴 아래 앉아 있기 때문에 ... 분명히 메뉴 항목과 이동 경로 모듈 모두로이 일의 방법이 있어야합니다 절대 URL을 사용하지 않으

그것을 생각 out ...

감사합니다.

+0

라우터 코드 (일부)를 포함해야합니다. 이 오류가 발생할 가능성이 가장 큽니다. – MvanGeest

+0

완료 - 라우터 코드가 추가되었습니다. – Jimmy

답변

0

ComponentBuildRoute에 문제가 있습니다. publisherid를 다루는 else if 블록에서 newsletterid가 설정되지 않았습니다.그게 문제인지 확실하지 않지만 문제를 해결하면이 문제가 해결되는 첫 번째 단계가됩니다.

+0

고마워요. - 여기에 코드를 쓸 때 오타가되었습니다. 실제 코드가 publisherid를 올바르게 설정하지 않았습니다. – Jimmy