siv1987 2,627 11/21/2019 12:05 PM Нужно в одном месте шаблона вывести другой шаблон с предварительной обработки данных из первого шаблона. Как разделить php код от html шаблона и вставить это в шаблон? Вставить шаблон конечно проблем нет, но как выполнить php код с переменными из первого шаблона? Что-то на ум ничего не приходит. Share this post Link to post
siv1987 2,627 11/21/2019 01:15 PM Сумбурно описал задачу. В определенном месте шаблона нужно вывести свой кастомный html код. Задача вроде решается плагином типа template plugin. Но данные в этом html коде предварительно нужно обработать через php, например сделать вызов в бд по $article->author_id и сформировать на его основе html. Как сначала выполнить php код с переменными из нужного нам шаблона, не вставляя этот php код в наш кастомный html. В тройке был такой тип хука Template Hook с функцией getOutput, там можно было получить переменные шаблона где находится метка, выполнить какой нибудь php код, вызвать шаблон с этими данными и вернуть html результат. Как примерное тоже самое сделать здесь? Share this post Link to post
newbie 1,722 11/21/2019 01:21 PM В 4-ке нет меток. Если нужно получить переменные шаблона и сам html, то https://invisioncommunity.com/developers/docs/development/plugins/theme-hooks-r43/PHP Mode Share this post Link to post
siv1987 2,627 11/21/2019 01:41 PM Это я знаю, что теперь не используются метки а css селекторы. Я просто описал какой принцип мне нужен на основе примера с тройке. По селектору я могу вставить "template" html, но как перед этим еще бы выполнить какой нибудь php код с переменными которые находится в этом шаблоне? Целиком шаблон мне не особо нужен, нужно только в нем вставить свой блок. В php mode я так понимаю могу перегрузить целиком шаблон но мне бы не хотелось бы потом по регулярному выражению или через замену по html тегам вставить свой блок. Пока мне видеться такой вариант, через theme hook по селектору добавляем свою метку в нужном месте, потом перегружаем шаблон, получаем html и заменяем метку на наш html. Пишу с телефона, добавить фрагменты кода для наглядности не могу. Share this post Link to post
newbie 1,722 11/21/2019 01:55 PM По селектору я могу вставить "template" html, но как перед этим еще бы выполнить какой нибудь php код с переменными которые находится в этом шаблоне?Так переменные же доступныpublic static function hookData() { return array_merge_recursive( array ( 'postContainer' => array ( 0 => array ( 'selector' => 'article', 'type' => 'add_before', 'content' => ' Тут можно использовать переменные шаблона postContainer: $item, $comment, $votes, $otherClasses. Тут и выполняйте php код. {template="someTemplate" group="plugins" location="global" app="core" params=""}', ), ), ), parent::hookData() ); } Share this post Link to post
siv1987 2,627 11/21/2019 02:01 PM Да, все верно, но 'content' это template code, а мне там еще нужно выполнить большую портянку php кода. Как это сделать в шаблоне? Создать отдельный метод потом его вызвать в шаблоне через {expression}? Вот в чем вопрос. Хочется чистый html отделить от моего php кода. Share this post Link to post
siv1987 2,627 11/21/2019 02:10 PM Думаешь сработает? А метод какого класса, и как к нему обратится?.. Share this post Link to post
siv1987 2,627 11/21/2019 05:07 PM С отдельным методом не получилось, не могу понять какой класс захукать, или где его создать. Остановился пока на таком варианте. Если есть еще идеи готов выслушать. /* !Hook Data - DO NOT REMOVE */ public static function hookData() { return array_merge_recursive( array ( 'postContainer' => array ( 0 => array ( 'selector' => 'article > aside > ul.cAuthorPane_info', 'type' => 'add_after', 'content' => '<!--HOOK_TAG-->', ), ), ), parent::hookData() ); } /* End Hook Data */ public function postContainer( $item, $comment, $votes=array(), $otherClasses='' ) { $html = parent::postContainer( $item, $comment, $votes, $otherClasses ); //php code $html = str_replace( '<!--HOOK_TAG-->', \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->pluginTemplate( $data ), $html ); return $html; } Share this post Link to post
siv1987 2,627 11/22/2019 11:38 AM Интересно как еще способы в таких случаях есть, @newbie накидай пару примеров. Какой способ общепринят у разработчиков? Share this post Link to post
newbie 1,722 11/22/2019 12:42 PM Если работаем с $item, то расширяем \IPS\forums\Topic, если с $comment - \IPS\forums\Topic\Post 2 Share this post Link to post
siv1987 2,627 11/22/2019 01:22 PM С $comment. Я правильно понимаю мыслю, что создаем метод myPluginMethod в \IPS\forums\Topic\Post, а в шаблоне обращаемся к нему через {expression="$comment->myPluginMethod()"}? Share this post Link to post
siv1987 2,627 11/24/2019 12:13 PM Остановился на варианте с тегом, не стал отдельно хукать \IPS\forums\Topic\Post, мне это показалось слишком избыточном только для генерации html, и в первом случае можно уместить все в одном файле хука. Оптимизация :) Share this post Link to post