Мультидоменность – замена макроса content (tpl)
Материал из Umicms
Если необходимо, чтобы на втором домене системы, при использовании в шаблонах страниц макроса %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-шаблонам.
