Перейти к контенту
  • 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
Ссылка на комментарий
Поделиться на других сайтах

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

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

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

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

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

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

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

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

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