Posted 27 мая, 20195 yr comment_157307 Я правильно понимаю, что штатными возможностями движка невозможно полностью заменить шаблон или внести изменения в код, который не закрыт в какой-то контейнер? Типа ссылку в примере ниже поменять невозможно в принципе? <div class="zzz"><h1 class="www">Title</h1></div> <a href="...">Ссылка</a> <div class='xxx'>{$table}</div> Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/ Share on other sites Больше вариантов
27 мая, 20195 yr comment_157308 Заменить шаблон полностью можно, а вот часть кода без контейнера - вряд ли получится. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157308 Share on other sites Больше вариантов
27 мая, 20195 yr comment_157310 Заменить что угодно в выводе ничто не мешает и штатными средствами PHP. Например хуком для класса \IPS\Output: public function sendOutput( $output='', $httpStatusCode=200, $contentType='text/html', $httpHeaders=array(), $cacheThisPage=TRUE, $pageIsCached=FALSE, $parseFileObjects=TRUE, $parseEmoji=TRUE ) { if( preg_match( '#<div\sclass="zzz"><h1\sclass="www">Title</h1></div>\n?\r?(<a[^<>]*</a>)#s', $output, $match ) ) { $replace = '<!--my_replece_code-->'; $output = str_replace( $match[1], $replace, $output ); } parent::sendOutput( $output, $httpStatusCode, $contentType, $httpHeaders, $cacheThisPage, $pageIsCached, $parseFileObjects, $parseEmoji ) } Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157310 Share on other sites Больше вариантов
27 мая, 20195 yr comment_157312 В регулярке лишняя треугольная закрывающая скобка, на коленке писал... Правильно - '#<div\sclass="zzz"><h1\sclass="www">Title</h1></div>\n?\r?(<a[^<]*</a>)#s'. С ней в общем-то варианты возможны. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157312 Share on other sites Больше вариантов
27 мая, 20195 yr Author comment_157319 7 часов назад, Respected сказал: Заменить шаблон полностью можно, а вот часть кода без контейнера - вряд ли получится. Как, если у шаблона нет контейнера? В штатных средствах хуков 4.х нет такой фичи. Dmitriy427 preg_match на весь вывод, шаблон в коде.. А если там на пару-тройку строк фрагмент в неуникальных селекторах? Не, не наш метод. Но за идею спасибо. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157319 Share on other sites Больше вариантов
27 мая, 20195 yr comment_157320 Desti то есть? Что за шаблон? Стандартно выбираешь шаблон в theme plugin и перегружаешь полностью шаблон. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157320 Share on other sites Больше вариантов
27 мая, 20195 yr Author comment_157321 4 минуты назад, Respected сказал: и перегружаешь полностью шаблон. Или я что-то не понял, или.. Я не выбираю шаблон в theme plugin, я выбираю группу шаблонов, а в самом хуке все действия с шаблонами только по селекторам css, Или поясните. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157321 Share on other sites Больше вариантов
27 мая, 20195 yr comment_157322 А что собственно мешает выбрать нужный элемент селекторами? Где сказано что элемент должен быть в каком-то контейнере? Ссылку можно выбрать по аттрибуту href, можно в порядке следования. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157322 Share on other sites Больше вариантов
27 мая, 20195 yr Author comment_157324 Только что, siv1987 сказал: А что собственно мешает выбрать нужный элемент селекторами? Отсутствие оных. Например, такое.. {{if count( $featured )}} {template="featuredEntries" group="browse" params="$featured"} {{endif}} Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157324 Share on other sites Больше вариантов
27 мая, 20195 yr comment_157325 Ну так хукать нужно там где он находится, очевидно это шаблон featuredEntries Можно в крайнем случае перегрузить нужный шаблон и выполнить замену по регулярному выражению. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157325 Share on other sites Больше вариантов
27 мая, 20195 yr Author comment_157327 28 минут назад, siv1987 сказал: Ну так хукать нужно там где он находится, очевидно это шаблон featuredEntries А мне не надо хукать featuredEntries. Вот простой пример, надо перенести indexButtons внутрь div-а и поставить его после h1. <div class="ipsPageHeader ipsClearfix ipsSpacer_bottom ipsPageHeader--blogs"> <h1 class="ipsType_pageTitle">{lang="blogs"}</h1> </div> {template="indexButtons" group="browse" params="$blogs, $viewMode"} Я не спрашиваю, как это можно еще сделать, я выясняю встроенные возможности. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157327 Share on other sites Больше вариантов
27 мая, 20195 yr comment_157328 2 часа назад, Desti сказал: preg_match на весь вывод, шаблон в коде.. А если там на пару-тройку строк фрагмент в неуникальных селекторах? Не, не наш метод. Очевидно, это не Ваш метод, поскольку регулярные выражения Вам изучать влом. Но это метод использующийся IPS, в том же sendOutput весь вывод прогняетяся через регулярки методами parseOutputForDisplay, parseFileObjectUrls, replaceEmojiWithImages. К тому же это только пример, делайте замены с нужным шаблоном - \IPS\Theme\Template, никто против не будет. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157328 Share on other sites Больше вариантов
28 мая, 20195 yr comment_157330 Хук для класса \IPS\Theme: public function getTemplate( $group, $app=NULL, $location=NULL ) { if( $group == 'my_group' and $app == 'my_app' and $location == 'my_location' ) { $template = parent::getTemplate( $group, $app, $location ); $search = preg_match( 'my_pattern', $template, $match ) ? $match[1] : false; if( $search ) { $replace = '<!--my_replece_code-->'; $template = str_replace( $search, $replace, $template ); } return $template; } return parent::getTemplate( $group, $app, $location ); } Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157330 Share on other sites Больше вариантов
28 мая, 20195 yr Author comment_157333 Dmitriy427 Что бы я без вас делал.. Вот только я снова уточняю, меня интересует вполне конкретный инструмент, Theme Hook и его возможности, а не ваш бесценный опыт в написании банальных регулярок. Убедительная просьба на влезать в мои темы со своими ответами, если у вас возникают сомнения, что вы правильно прочитали и смогли понять вопрос. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157333 Share on other sites Больше вариантов
28 мая, 20195 yr comment_157334 Да, не вопрос. Я просто забыл, что сталкивался уже с Вашим примечательным ЧСВ и обещал не мешать самовыражаться. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157334 Share on other sites Больше вариантов
28 мая, 20195 yr Author comment_157336 2 минуты назад, Dmitriy427 сказал: и обещал Надеюсь, мы больше не пересечемся, вы сможете-таки сдержать обещание. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157336 Share on other sites Больше вариантов
28 мая, 20195 yr comment_157337 12 часов назад, Desti сказал: А мне не надо хукать featuredEntries. Вот простой пример, надо перенести indexButtons внутрь div-а и поставить его после h1. <div class="ipsPageHeader ipsClearfix ipsSpacer_bottom ipsPageHeader--blogs"> <h1 class="ipsType_pageTitle">{lang="blogs"}</h1> </div> {template="indexButtons" group="browse" params="$blogs, $viewMode"} Я не спрашиваю, как это можно еще сделать, я выясняю встроенные возможности. В последних версиях шаблон выглядит несколько иначе: <div class="ipsPageHeader ipsClearfix ipsSpacer_bottom ipsHeaderButtons"> {{if \count( $blogs ) || \IPS\blog\Blog::canCreate() || \IPS\Settings::i()->blog_allow_grid}} <ul class='ipsToolList ipsToolList_horizontal ipsClearfix ipsPos_right'> {template="indexButtons" group="browse" params="$blogs, $viewMode"} </ul> {{endif}} <h1 class="ipsType_pageTitle">{lang="blogs"}</h1> </div> Здесь как раз можно выбрать родительский элемент - ipsPageHeader Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157337 Share on other sites Больше вариантов
28 мая, 20195 yr comment_157339 12 часов назад, Desti сказал: Я не спрашиваю, как это можно еще сделать, я выясняю встроенные возможности. "Встроенная возможность" чтобы перенести один шаблон внутри другого одной настройкой нету. Есть возможность перегрузить шаблон, есть возможность вставить в шаблон через селекторы. Исходя из этих возможностей вы и разрабатываете логику хука. Сделать это можно как первым методом чере регулярные выражения, так и вторым через вставку разных блоках. Есть конечно и третий - правка шаблона если вы переверстываете скин. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157339 Share on other sites Больше вариантов
28 мая, 20195 yr Author comment_157342 Respected Я пока не переехал на свежую версию, да и код я привел только в качестве примера. Там, где есть контейнер с классами, вопросов не возникает. 3 часа назад, siv1987 сказал: Есть возможность перегрузить шаблон Третий раз это слышу.. Как?? Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157342 Share on other sites Больше вариантов
28 мая, 20195 yr comment_157347 3 часа назад, Desti сказал: Третий раз это слышу.. Как?? Шаблоны в IPS это функции, соответственно в хуке для шаблона перегружаете шаблон переопределением нужной функции. class hook149 extends _HOOK_CLASS_ { /* !Hook Data - DO NOT REMOVE */ public static function hookData() { return array_merge_recursive( array(), parent::hookData() ); } /* End Hook Data */ public function indexButtons($showViewButtons=TRUE, $showFilterButton=FALSE) { $html = parent::indexButtons($showViewButtons, $showFilterButton); return $html; } } Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157347 Share on other sites Больше вариантов
28 мая, 20195 yr Author comment_157348 siv1987 Теперь понял, про что вы, спасибо. Я думал, что это как-то возможно стандартными средствами управления Theme plugin, а не правкой кода плагина. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157348 Share on other sites Больше вариантов
28 мая, 20195 yr comment_157350 Центр разработки это лишь гуи для управления и правки "кодом плагина", и то и то являются стандартными средствами форума. Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157350 Share on other sites Больше вариантов
28 мая, 20195 yr Author comment_157352 В следующий раз буду более конкретно писать, что я имею ввиду. Вопрос был только про UI Link to comment https://ipbmafia.ru/topic/21385-theme-plugins/?&do=findComment&comment=157352 Share on other sites Больше вариантов
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.