demvlg Опубликовано 13 Октября 2010 Жалоба Поделиться Опубликовано 13 Октября 2010 допустим есть шаблон globalTemplateесть так какойто код, к примеру <div id="blabla">...</div> как можно с помощью хука эту часть шаблона, например с помощью регулярки, удалить?собственно вопрос не каким образом удалить, а именно как через хук? цель - вносить изменения в код шаблона, который останется при обновлении форумазаранее спасибо за помощь если есть какие то мануалы и примеры по хукам шаблонов - буду рад,а то на оффсайте ну очень скудный пример Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Jess harrison Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 Я бы также хотел увидеть ответ. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 demvlg Опубликовано 20 Октября 2010 Автор Жалоба Поделиться Опубликовано 20 Октября 2010 судя по активности здесь мы его не увидим никогдабуржуям надо писать Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Ritsuka Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 (изменено) Да не в активности дело... Подобное "простое описание" минимум на пару страниц потянет Если совсем кратко: 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); Инжой... Изменено 20 Октября 2010 пользователем Ritsuka Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 LastDragon Опубликовано 21 Октября 2010 Жалоба Поделиться Опубликовано 21 Октября 2010 судя по активности здесь мы его не увидим никогдаПосмотрите у меня на форуме, часть документации есть в справочнике. Касаемо замены: Лучше (а если она ограничена <!--hook....-->, т.е. именованным условием или циклом - проще) использовать replaceOutput вместо getOutput в хуках шаблонов. Рабочий пример (вики обязательно посмотрите, т.к. до 3.1.3 есть бага). Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Вопрос
demvlg
допустим есть шаблон globalTemplate
есть так какойто код, к примеру <div id="blabla">...</div>
как можно с помощью хука эту часть шаблона, например с помощью регулярки, удалить?
собственно вопрос не каким образом удалить, а именно как через хук?
цель - вносить изменения в код шаблона, который останется при обновлении форума
заранее спасибо за помощь
если есть какие то мануалы и примеры по хукам шаблонов - буду рад,
а то на оффсайте ну очень скудный пример
Ссылка на комментарий
Поделиться на других сайтах
4 ответа на этот вопрос
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.