나는이 문서 페이지의 지시 사항을 따르려고하지만 뭔가 빠진 것 같다 : https://docs.joomla.org/Supporting_SEF_URLs_in_your_component줌라 구성 요소 라우터
수정 될 필요가있는 URI는에게 : index.php를 com_component &보기 = 법문 & 페이지 = 사용자 정의 동의서
라우팅 기능이 단순해야하지만 페이지가 하위보기 대신 기본값으로 표시됩니다.
여기 내 현재 코드입니다 :
function ComponentBuildRoute(&$query)
{
$segments = array();
if (isset($query['view'])) {
$segments[] = $query['view'];
unset($query['view']);
}
if (isset($query['page'])) {
$segments[] = $query['page'];
unset($query['page']);
}
return $segments;
}
function ComponentParseRoute($segments)
{
$vars = array();
switch($segments[0])
{
case 'legal':
$vars['view'] = 'legal';
break;
case 'customermasteragreement':
$vars['page'] = 'customermasteragreement';
break;
}
return $vars;
}
업데이트이 코드는 서브 페이지를 표시하기 위해 노력 하지만처럼 나에게 URI를 제공합니다 : 리갈 계약/법률 페이지 = customermasteragreement
class ComponentRouter extends JComponentRouterBase {
public function build(&$query) {
$segments = array();
$view = null;
if (isset($query['view'])) {
$segments[] = $query['view'];
$view = $query['view'];
unset($query['view']);
}
if (isset($query['id'])) {
if ($view !== null) {
$segments[] = $query['id'];
} else {
$segments[] = $query['id'];
}
unset($query['id']);
}
return $segments;
}
public function parse(&$segments) {
$vars = array();
// View is always the first element of the array
$vars['view'] = array_shift($segments);
return $vars;
}
}
수정 2
여기 내 모델과 뷰의
모델/legal.php
// import Joomla modelitem library
jimport('joomla.application.component.modelitem');
class ComponentModelLegal extends JModelItem {
public function __construct($config = array())
{
JLoader::register('ComponentHelper', JPATH_COMPONENT_ADMINISTRATOR . '/helpers/component.php');
parent::__construct($config);
}
/**
*
* @return string
*/
public function getLegal() {
$app = JFactory::getApplication();
$page = $app->input->get('page', '', 'STRING');
if ($page) {
ComponentHelper::add('type', $page); //This is an API request to an external service, returning JSON formatted data
$legal = ComponentHelper::getData('commons/legal-agreements.json', TRUE);
if (isset($legal[0]['status'])) {
JError::raiseError(400, $legal[0]['ERROR']);
return false;
} else {
if (!isset($this->legal)) {
$this->legal = $legal;
}
return $this->legal;
}
}
}
}
보기/법률/view.html.php
class ComponentViewLegal extends JViewLegacy {
function display($tpl = null) {
// Assign data to the view
$this->legal = $this->get('legal');
// Check for errors.
if (count($errors = $this->get('Errors'))) {
JLog::add(implode('<br />', $errors), JLog::WARNING, 'jerror');
return false;
}
// Display the view
parent::display($tpl);
}
}
보기/법률/tmpl/default.php
$page = JRequest::getVar('page');
$pages = array(
'resellermasteragreement',
'customermasteragreement',
'resellerdomainagreement',
'customerdomainagreement',
'resellerwebserviceagreement',
'customerwebserviceagreement',
'resellerdigicertagreement',
'customerdigicertagreement',
'registraragreement',
'customerhostingproductagreement',
'resellerhostingproductagreement'
);
?>
<div class="col-lg-12">
<?php
echo in_array($page, $pages) ? $this->loadTemplate('legal') : $this->loadTemplate('home');
?>
</div>
views/legal/tmpl/default_legal.php
$page = JRequest::getVar('page');
echo nl2br(htmlspecialchars($this->legal[$page]['defaultagreement'], ENT_NOQUOTES, "UTF-8"));
?>
<a type="button" class="btn btn-primary" href="<?php echo JROUTE::_("index.php?option=com_component&view=legal"); ?>">Back</a>
편집 3 이 작업은 메뉴 항목에서 페이지로 직접 이동하지 않았기 때문에 가능합니다. 최고 수준의 메뉴가 있고, 그 다음 페이지가 계약서에 링크되어 있습니다. 각 항목에 숨겨진 메뉴가 있지만 그 링크가 아닙니다. 나는 완전히 줌라를 오해하지 않았다면
$app = JFactory::getApplication()->getMenu();
$customermaster = $app->getItems('link', 'index.php?option=com_component&view=legal&page=customermasteragreement', true);
JRoute::_('index.php?Itemid='.$customermaster->id);
내 구성 요소의 이름이 "구성 요소"인 경우를 제외합니다. :) –
@JamesShaver 물론. 방금 클래스/함수의 시작 부분에 올바른 이름이 있어야한다는 것을 명확히하기 위해이 글을 썼습니다. 업데이트 된 클래스를 사용해보고 원하는대로 작동하는지 확인하십시오. –
이제 404 오류가 발생합니다. [name, type, prefix] : view, html, componentView를 찾을 수 없습니다. –