Мультидоменность – замена макроса content (tpl) — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «Если необходимо, чтобы на втором домене системы, при использовании в шаблонах страниц мак…»)
 
 
(не показаны 2 промежуточные версии 1 участника)
Строка 34: Строка 34:
 
Вызов, вместо макроса %content%, следующий:
 
Вызов, вместо макроса %content%, следующий:
 
<pre>
 
<pre>
%content 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-шаблонам.