siv1987 2628 11/21/19 12:05 Нужно в одном месте шаблона вывести другой шаблон с предварительной обработки данных из первого шаблона. Как разделить php код от html шаблона и вставить это в шаблон? Вставить шаблон конечно проблем нет, но как выполнить php код с переменными из первого шаблона? Что-то на ум ничего не приходит. Поделиться сообщением Ссылка на сообщение
siv1987 2628 11/21/19 13:15 Сумбурно описал задачу. В определенном месте шаблона нужно вывести свой кастомный html код. Задача вроде решается плагином типа template plugin. Но данные в этом html коде предварительно нужно обработать через php, например сделать вызов в бд по $article->author_id и сформировать на его основе html. Как сначала выполнить php код с переменными из нужного нам шаблона, не вставляя этот php код в наш кастомный html. В тройке был такой тип хука Template Hook с функцией getOutput, там можно было получить переменные шаблона где находится метка, выполнить какой нибудь php код, вызвать шаблон с этими данными и вернуть html результат. Как примерное тоже самое сделать здесь? Поделиться сообщением Ссылка на сообщение
newbie 1723 11/21/19 13:21 В 4-ке нет меток. Если нужно получить переменные шаблона и сам html, то https://invisioncommunity.com/developers/docs/development/plugins/theme-hooks-r43/PHP Mode Поделиться сообщением Ссылка на сообщение
siv1987 2628 11/21/19 13:41 Это я знаю, что теперь не используются метки а css селекторы. Я просто описал какой принцип мне нужен на основе примера с тройке. По селектору я могу вставить "template" html, но как перед этим еще бы выполнить какой нибудь php код с переменными которые находится в этом шаблоне? Целиком шаблон мне не особо нужен, нужно только в нем вставить свой блок. В php mode я так понимаю могу перегрузить целиком шаблон но мне бы не хотелось бы потом по регулярному выражению или через замену по html тегам вставить свой блок. Пока мне видеться такой вариант, через theme hook по селектору добавляем свою метку в нужном месте, потом перегружаем шаблон, получаем html и заменяем метку на наш html. Пишу с телефона, добавить фрагменты кода для наглядности не могу. Поделиться сообщением Ссылка на сообщение
newbie 1723 11/21/19 13:55 По селектору я могу вставить "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() ); } Поделиться сообщением Ссылка на сообщение
siv1987 2628 11/21/19 14:01 Да, все верно, но 'content' это template code, а мне там еще нужно выполнить большую портянку php кода. Как это сделать в шаблоне? Создать отдельный метод потом его вызвать в шаблоне через {expression}? Вот в чем вопрос. Хочется чистый html отделить от моего php кода. Поделиться сообщением Ссылка на сообщение
siv1987 2628 11/21/19 14:10 Думаешь сработает? А метод какого класса, и как к нему обратится?.. Поделиться сообщением Ссылка на сообщение
siv1987 2628 11/21/19 17:07 С отдельным методом не получилось, не могу понять какой класс захукать, или где его создать. Остановился пока на таком варианте. Если есть еще идеи готов выслушать. /* !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; } Поделиться сообщением Ссылка на сообщение
siv1987 2628 11/22/19 11:38 Интересно как еще способы в таких случаях есть, @newbie накидай пару примеров. Какой способ общепринят у разработчиков? Поделиться сообщением Ссылка на сообщение
newbie 1723 11/22/19 12:42 Если работаем с $item, то расширяем \IPS\forums\Topic, если с $comment - \IPS\forums\Topic\Post 2 Поделиться сообщением Ссылка на сообщение
siv1987 2628 11/22/19 13:22 С $comment. Я правильно понимаю мыслю, что создаем метод myPluginMethod в \IPS\forums\Topic\Post, а в шаблоне обращаемся к нему через {expression="$comment->myPluginMethod()"}? Поделиться сообщением Ссылка на сообщение
siv1987 2628 11/24/19 12:13 Остановился на варианте с тегом, не стал отдельно хукать \IPS\forums\Topic\Post, мне это показалось слишком избыточном только для генерации html, и в первом случае можно уместить все в одном файле хука. Оптимизация :) Поделиться сообщением Ссылка на сообщение