## 테마 조회
### 테마 아이디로 테마 조회하기
getTheme 메소드를 사용하여 테마 아이디로 테마를 조회할 수 있습니다.
php
$id = 'theme/myname@mytheme';
$theme = Theme::getTheme($id);
### 모든 테마 조회하기
getAllTheme 메소드를 사용하여 모든 테마 목록을 조회할 수 있습니다.
php
$themes = Theme::getAllTheme();
만약 모바일이나 데스크탑 버전을 지원하는 테마 목록을 조회하려면 getAllThemeSupportingMobile, getAllThemeSupportingDesktop 메소드를 사용하십시오.
php
$mobileThemes = Theme::getAllThemeSupportingMobile();
$desktopThemes = Theme::getAllThemeSupportingDesktop();
### 관리페이지용 테마 조회하기
XpressEngine은 관리페이지에서 사용되는 테마도 교체 가능합니다. 관리페이지용 테마도 ThemeHandler를 사용하여 조회할 수 있습니다.
하나의 관리페이지용 테마를 조회할 때에는 getTheme를 동일하게 사용할 수 있습니다.
php
$id = 'settingsTheme/myname@mysettingstheme';
$settingsTheme = Theme::getTheme($id)
모든 관리페이지용 테마 목록을 조회할 때에는 getAllSettingsTheme를 사용하십시오.
php
$settingsThemes = Theme::getAllSettingsTheme();
## 사용할 테마 지정하기
XpressEngine에서는 브라우저로부터 요청을 받을 때마다, 응답할 Html을 생성할 때 하나의 테마를 사용합니다.
이때 사용할 테마를 지정해주어야 합니다. (대부분의 경우 XpressEngine 코어에서 자동으로 사용할 테마를 지정해줍니다.)
### 특정 테마를 사용
특정 테마를 응답시 사용하려면 selectTheme 메소드를 사용하십시오.
php
$id = 'theme/myname@mytheme';
Theme::selectTheme($id);
### 사이트 기본 테마 사용하기
XpressEngine은 아무 테마도 사용할 테마로 지정돼 있지 않을 경우, 기본으로 사용할 테마를 지정해놓고 있습니다.
> 사이트관리페이지의 설정 > 사이트 기본설정 메뉴에서 지정할 수 있습니다.
사이트 기본 테마로 지정된 테마를 사용하고 싶을 경우에는 selectSiteTheme를 사용하십시오.
php
응답시 사이트 기본 테마가 사용됨
Theme::selectSiteTheme();
### 테마 사용 안하기
만약 응답시 아무 테마도 출력되지 않도록 하려면 selectBlankTheme 메소드를 사용할 수 있습니다. 테마를 사용하지 않을 경우 순수한 컨텐츠 영역만 출력됩니다.
php
응답시 테마 사용 안함.
Theme::selectBlankTheme();
### 지정된 테마 정보 조회
현재 요청에 대한 응답시 사용하기로 지정된 테마를 조회할 수 있습니다. getSelectedTheme 메소드를 사용하십시오.
php
$selected = Theme::getSelectedTheme();
## 테마 설정
테마는 사이트 제목, 로고, 출력할 메뉴와 같이 출력할 때 필요한 설정 정보를 사이트 관리자로부터 입력받을 수 있도록 설정 페이지를 제공합니다.
그리고 설정 페이지로부터 입력된 설정 정보를 ThemeHandler를 통해 데이터베이스에 저장하고, 저장된 정보를 조회할 수 있습니다.
> 설정 페이지에 대한 자세한 사항은 '테마 만들기' 매뉴얼을 참고하십시오.
### 테마 설정정보 조회하기
getThemeConfig 메소드를 사용하면 특정 테마의 설정 정보를 조회할 수 있습니다.
php
$id = 'theme/myname@mytheme';
$configs = Theme::getThemeConfig($id);
### 테마 설정정보 저장하기
반대로 setThemeConfig 메소드를 사용하면 특정 테마의 설정 정보를 조회할 수 있습니다.
php
$id = 'theme/myname@mytheme';
$configs = [
'site_title' => '내 사이트',
'main_menu' => $menuID,
];
Theme::setThemeConfig($id, $configs);
public function updateTheme(ThemeHandler $themeHandler, Request $request) { // resolve theme $theme = $request->only(['theme_desktop', 'theme_mobile']); $theme = ['desktop' => $theme['theme_desktop'], 'mobile' => $theme['theme_mobile']]; $themeHandler->setSiteTheme($theme); return \Redirect::back()->with('alert', ['type' => 'success', 'message' => '저장되었습니다.']); }
public function editSetting(MenuRetrieveHandler $menuHandler, SiteHandler $siteHandler, ThemeHandler $themeHandler) { $config = app('xe.site')->getSiteConfig(); $siteKey = $siteHandler->getCurrentSiteKey(); $indexInstance = $siteHandler->getHomeInstanceId(); $menus = $menuHandler->getAllMenu($siteKey); $selectedTheme = $themeHandler->getSiteThemeId(); return \Presenter::make('settings.setting', compact('config', 'selectedTheme', 'menus', 'indexInstance')); }
public function updateSetting(Request $request, ThemeHandler $themeHandler) { $this->validate($request, ['theme' => 'required']); $themeId = $request->get('theme'); $theme = $themeHandler->getTheme($themeId); if (!$theme->hasSetting()) { throw new NotSupportSettingException(); } $configInfo = $request->only('_configTitle', '_configId'); $inputs = $request->except('_token'); $inputs['_configId'] = $themeId; // 해당 테마에게 config를 가공할 수 있는 기회를 준다. $config = $theme->resolveSetting($inputs); $config = array_merge($configInfo, $config); $themeHandler->setThemeConfig($config['_configId'], $config); return redirect()->back()->with('alert', ['type' => 'success', 'message' => '저장되었습니다.']); }