나는 줌라 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 ...
감사합니다.
라우터 코드 (일부)를 포함해야합니다. 이 오류가 발생할 가능성이 가장 큽니다. – MvanGeest
완료 - 라우터 코드가 추가되었습니다. – Jimmy