JLayout을 사용하여 코드의 재사용성을 높이는 방법

5016 단어 joomla 개발 대문
JLayout이 해결해야 할 문제는 코드의 재사용과 재작성 메커니즘을 더 잘 덮어쓰는 것이다.JLayout을 이해하려면 우선 현재 우리 상황에 어떤 문제가 생겼는지 알아야 한다.개발할 때, 나는 프론트 데스크톱 뒤에서 코드를 공용하거나, 두 모듈 사이에서 코드를 공용해야 한다.하나의 전형적인 예는 바로 인쇄이다.
 
일찍이 나는 고객이 프론트 데스크톱에서 제출한 표를 백엔드에서 인쇄할 수 있는 사례를 만들었다.프론트 데스크톱 백엔드 공용 코드가 필요합니다.이런 상황에서 일반적인 해결 방법은 바로 코피 코드다.또 하나 흔히 볼 수 있는 문제는 백엔드 개발에서 많은 구성 요소가 필터 기능을 필요로 하는데 기본적으로 코드는 똑같다는 것이다.하지만 매번 코피 코드를 받아야 하니 기분이 매우 나쁘다.이게 레이아웃이 해결해야 할 문제야.
 
레이아웃 파일은 3.0 릴리즈까지 한 뷰에서만 사용할 수 있으며 일반화되지 않습니다.3.0 이후(3.0 포함) Joomla는 JLayout 인터페이스를 추가하여 이 문제를 해결했다.이것은 데이터와 레이아웃을 봉하여 한 레이아웃을 여러 곳에서 사용할 수 있도록 합니다.Joomla 백엔드의 필터 부분이 좋은 예입니다.
JLayout에는 인터페이스와 두 가지 클래스가 있습니다.
JLayout 인터페이스는 escape(필터)와render(렌더링) 두 가지 방법을 정의했는데 이것은 JView 종류와 매우 비슷하다.
JLayoutBase는 기본적인 레이아웃 클래스를 실현했는데 이 클래스에서 하드코딩된 레이아웃????
JLayoutFile 이것은 가장 자주 사용하는 클래스입니다. 이 클래스는 파일의 레이아웃을 포장하고 렌더링하며 출력하기 전에 템플릿의 출력을 덮어씁니다.
다음은 JLayoutFile의 가장 기본적인 사용 예입니다.
?
1 $layout = new JLayoutFile( 'joomla.sidbars.submenu' , $basePath = null); $sidebarHtml = $layout ->render( $data );
 
위 코드는 JLayoutFile 객체를 만든 다음 render 메소드를 실행하고 render 메소드에서 출력할 매개변수를 전달합니다.첫 번째 인자'joomla.sidebar.submenu '는 파일의 경로를 지정하는데, 마지막 submenu 부분은 파일의 이름입니다.Joomla에 있어요.siderbars는 이전에 모두 상대적인 경로였다.너는 두 번째 매개 변수에 기본 경로를 설정할 수 있다.$basePath가 설정되어 있지 않으면, Joomla는/layouts 디렉터리에서 레이아웃 파일을 검색합니다.위의 예에서, Joomla는/layouts/joomla/sidebars/디렉터리에서submenu를 찾을 것입니다.php 파일을 출력합니다.
만약 우리가 비공식적인 매개 변수를 두 번째 매개 변수로 전달한다면코드는 다음과 같습니다.
?
1 $layout = new JLayoutFile( 'my_layout' , $basePath =JPATH_ROOT. "/components/com_something/layouts" ) $html = $layout ->render( $data );
그러면 JPATH 가 로드됩니다.ROOT.'/components/com_something/layouts/'디렉터리의 mylayout.php 파일입니다.
JLayout을 사용하여 템플릿 출력 덮어쓰기에 대한 영향
render 방법을 실행할 때 JLayoutFile은 현재 템플릿 아래에 layouts 디렉터리가 있는지 확인합니다.우리 위의 코드를 예로 들자.템플릿에sidebar 레이아웃을 다시 불러오고 싶다면, 템플릿의 html 디렉터리 아래layouts 디렉터리를 새로 만들고, 아래에joomla/sidebars/submenu를 새로 만들어야 합니다.php 파일.
 
Layout의 저장 위치
이론적으로layout 파일은 어느 곳에나 저장할 수 있으며, 정확한 경로를 제시하기만 하면 된다.그런 다음 이름 충돌 문제를 방지하기 위해 다음과 같은 권장 사항이 있습니다.
구성 요소의 관리자 디렉터리에 레이아웃 파일을 기본적으로 저장합니다.비유/administrator/componets/comzmaxlogin/layouts
만약 확장이 백엔드가 없다면, 확장된 디렉터리에 레이아웃을 새로 만듭니다./moduels/mod_zmaxqqonline/layouts
또한 이 폴더의 이름은 레이아웃이어야 합니다. 이것은 하드코딩입니다.더 디렉터리에 있는layouts 폴더는 시스템에서 사용합니다.마지막으로 제안이 하나 있습니다. 구성 요소의layouts 아래에 구성 요소의 표시자를 새로 만드십시오.비유comzmaxlogin의admin 디렉터리에layouts/com 가 있어야 합니다zmaxlogin/.....이렇게 하는 것은 주로 디자이너가 템플릿을 디자인하는 데 더욱 편리하도록 하기 위해서이다.이 표시부호가 있으면 디자이너는 모든 구성 요소의 설계를 정확하게 제어할 수 있다.
layout 정의 방법
레이아웃을 정의하는 코드는 비교적 간단합니다.다음은 하나의 예이다
새 파일/layouts/joomla/content/helloworld.php;
?
1
2
3
4
5
6 <?php defined ( 'JPATH_BASE' ) or die ; ?> <div id= "helloword" > <h1>Hello ZMAX !</h1> </div>
다음 단계는 모든layout 파일에서 호출하는 것입니다.코드는 다음과 같습니다.
?
1
2
3
4 <?php $layout = new JLayoutFile( 'joomla.content.hellowrold' ) echo $layout ->render() ?>
프론트 데스크에서 보기만 하면 결과를 볼 수 있다.layout에 매개 변수를 전달할 필요가 있다면, 코드를 이렇게 개선할 수 있습니다
?
1
2
3
4
5
6 <?php defined( 'JPATH_BASE' ) or die ; ?> <div id= "helloworld" > <h1>Hello World <?php echo $displayDate [ "name" ]?></h1> </div>
호출할 때 보호name 띠를 전달하는 그룹을 전달하면 됩니다.
?
1
2
3
4
5 <?php $layout       = new JLayoutFile( 'joomla.content.helloworld' ); $data = array ( 'name' => 'Bob' ); echo $layout ->render( $data );   ?>
이것은 가장 간단한 레이아웃의 사용을 완성했다.

좋은 웹페이지 즐겨찾기