테마는 웹 애플리케이션에서 웹 페이지의 모양을 사용자 정의하는 체계적인 방법입니다. 새로운 테마를 채택하면 웹 애플리케이션의 전체적인 모양과 느낌이 즉각적이고 극적으로 바뀔 수 있습니다.
Yii에서는 뷰 파일, 레이아웃 파일, 관련 리소스 파일(예: 이미지, CSS 파일, JavaScript 파일 등)을 포함하여 각 테마가 디렉터리로 표시됩니다. 주제의 이름은 해당 디렉터리 이름입니다. 모든 테마는 동일한 디렉토리WebRoot/themes
에 배치됩니다. 언제든지 하나의 테마만 활성화할 수 있습니다.
팁: 기본 테마 루트 디렉토리
WebRoot/themes
를 다른 디렉토리로 구성할 수 있습니다. themeManager 애플리케이션 컴포넌트의 basePath 및 baseUrl 속성을 원하는 값으로 구성하기만 하면 됩니다.
테마를 활성화하려면 웹 애플리케이션의 테마 속성을 원하는 이름으로 설정하세요. 애플리케이션 구성에서 구성하거나 실행 중에 컨트롤러 작업에서 수정할 수 있습니다.
참고: 주제 이름은 대소문자를 구분합니다. 존재하지 않는 주제를 시작하려고 하면
yii:
:app()->theme
가null
을 반환합니다.
테마 디렉터리의 콘텐츠는 애플리케이션 기본 경로 디렉터리와 동일한 방식으로 구성됩니다. 예를 들어 모든 뷰 파일은 views
아래에, 레이아웃 뷰 파일은 views/layouts
아래에, 시스템 뷰 파일은 views/system
아래에 있어야 합니다. 예를 들어 PostController
의 create
뷰 파일을 classic
테마로 바꾸고 싶다면 새 뷰 파일을 WebRoot/themes/classic/views/post/create.php
로 저장하면 됩니다.
모듈의 컨트롤러 보기 파일의 경우 해당 테마 보기 파일은 views
디렉터리에 배치됩니다. 예를 들어 위의 PostController
이 forum
이라는 모듈에 있다면 create
뷰 파일을 WebRoot/themes/classic/views/forum/post/create.php
로 저장해야 합니다. forum
모듈이 support
이라는 다른 모듈에 중첩되어 있는 경우 뷰 파일은 WebRoot/themes/classic/views/support/forum/post/create.php
이어야 합니다.
참고:
views
디렉토리에는 보안에 민감한 데이터가 포함될 수 있으므로 네트워크 사용자의 액세스를 방지하도록 구성해야 합니다.
뷰를 표시하기 위해 render 또는 renderPartial을 호출하면 현재 활성화된 테마에서 해당 뷰 파일과 레이아웃 파일을 찾을 수 있습니다. 발견되면 해당 파일이 렌더링됩니다. 그렇지 않으면 viewPath 및layoutPath에 지정된 기본 위치로 대체됩니다.
다음은baseurl 속성을 사용하면 이 이미지 파일에 대해 다음 URL을 생성할 수 있습니다.
yii">로그인 후 복사팁: 테마 관점에서 다른 테마 리소스 파일을 연결해야 하는 경우가 많습니다. 예를 들어 테마 아래의
images
디렉터리에 이미지 파일을 표시하려고 할 수 있습니다. 현재 활성화된 테마의 baseurl 속성을 사용하여 이 이미지 파일에 대해
yii: :app()->theme->baseUrl . '/images/FileName.gif'로그인 후 복사
과 basic
두 가지 테마를 가진 애플리케이션의 디렉토리 구성 예입니다.fancy
WebRoot/ assets protected/ .htaccess components/ controllers/ models/ views/ layouts/ main.php site/ index.php themes/ basic/ views/ .htaccess layouts/ main.php site/ index.php fancy/ views/ .htaccess layouts/ main.php site/ index.php
를 구성하면
return array( 'theme'=>'basic', ...... );
테마가 적용됩니다. 이는 애플리케이션의 레이아웃이 basic
디렉토리 아래의 테마를 사용하고 사이트의 색인이 사용됨을 의미합니다. view는 themes/basic/views/layouts
아래의 파일을 사용합니다. 테마에 보기 파일이 없으면 themes/basic/views/site
디렉토리 아래의 파일로 돌아갑니다.protected/views
인 위젯에 대한 보기
를 테마로 지정하려면 먼저(위젯 클래스 이름과 동일)라는 폴더를 만들어야 합니다. 현재 활성 테마의 뷰 폴더 아래에 위젯 클래스가 xyz
와 같이 네임스페이스가 있는 경우(PHP 5.3.0 이상에서 사용 가능) Foo
이라는 폴더를 만들어야 합니다. 밑줄 문자.Foo
appwidgetsFoo
그런 다음 새로 생성된 폴더 아래에 app_widgets_Foo
이라는 보기 파일을 만듭니다. 이를 위해 위젯에서 원본을 대체하는 데 사용할
인 경우 보기.xyz.php
themes/basic/views/Foo/xyz.php
2. 사용자 정의 전역 위젯basic
이 기능은 버전 1.1.3부터 사용할 수 있습니다. .
When using a widget provided by third party or Yii, we often need to customize it for specific needs. For example, we may want to change the value of CLinkPager::maxButtonCount from 10 (default) to 5. We can accomplish this by passing the initial property values when calling CBaseController::widget to create a widget. However, it becomes troublesome to do so if we have to repeat the same customization in every place we useCLinkPager.
$this->widget('CLinkPager', array( 'pages'=>$pagination, 'maxButtonCount'=>5, 'cssFile'=>false, ));
Using the global widget customization feature, we only need to specify these initial values in a single place, i.e., the application configuration. This makes the customization of widgets more manageable.
To use the global widget customization feature, we need to configure the widgetFactory as follows:
return array( 'components'=>array( 'widgetFactory'=>array( 'widgets'=>array( 'CLinkPager'=>array( 'maxButtonCount'=>5, 'cssFile'=>false, ), 'CJuiDatePicker'=>array( 'language'=>'ru', ), ), ), ), );
In the above, we specify the global widget customization for both CLinkPager and CJuiDatePicker widgets by configuring the CWidgetFactory::widgets property. Note that the global customization for each widget is represented as a key-value pair in the array, where the key refers to the wiget class name while the value specifies the initial property value array.
Now, whenever we create a CLinkPager widget in a view, the above property values will be assigned to the widget, and we only need to write the following code in the view to create the widget:
$this->widget('CLinkPager', array( 'pages'=>$pagination, ));
We can still override the initial property values when necessary. For example, if in some view we want to setmaxButtonCount
to be 2, we can do the following:
$this->widget('CLinkPager', array( 'pages'=>$pagination, 'maxButtonCount'=>2, ));
Note: The skin feature has been available since version 1.1.0.
While using a theme we can quickly change the outlook of views, we can use skins to systematically customize the outlook of the widgets used in the views.
A skin is an array of name-value pairs that can be used to initialize the properties of a widget. A skin belongs to a widget class, and a widget class can have multiple skins identified by their names. For example, we can have a skin for the CLinkPager widget and the skin is named as classic
.
In order to use the skin feature, we first need to modify the application configuration by configuring theCWidgetFactory::enableSkin property to be true for the widgetFactory
application component:
return array( 'components'=>array( 'widgetFactory'=>array( 'enableSkin'=>true, ), ), );
Please note that in versions prior to 1.1.3, you need to use the following configuration to enable widget skinning:
return array( 'components'=>array( 'widgetFactory'=>array( 'class'=>'CWidgetFactory', ), ), );
We then create the needed skins. Skins belonging to the same widget class are stored in a single PHP script file whose name is the widget class name. All these skin files are stored under protected/views/skins
, by default. If you want to change this to be a different directory, you may configure the skinPath
property of thewidgetFactory
component. As an example, we may create under protected/views/skins
a file namedCLinkPager.php
whose content is as follows,
<?php return array( 'default'=>array( 'nextPageLabel'=>'>>', 'prevPageLabel'=>'<<', ), 'classic'=>array( 'header'=>'', 'maxButtonCount'=>5, ), );
In the above, we create two skins for the CLinkPager widget: default
and classic
. The former is the skin that will be applied to any CLinkPager widget that we do not explicitly specify its skin
property, while the latter is the skin to be applied to a CLinkPager widget whose skin
property is specified as classic
. For example, in the following view code, the first pager will use the default
skin while the second the classic
skin:
<?php $this->widget('CLinkPager'); ?> <?php $this->widget('CLinkPager', array('skin'=>'classic')); ?>
If we create a widget with a set of initial property values, they will take precedence and be merged with any applicable skin. For example, the following view code will create a pager whose initial values will bearray('header'=>'', 'maxButtonCount'=>6, 'cssFile'=>false)
, which is the result of merging the initial property values specified in the view and the classic
skin.
<?php $this->widget('CLinkPager', array( 'skin'=>'classic', 'maxButtonCount'=>6, 'cssFile'=>false, )); ?>
Note that the skin feature does NOT require using themes. However, when a theme is active, Yii will also look for skins under the skins
directory of the theme's view directory (e.g.WebRoot/themes/classic/views/skins
). In case a skin with the same name exists in both the theme and the main application view directories, the theme skin will take precedence.
위젯이 존재하지 않는 스킨을 사용하는 경우 Yii는 오류 없이 평소대로 위젯을 생성합니다.
정보: 스킨을 사용하면 성능이 저하될 수 있습니다. Yii는 위젯을 처음 생성할 때 스킨 파일을 찾아야 하기 때문입니다.
스킨은 전역 위젯 사용자 정의 기능과 매우 유사합니다. 주요 차이점은 다음과 같습니다.
스킨은 표시 속성 값의 사용자 정의와 더 관련이 있습니다.
위젯은 여러 스킨을 가질 수 있습니다.
스킨은 테마를 지정할 수 있습니다.
스킨을 사용하는 것은 전역 위젯 사용자 정의를 사용하는 것보다 비용이 더 많이 듭니다.
以上就是Yii框架官方指南系列44——专题:Theming(主题)的内容,更多关内容请关注PHP中文网(www.php.cn)!