Мультидоменность – замена макроса content (tpl) — различия между версиями
Материал из Umicms
VITL' (обсуждение | вклад) |
Mad grant (обсуждение | вклад) |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 36: | Строка 36: | ||
%custom customcontent('default_sait2')% | %custom customcontent('default_sait2')% | ||
</pre> | </pre> | ||
+ | |||
+ | |||
+ | Если необходимо менять шаблон в зависимости от того, в каком разделе сайта в текущий | ||
+ | момент находится посетитель, то необходимо использовать немного другой метод: | ||
+ | <source lang="php"> | ||
+ | public function customcontent($id){ | ||
+ | |||
+ | $page_id = (int) $id; | ||
+ | // массив родительских страниц относительно $page_id | ||
+ | $parents = umiHierarchy::getInstance()->getAllParents($page_id, true); | ||
+ | // 45 - page_id раздела, для страниц которого нужно использовать шаблон 'default2' | ||
+ | if(in_array(45, $parents)) $tpl = 'default2'; | ||
+ | if(in_array(135, $parents)) $tpl = 'default3'; | ||
+ | if(in_array(500, $parents)) $tpl = 'default4'; | ||
+ | $cmsController = cmsController::getInstance(); | ||
+ | $current_domain_id = $cmsController->getCurrentDomain(); | ||
+ | $current_module = $cmsController->getCurrentModule(); | ||
+ | $current_method = $cmsController->getCurrentMethod(); | ||
+ | $mod_met = $current_module . "-" . $current_method; | ||
+ | switch($mod_met){ | ||
+ | |||
+ | case 'catalog-category': | ||
+ | $ini = cmscontroller::getInstance()->getModule('catalog'); | ||
+ | return $ini->category($tpl); | ||
+ | break; | ||
+ | case 'catalog-object': | ||
+ | $ini = cmscontroller::getInstance()->getModule('catalog'); | ||
+ | return $ini->object($tpl); | ||
+ | break; | ||
+ | case 'news-rubric': | ||
+ | $ini = cmscontroller::getInstance()->getModule('news'); | ||
+ | return $ini->rubric("", $tpl); | ||
+ | break; | ||
+ | case 'news-item': | ||
+ | $ini = cmscontroller::getInstance()->getModule('news'); | ||
+ | $element_id = (int) $cmsController->getCurrentElementId(); | ||
+ | return $ini->view($element_id, $tpl); | ||
+ | break; | ||
+ | default: | ||
+ | return "%content%"; | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | Вызов макроса будет таким: %custom customcontent(%id%)% | ||
+ | |||
+ | где %id% - id текущей страницы. В блоке: | ||
+ | <pre> | ||
+ | if(in_array(45, $parents)) $tpl = 'default2'; | ||
+ | if(in_array(135, $parents)) $tpl = 'default3'; | ||
+ | if(in_array(500, $parents)) $tpl = 'default4'; | ||
+ | </pre> | ||
+ | |||
+ | необходимо настроить соответствия разделам сайта и tpl-шаблонам. | ||
+ | |||
+ | [[Категория:Верстка в TPL]][[Категория:Написание кастомных макросов]] |
Текущая версия на 20:21, 4 июня 2013
Если необходимо, чтобы на втором домене системы, при использовании в шаблонах страниц макроса %content%, использовался шаблон не default.tpl, то для этой задачи можно воспользоваться кастомным макросом, который пропишем в файле classes/modules/custom.php. Макрос настроен для страниц типа Новость, Лента новостей, Раздел каталога, Объект каталога.
public function customcontent($tpl){
$cmsController = cmsController::getInstance();
$current_domain_id = $cmsController->getCurrentDomain();
$current_module = $cmsController->getCurrentModule();
$current_method = $cmsController->getCurrentMethod();
$mod_met = $current_module . "-" . $current_method;
switch($mod_met){
case 'catalog-category':
$ini = cmscontroller::getInstance()->getModule('catalog');
return $ini->category($tpl);
break;
case 'catalog-object':
$ini = cmscontroller::getInstance()->getModule('catalog');
return $ini->object($tpl);
break;
case 'news-rubric':
$ini = cmscontroller::getInstance()->getModule('news');
return $ini->rubric("", $tpl);
break;
case 'news-item':
$ini = cmscontroller::getInstance()->getModule('news');
$element_id = (int) $cmsController->getCurrentElementId();
return $ini->view($element_id, $tpl);
break;
default:
return "%content%";
}
}
Вызов, вместо макроса %content%, следующий:
%custom customcontent('default_sait2')%
Если необходимо менять шаблон в зависимости от того, в каком разделе сайта в текущий
момент находится посетитель, то необходимо использовать немного другой метод:
public function customcontent($id){
$page_id = (int) $id;
// массив родительских страниц относительно $page_id
$parents = umiHierarchy::getInstance()->getAllParents($page_id, true);
// 45 - page_id раздела, для страниц которого нужно использовать шаблон 'default2'
if(in_array(45, $parents)) $tpl = 'default2';
if(in_array(135, $parents)) $tpl = 'default3';
if(in_array(500, $parents)) $tpl = 'default4';
$cmsController = cmsController::getInstance();
$current_domain_id = $cmsController->getCurrentDomain();
$current_module = $cmsController->getCurrentModule();
$current_method = $cmsController->getCurrentMethod();
$mod_met = $current_module . "-" . $current_method;
switch($mod_met){
case 'catalog-category':
$ini = cmscontroller::getInstance()->getModule('catalog');
return $ini->category($tpl);
break;
case 'catalog-object':
$ini = cmscontroller::getInstance()->getModule('catalog');
return $ini->object($tpl);
break;
case 'news-rubric':
$ini = cmscontroller::getInstance()->getModule('news');
return $ini->rubric("", $tpl);
break;
case 'news-item':
$ini = cmscontroller::getInstance()->getModule('news');
$element_id = (int) $cmsController->getCurrentElementId();
return $ini->view($element_id, $tpl);
break;
default:
return "%content%";
}
}
Вызов макроса будет таким: %custom customcontent(%id%)%
где %id% - id текущей страницы. В блоке:
if(in_array(45, $parents)) $tpl = 'default2'; if(in_array(135, $parents)) $tpl = 'default3'; if(in_array(500, $parents)) $tpl = 'default4';
необходимо настроить соответствия разделам сайта и tpl-шаблонам.