Головна » Блоги » InstantCMS - переваги та недоліки системи » Свої файли шаблону для окремих записів типу контенту

Свої файли шаблону для окремих записів типу контенту

0
Голосів: 0
Опубліковано: 2020 / 08 / 16
Переглядів: 348
Редагувалося: 9 раз — останній 26 серпня 2020
Досить часто виникає необхідність в виведенні окремих записів типу клнтенту (ТК) інакше від інших записів. На щастя в InstantCMS 2-х, починаючи з версіії 2.11.0, де-які можливості для вирішення такої задачі вже є в "коробці".

Варіант №1: коли нам потрібний окремий шаблон для всіх записів ТК

Для вирішення такої задачі, створюємо в папці "content" актуального шаблону файл news_item.tpl.php, де "news" - системне ім'я потрібного ТК.
Більше робити нічого не потрібно (система підхопить його автоматично)

Варіант №2: коли нам потрібна можливість обирати шаблон для окремих записів ТК

В такому випадку сторюємо в тій же папці файл news_item_new.tpl.php, де news - системне ім'я потрібного ТК, new - довільна назва. Таких файлів можна створити кілька.
Після цього при додаванні чи редагуванні зпису в цьому ТК у адміністраторів стане доступна опція вибору шаблона.

Варіант №3: нам потрібні свої шаблони для окремих записів ТК, які будуть підключатися автоматично

Такої можливості в системі не існує, але ми спробуємо її організувати одразу в 2-х варіантах.

Можна зробити через додаткове поле в потрібному ТК.
1.Створимо поле типу список (не виводимо його ніде, доступ для редагування, - кому потрібно) з такими опціями:
var1
var2
var3
2. Створимо в тій же папці "content" такі файли:
news_item.tpl.php, де "news" - системне ім'я потрібного ТК (шаблон по замовчуванню)
news_item_var1.tpl.php, news_item_var2.tpl.php, news_item_var3.tpl.php (шаблони додаткові)
В файлі news_item.tpl.php розмістимо такий код:
Код PHP:
  1.  
  2. <?
  3. $ctype_name = $item['ctype_name'];
  4. $template_name = $fields['template_item']['handler']->setItem($item)->parse( $item['template_item'] );
  5. $include_file = PATH.'/templates/default/content/'.$ctype_name.'_item_'.$template_name.'.tpl.php';
  6. ?>
  7. <?php if (file_exists($include_file)) { ?>
  8. <?php include $include_file ; ?>
  9. <?php } else { ?>
  10. Тут шаблон запису по замовчуванню
  11. <?php } ?>
  12.  
Тепер ті, кому ми дозволили редагувати поле, зможуть обирати інший шаблон

Можна зробити з умовою по URL
Такий варіант підійде, наприклад, в тому випадку, коли в різних ТК є записи, які мають певний URL, що співпадає і ці записи потрібно вивести інакше, але може бути використаний і в межах одного ТК.
1. Зробимо копії файлу default_item.tpl.php з такми назвами:
about_item.tpl.php, rules_item.tpl.php, де "about" та "rules" - URL записів
2. В default_item.tpl.php розмітимо код:
Код PHP:
  1.  
  2. <?
  3. $core = cmsCore::getInstance();
  4. $uri = $core->uri;
  5. $uri_arr = explode('/', $uri);
  6. $last_segment = array_pop($uri_arr);
  7. $item_uri_anchor = explode('.', $last_segment);
  8. $include_file = PATH.'/templates/default/content/'.$item_uri_anchor[0].'_item.tpl.php';
  9. ?>
  10. <?php if (file_exists($include_file)) { ?>
  11. <?php include $include_file ; ?>
  12. <?php } else { ?>
  13. Тут звичайний код файлу
  14. <?php } ?>
  15.  
Наші файли будуть підключатися автоматично для записів, URL яких закінчується на "about.html" або "rules.html". Будьте уважні! Перший сегмент назв файлів не повинен співпадати з системними іменами існуючих ТК.
Якщо використати цей варіант для окремого ТК, то умову на підключення слід робити в файлі news_item.tpl.php, де "news" - системне ім'я потрібного ТК.
На цім все.
Миру та здоров'я вам!

Читайте також:

Коментарі (1)
Олег Васильович я # 16 серпня 2020 у 22:26 +1
Ще про категорії колись напишу подібне...