Перейти к контенту
  • 0

Что такое CS.TEMPLATE... и т.п.?


Вопрос

Объясните, пожалуйста, что означают записи вида <!--CS.TEMPLATE.POLL-->, <!--CS.TEMPLATE.AFFILIATES-->, <!--CS.TEMPLATE.RECENTARTICLES--> и прочие сиэс-темплэйты? Где именно они хранятся, чтобы посмотреть соответствующие им участки кода?
Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

ipb_templates.xml

 

Там ищи свои КЫЭСЫ.

 

См. также что-то типа:

tmpl_poll

tmpl_affiliates

tmpl_recentarticles

...

 

надеюсь понятно....

 

Т.е. открываешь файл в текстовом редакторе и "поиск"...

 

После внесения изменений в этот файл и обновлении его на сервере конфы, иди в админку:

 

Скины - Инструмент - Восстановить из Мастер-скина

Скины - Инструмент - Обновить ВСЕ скины

 

Наслаждайся...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Наблюдатель, спасибо!

 

ipb_templates.xml Там ищи свои КЫЭСЫ.

Да, там я их и находил, но не находил какой код им соответствует.

 

См. также что-то типа: tmpl_poll

Нахожу. Много нахожу. :D Что-то типа:

	 <template>
	 <group_name>skin_portal</group_name>
	 <section_content>$avatar</section_content>
	 <func_name>tmpl_wrap_avatar</func_name>
	 <func_data><![CDATA[$avatar=""]]></func_data>
 </template>

 

И всё. Никаких явно прописанных данных. Так же - по многим другим темплам. Правда нечто похожее на то, что я ищу в виде функций tmpl_... встречается в файлах скинкеша. Но не всё.

 

Где ещё оно может прятаться?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Не знаю точно, но сильно подозреваю, что переменные внутри tmpl "делаются" в директории /sources

 

А что конкретно ты хочешь получить от всего этого? Какое изменение собираешься вносить, каков предполагаемый результат?

Ссылка на комментарий
Поделиться на других сайтах

  • 0
А что конкретно ты хочешь получить от всего этого? Какое изменение собираешься вносить, каков предполагаемый результат?

Есть домен. В нём, допустим, две папки - галерея Копермайн и Инвижен-боард. Вне этих папок предполагается сделать php-скрипт - библиотечку функций, например:

funcction siteheader() {}

funcction button_begin() {}

function button_end() {}

funcction sitedinamicbuttons() {}

.................

funcction sitefooter() {}

 

Смысл, имхо, понятен. Здесь собраны в виде функций динамические и статические фрагменты кода, общие для всего сайта, а не только для форума. Предполагается инклудить эту библиотечку в начало index.php галереи и форума. Остаётся вывести результаты этих функций в нужных местах. (легко сказать!) :D

 

А вот как вывести?! Ладно галерея - там хоть шаблон создаётся php-скриптом. А в инвижене скин сидит либо в базе данных, либо в мастер_шаблоне.xml. Ни там, ни там php-код не вставишь. Вот и пытаюсь понять, как исхитриться вставлять то что надо с помощью конструкций, аналогичных <!--CS.TEMPLATE.SITEHEADER-->...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Андрей Николаев

Все очень просто.

Я так понял, что эти CS та брал из шаблона портала...

Так вот в админке в настройках шаблонов каждому действию форума (если можно так сказать) соответствует своя группа.

То есть:

Forum Index - содержит шаблоны для вывода списка форумов (и всего с этим связанного)

Search - содержит шаблоны для вывода результатов поиска и окна запроса на поиск

и так далее.

Есть так же глобальные шаблоны используемые на всем форуме (All Global HTML) которые содержат хедеры, футеры и проч. всех страниц форума.

В папке /sources лежат PHP файлы с соответствующими именами (forums.php, search.php и т.д.) которые эти шаблоны и используют.

 

В твоем случае с порталом открываем файл ipbportal.php и находим такие строки:

    	$this->site_bits['welcomebox']     = $this->_show_welcomebox();
   	$this->site_bits['search']         = $this->_show_search();
   	$this->site_bits['changeskin']     = $this->_show_changeskin();

и далее...

Тут в массив заносятся результаты соответствующих функций. Вывод велкомбокса, сеарч бокса и так далее.

Находим далее:

        //-----------------------------------------
       // SITE REPLACEMENTS
       //-----------------------------------------

       foreach( $this->site_bits as $sbk => $sbv )
       {
       	$this->template = str_replace( "<!--CS.TEMPLATE.".strtoupper($sbk)."-->", $sbv, $this->template );
       }

А вот тут мы заменяем значения <!--CS....--> в шаблоне значениями из массива полученные в предыдущем упомянутом выше куске кода.

 

В портале это реалировано не совсем так как на остальном форуме. Но смысл надеюсь понятен.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

urisoft, спасибо!

Тут в массив заносятся результаты соответствующих функций. Вывод велкомбокса, сеарч бокса и так далее

Я так понял, что сюда нужно вставить аналогичные строки с моими новыми функциями? И эти функции должны быть уже заданы, отсюда они только вызываются, а результат их вносится в массив.

 

Как я уже сказал, мне хочется сделать внешнюю библиотечку функций. Куда бы вы посоветовали лучше её include`ть? В главный файл index.html или же в соответствующие файлы директории source? И в каком месте файла лучше вставлять инклуду?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Короче, ребята, ерунда какая-то выходит. Например, в файл ipbportal.php вставил, где надо, строку

     $this->site_bits['logostrip']      = $this->_show_logostrip();

Внизу этого файла, после функции _show_welcomebox() вставил

 	function _show_logostrip()
 	{
  echo "<div id=\"logostrip\">\n<table id=\"logostriptable\"><tbody><tr>\n  <td id=\"logoleft\"><img src=\"/images/skin/kipriankrest1.gif\" style=\"width: 90px; height: 90px; border: 0px;\" /></td>\n  <td id=\"sitetitle\"><img src=\"/images/skin/title_deviz.gif\" style=\"width: 97%; height: 90px; border: 0px;\" /></td>\n  <td id=\"logoright\"><img src=\"/images/skin/kipriankrest2.gif\" style=\"width: 90px; height: 90px; border: 0px;\" /></td>\n</tr></tbody></table>\n</div>";
 	}

В мастер_скине.xml вместо всего дива logostrip вставил

<!--CS.TEMPLATE.LOGOSTRIP-->

Обновил. Этот самый див логострип напичатан в html-коде страницы в самом начале. После него - доктайп. А в том месте кода страницы где и должен стоять див логострип - пустая строка.

 

Очевидно, как-то нужно ещё добавить что-то типа

return $this->html->tmpl_logostrip();

Но что писать в этом tmpl_logostrip мастерскина и как в него передать результат функции - вывод динамического html-кода?

 

Что именно означает команда вида

$this->html->tmpl_logostrip();

 

Дополнено:

Сделал так. Работает.

В файле ipbportal.php добавил внизу такую функцию:

 function _show_logostrip()
 {
 $html = "<div id=\"logostrip\">\n<table id=\"logostriptable\"><tbody><tr>\n  <td id=\"logoleft\"><img src=\"/images/skin/kipriankrest1.gif\" style=\"width: 90px; height: 90px; border: 0px;\" /></td>\n  <td id=\"sitetitle\"><img src=\"/images/skin/title_deviz.gif\" style=\"width: 97%; height: 90px; border: 0px;\" /></td>\n  <td id=\"logoright\"><img src=\"/images/skin/kipriankrest2.gif\" style=\"width: 90px; height: 90px; border: 0px;\" /></td>\n</tr></tbody></table>\n</div>";
 return $html;
 }

В мастер-скине среди группы skin_portal вставил фрагмент:

	 <template>
	 <group_name>skin_portal</group_name>
	 <section_content><![CDATA[$html]]></section_content>
	 <func_name>tmpl_logostrip</func_name>
	 <func_data></func_data>
 </template>

Изменено пользователем Андрей Николаев
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Андрей Николаев

Не совсем ты все правильно понял. :D

Во первых не нужно редактировать xml файлы. Добавлять/изменять шаблоны нужно через админку.

Во вторых на то он и есть HTML шаблон, чтоб не писать функции вида:

function _show_logostrip()
  {
 $html = "<div id=\"logostrip\">\n<table id=\"logostriptable\"><tbody><tr>\n  <td id=\"logoleft\"><img src=\"/images/skin/kipriankrest1.gif\" style=\"width: 90px; height: 90px; border: 0px;\" /></td>\n  <td id=\"sitetitle\"><img src=\"/images/skin/title_deviz.gif\" style=\"width: 97%; height: 90px; border: 0px;\" /></td>\n  <td id=\"logoright\"><img src=\"/images/skin/kipriankrest2.gif\" style=\"width: 90px; height: 90px; border: 0px;\" /></td>\n</tr></tbody></table>\n</div>";
 return $html;
  }

 

Ниже, то что ты написал в предыдущем посте с использованием правильной работы IPB.

 

Добавление HTML шаблона.

1.

Админка -> Skin & Templates -> Skin Manager -> IPB Default Skin -> Edit Root Skin Template HTML -> IPB Portal.

Нажми Add Template Bit

Заполняем поля:

New Template Bit Name: tmpl_logostrip

New Template Bit Incoming Data Variables:

New Template Bit Group... skin_portal

Or Create New Group...

В поле ввода добавляем:

<div id="logostrip">
<table id="logostriptable">
 <tbody>
  <tr>
   <td id="logoleft"><img src="/images/skin/kipriankrest1.gif" style="width: 90px; height: 90px; border: 0px;" /></td>
   <td id="sitetitle"><img src="/images/skin/title_deviz.gif" style="width: 97%; height: 90px; border: 0px;" /></td>
   <td id="logoright"><img src="/images/skin/kipriankrest2.gif" style="width: 90px; height: 90px; border: 0px;" /></td>
  </tr>
 </tbody>
</table>
</div>

Нажимаем Save Template Bit

 

2.

Админка -> Skin & Templates -> Skin Manager -> IPB Default Skin -> Edit Root Skin Template HTML -> IPB Portal.

Находим в списке csite_skeleton_template и нажимаем на него (откроется окно для редактирования)

Находим:

<!--CS.TEMPLATE.SEARCH-->

 

Добавим ниже:

<!--CS.TEMPLATE.LOGOSTRIP-->

 

 

Добавление кода.

Открываем файл ipbportal.php

Находим:

     $this->site_bits['articles']       = $this->_show_articles();
     $this->site_bits['affiliates']     = $this->_show_affiliates();

 

Добавляем ниже:

 $this->site_bits['logostrip']      = $this->_show_logostrip();

 

Находим:

}

?>

Добавляем выше:

	function _show_logostrip()
{
 global $ibforums;

 return $this->html->tmpl_logostrip();
}

 

Все.

Описан частный случай и только для примера.

Естественно можно и не создавать функцию _show_logostrip, а сразу написать $this->site_bits['logostrip'] = $this->html->tmpl_logostrip();

Надеюсь теперь будет более понятно. ;)

Ссылка на комментарий
Поделиться на других сайтах

  • 0

urisoft, THANK YOU! Очень полезный мануал. Нигде на форуме ещё такого нет.

Учиться, учиться и ещё раз - лечиться! :D © не-Ленин

 

Во первых не нужно редактировать xml файлы. Добавлять/изменять шаблоны нужно через админку.

Я знаю. Но у меня не планируется иметь для сайта более одного скина. Поэтому предпочитаю крушить ;) в FAR`е сразу мастер-скин, а потом - перестраивать из него базу и скин-кеши.

 

Заполняем поля: New Template Bit Name: tmpl_logostrip New Template Bit Incoming Data Variables: New Template Bit Group... skin_portal Or Create New Group... В поле ввода добавляем:

Как я уже говорил, мне нужно не просто добавить новый html-фрагмент в шаблон. Но - динамический код. Например - динамическое меню, разное для разных разделов.

Это самое меню, и не только оно, предположим, программируется в отдельном файле inc_global.php. Там же весь готовый код этого меню загоняется в одну переменную, допустим, $dinamic_menu = "строка кода"; далее в сурс-файле, например ipbportal.php, в самом начале, перед кодом класса, вставляю

require_once( $_SERVER['DOCUMENT_ROOT']."/inc/inc_global.php" );

И внизу:

function _show_dinamicmenu() { global $dinamic_menu; return $dinamic_menu; }

В мастер-скине запись такая:

	 <template>
	 <group_name>skin_portal</group_name>
	 <section_content><![CDATA[$dinamic_menu]]></section_content>
	 <func_name>tmpl_dinamicmenu</func_name>
	 <func_data></func_data>
 </template>

 

С учётом этой записи в мастер-скине и написанного Вами, будет ли правильным, если я вместо

function _show_dinamicmenu() { global $dinamic_menu; return $dinamic_menu; }

напишу

function _show_dinamicmenu() { global $ibforums, $dinamic_menu; return $this->html->tmpl_dinamicmenu(); }

 

Естественно можно и не создавать функцию _show_logostrip, а сразу написать $this->site_bits['logostrip'] = $this->html->tmpl_logostrip();

А как сделать то же для

$this->site_bits['dinamicmenu'] = $this->html->tmpl_dinamicmenu();

Надо ведь как-то включить в область видимости инклуженную переменную $dinamic_menu, наподобие - global $dinamic_menu; Может нужно написать вместо

    function auto_run()
    {
 global $ibforums, $DB, $std, $print, $forums;

это

    function auto_run()
    {
 global $ibforums, $DB, $std, $print, $forums, $dinamic_menu;

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Андрей Николаев

Я знаю. Но у меня не планируется иметь для сайта более одного скина. Поэтому предпочитаю крушить  в FAR`е сразу мастер-скин, а потом - перестраивать из него базу и скин-кеши.

Будет удобнее найти на этом форуме объяснение, как выполнить синхронизацию базы с PHP файлами (Rebuild from PHP templates) и править код в РНР файлах. А xml всегда успеется сделать, экспортнув его из админки. Не удобно же писать в xml :D

 

Если большая часть вставляемого кода является не повторяемым, то вполне разумно будет не вставлять его вообще в шаблоны.

Я бы делал так:

1. Создал файл inc_global.php в котором описал бы класс генерирующий нужное мне меню в зависимости от: текущей страницы, пользователя, либо других параметров. Причем если используется этот класс в пределах форума, то вполне допустимо в нем использовать глобальные переменные (классы) форума ($ibforums, $std, $print, $DB, etc.).

 

2. Вставил бы в шаблоны только место вывода результатов работы моего класса. (типа <!-CS....-->)

 

3. Инклюдил бы мой класс непосредственно в auto_run'е файла ipbportal.php:

......

require (inc_global.php);

$my_menu = new my_dynamenu(); // класс назван my_dynamenu

......

 

$this->site_bits['my_menu'] = $my_menu->generate_menu(); // в классе описана функция generate_menu, результатом выполнения которой является HTML код.

 

Вот так примерно....

 

Только стоит еще раз подчеркнуть, что на всем остальном форуме используется немного другая структура работы с шаблонами. Но замена ключевых слов типа <!--MY_KEY--> реализована очень похоже.

 

С учётом этой записи в мастер-скине и написанного Вами, будет ли правильным, если я вместо

function _show_dinamicmenu() { global $dinamic_menu; return $dinamic_menu; }

напишу

function _show_dinamicmenu() { global $ibforums, $dinamic_menu; return $this->html->tmpl_dinamicmenu(); }

НЕТ.

Вы инклюдите файл. Результат инклюда я так понял оказывается в глобальной переменной $dinamic_menu, так при чем тут тогда $this->html->tmpl_dinamicmenu();.

 

Может нужно написать global $ibforums, $DB, $std, $print, $forums, $dinamic_menu;

Да.

 

Вообще это вопросы не столько по форуму, сколько по азам PHP.

Почитайте мануалы, будет легче разобраться, что, где и как происходит.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Вы очень подробно и понятно всё описали.

Помогите тогда с такой функцией:

Как сделать чтобы в настрйоках форума с админцентре можно было включать/выключать добавленный модуль?

 

Новый вопрос = новая тема!!!

Какая связь между модулями и

-----------

Что такое CS.TEMPLATE... и т.п.?

-----------

 

Я считаю связь проста.

К тому, что обсуждали в данной теме, т.е. созданию отдельного блока для IPB Portal добавить функцию включения / выключения этого блока. Я думаю так будет удобнее посетителям.

Изменено пользователем T04ka
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.