Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
siv1987

Плагин для шаблона

Recommended Posts

Нужно в одном месте шаблона вывести другой шаблон с предварительной обработки данных из первого шаблона.

Как разделить php код от html шаблона и вставить это в шаблон? Вставить шаблон конечно проблем нет, но как выполнить php код с переменными из первого шаблона? Что-то на ум ничего не приходит.

Share this post


Link to post
Share on other sites

Что-то ничего не понятно.

Share this post


Link to post
Share on other sites

Сумбурно описал задачу. В определенном месте шаблона нужно вывести свой кастомный html код. Задача вроде решается плагином типа template plugin. Но данные в этом html коде предварительно нужно обработать через php, например сделать вызов в бд по $article->author_id и сформировать на его основе html. Как сначала выполнить php код с переменными из нужного нам шаблона, не вставляя этот php код в наш кастомный html. В тройке был такой тип хука Template Hook с функцией getOutput, там можно было получить переменные шаблона где находится метка, выполнить какой нибудь php код, вызвать шаблон с этими данными и вернуть html результат. Как примерное тоже самое сделать здесь?

Share this post


Link to post
Share on other sites

Это я знаю, что теперь не используются метки а css селекторы. Я просто описал какой принцип мне нужен на основе примера с тройке. По селектору я могу вставить "template" html, но как перед этим еще бы выполнить какой нибудь php код с переменными которые находится в этом шаблоне? Целиком шаблон мне не особо нужен, нужно только в нем вставить свой блок. В php mode я так понимаю могу перегрузить целиком шаблон но мне бы не хотелось бы потом по регулярному выражению или через замену по html тегам вставить свой блок. Пока мне видеться такой вариант, через theme hook по селектору добавляем свою метку в нужном месте, потом перегружаем шаблон, получаем html и заменяем метку на наш html.

 

Пишу с телефона, добавить фрагменты кода для наглядности не могу.

Share this post


Link to post
Share on other sites

По селектору я могу вставить "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
Share on other sites

Да, все верно, но 'content' это template code, а мне там еще нужно выполнить большую портянку php кода. Как это сделать в шаблоне? Создать отдельный метод потом его вызвать в шаблоне через {expression}? Вот в чем вопрос. Хочется чистый html отделить от моего php кода.

Share this post


Link to post
Share on other sites

Я бы метод создал.

Share this post


Link to post
Share on other sites

Думаешь сработает? А метод какого класса, и как к нему обратится?..

Share this post


Link to post
Share on other sites

С отдельным методом не получилось, не могу понять какой класс захукать, или где его создать.

Остановился пока на таком варианте. Если есть еще идеи готов выслушать.

 

/* !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
Share on other sites

Интересно как еще способы в таких случаях есть, @newbie накидай пару примеров. Какой способ общепринят у разработчиков?

Share this post


Link to post
Share on other sites

Если работаем с $item, то расширяем \IPS\forums\Topic, если с $comment - \IPS\forums\Topic\Post

  • Upvote 2

Share this post


Link to post
Share on other sites

С $comment. Я правильно понимаю мыслю, что создаем метод myPluginMethod в \IPS\forums\Topic\Post, а в шаблоне обращаемся к нему через {expression="$comment->myPluginMethod()"}?

Share this post


Link to post
Share on other sites

Верно.

Share this post


Link to post
Share on other sites

Остановился на варианте с тегом, не стал отдельно хукать \IPS\forums\Topic\Post, мне это показалось слишком избыточном только для генерации html, и в первом случае можно уместить все в одном файле хука. Оптимизация :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...