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

хук на замену части кода в шаблоне


demvlg

Вопрос

допустим есть шаблон globalTemplate

есть так какойто код, к примеру <div id="blabla">...</div>

 

как можно с помощью хука эту часть шаблона, например с помощью регулярки, удалить?

собственно вопрос не каким образом удалить, а именно как через хук?

 

цель - вносить изменения в код шаблона, который останется при обновлении форума

заранее спасибо за помощь

 

если есть какие то мануалы и примеры по хукам шаблонов - буду рад,

а то на оффсайте ну очень скудный пример

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

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

  • 0

Да не в активности дело... Подобное "простое описание" минимум на пару страниц потянет :)

 

Если совсем кратко:

 

1. Надо заменить вывод globalTemplate. Ищем одноименную функцию в кэш-файлах скина (/forum/cache/skin_cache/cacheid_1). Находим её в skin_global.php:

function globalTemplate($html, $documentHeadItems, $css, $jsModules, $metaTags, $header_items=array(), $items=array(), $footer_items=array(), $stats=array()) {

 

2. Придумываем два параметра:

- название хука (желательно просто текст, без каких-либо симовлов) - например: "Sexy Hook"

- класс для хука (только латиница и знак "_") - например "sexy_hook".

 

3. Вычисляем один параметр:

- длина навзания группы скинов - skin_global.php => skin_global = 11 символов.

 

Теперь создаем файл:

<?xml version="1.0" encoding="utf-8"?>
<hookexport>
 <hookdata>
   <config>
     <hook_name>Sexy Hook</hook_name>
     <hook_desc/>
     <hook_author>Вася Пупкин</hook_author>
     <hook_email>vasya@pupkin.ru</hook_email>
     <hook_website>http://pupkin.ru/</hook_website>
     <hook_update_check/>
     <hook_requirements><![CDATA[a:4:{s:20:"hook_ipb_version_min";i:0;s:20:"hook_ipb_version_max";i:0;s:20:"hook_php_version_min";s:0:"";s:20:"hook_php_version_max";s:0:"";}]]></hook_requirements>
     <hook_version_human>1.0.0</hook_version_human>
     <hook_version_long>100000</hook_version_long>
     <hook_extra_data/>
     <hook_key>sexy_hook</hook_key>
   </config>
 </hookdata>
 <hookfiles>
   <file>
     <hook_file_real>sexy_hook.php</hook_file_real>
     <hook_type>skinHooks</hook_type>
     <hook_classname>sexy_hook</hook_classname>
     <hook_data><![CDATA[a:7:{s:12:"dataLocation";s:0:"";s:15:"classToOverload";s:11:"skin_global";s:9:"skinGroup";N;s:12:"skinFunction";N;s:4:"type";N;s:2:"id";N;s:8:"position";N;}]]></hook_data>
     <hooks_source><![CDATA[class sexy_hook extends skin_global(~id~)
{
   function globalTemplate($html, $documentHeadItems, $css, $jsModules, $metaTags, $header_items=array(), $items=array(), $footer_items=array(), $stats=array())
   {
       // Получаем вывод от оригинальной функции
       $code = parent::globalTemplate($html, $documentHeadItems, $css, $jsModules, $metaTags, $header_items, $items, $footer_items, $stats);

       // Портим его      
       $code = str_replace("foo", "bar", $code);

       // Возвращаем
       return $code;
   }    
}]]></hooks_source>
   </file>
 </hookfiles>
 <hookextras_settings/>
 <hookextras_language/>
 <hookextras_modules/>
 <hookextras_help/>
 <hookextras_templates/>
 <hookextras_css/>
 <hookextras_tasks/>
 <hookextras_database_create/>
 <hookextras_database_alter/>
 <hookextras_database_update/>
 <hookextras_database_insert/>
</hookexport>

 

Все, собственно. Сохраняем как xml, импортируем.

 

Строки, на которые следует обратить внимание:

 

1. Тут мы подставляем имя класса для хука:

     <hook_key>sexy_hook</hook_key>

 

2. Имя файла хука может быть любым, но логично так же подставить имя класса, и не забыть .php:

      <hook_file_real>sexy_hook.php</hook_file_real>

 

3. Собственно имя класса:

      <hook_classname>sexy_hook</hook_classname>

 

4. Очень важное место:

      <hook_data><![CDATA[a:7:{s:12:"dataLocation";s:0:"";s:15:"classToOverload";s:11:"skin_global";s:9:"skinGroup";N;s:12:"skinFunction";N;s:4:"type";N;s:2:"id";N;s:8:"position";N;}]]></hook_data>

Тут мы подставляем сразу два значения:

s:11:"skin_global"
- "11" - это вычисленная нами длина названия группы,
- "skin_global" - собственно название группы шаблонов.

 

5. Тут мы подставляем сразу и имя класса, и имя группы, и не забываем (~id~):

      <hooks_source><![CDATA[class sexy_hook extends skin_global(~id~)

 

6. Это - целиком копия описания функии из кэш-файлов:

    function globalTemplate($html, $documentHeadItems, $css, $jsModules, $metaTags, $header_items=array(), $items=array(), $footer_items=array(), $stats=array())

 

7. А дальше - оно же, но с убранными переопределениями значений (а то входящие на шаблон данные будут затираться):

        $code = parent::globalTemplate($html, $documentHeadItems, $css, $jsModules, $metaTags, $header_items, $items, $footer_items, $stats);

 

Инжой...

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

  • 0
судя по активности здесь мы его не увидим никогда

Посмотрите у меня на форуме, часть документации есть в справочнике.

 

Касаемо замены: Лучше (а если она ограничена <!--hook....-->, т.е. именованным условием или циклом - проще) использовать replaceOutput вместо getOutput в хуках шаблонов. Рабочий пример (вики обязательно посмотрите, т.к. до 3.1.3 есть бага).

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

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

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

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

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

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

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

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

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

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

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

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