【发布时间】:2019-06-09 21:57:21
【问题描述】:
在主题之间共享部分的简单方法是什么。资产是可能的,但我对整个部分有问题。我有一个由子域策略/逻辑管理/激活的多主题站点。
解决方案 /** * * 在此组件的上下文中呈现请求的部分, * 有关用法,请参阅 Cms\Classes\Controller@renderPartial。 */
/**
* @param $themeName
* @param $partialName
* @param $data
* @return mixed
* @throws \Cms\Classes\CmsException
*/
public function renderThemePartial($partialName, $themeName, $data)
{
$theme = Theme::getActiveTheme();
if($themeName) {
$theme = Theme::load($themeName);
}
$controller = new Controller($theme);
return $controller->renderPartial($partialName, $data);
}
/**
*
* Renders a requested content in context of this component,
* see Cms\Classes\Controller@renderContent for usage.
*/
/**
* @param $themeName
* @param $contentName
* @param $data
* @return string
* @throws \Cms\Classes\CmsException
*/
public function renderThemeContent($contentName, $themeName, $data)
{
$theme = Theme::getActiveTheme();
if($themeName) {
$theme = Theme::load($themeName);
}
$controller = new Controller($theme);
return $controller->renderContent($contentName, $data);
}
public function registerMarkupTags()
{
return [
'functions' => [
'partial_from_theme' => [$this, 'themePartial'],
'content_from_theme' => [$this, 'themeContent'],
],
'filters' => [
'theme_asset' => [$this, 'themeUrl']
]
];
}
/**
* @param $requested
* @return string
*/
public function themeUrl($requested)
{
$asset = $requested[0];
$theme = $requested[1];
$theme = Theme::load($theme);
$themeDir = $theme->getDirName();
if (is_array($asset)) {
$_url = Url::to(CombineAssets::combine($asset, themes_path().'/'.$themeDir));
}
else {
$_url = Config::get('cms.themesPath', '/themes').'/'.$themeDir;
if ($asset !== null) {
$_url .= '/'.$asset;
}
$_url = Url::asset($_url);
}
return $_url;
}
/**
* @param $partialName
* @param null $themeName
* @param array $parameters
* @return mixed
* @throws \Cms\Classes\CmsException
*/
public function themePartial($partialName, $themeName = null, $parameters = [])
{
return $this->renderThemePartial($partialName, $themeName, $parameters);
}
/**
* @param $contentName
* @param null $themeName
* @param array $parameters
* @return string
* @throws \Cms\Classes\CmsException
*/
public function themeContent($contentName, $themeName = null, $parameters = [])
{
return $this->renderThemeContent($contentName, $themeName, $parameters);
}
【问题讨论】:
标签: laravel octobercms