Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
siv1987

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

Рекомендованные сообщения

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

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

 

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

Поделиться сообщением


Ссылка на сообщение

По селектору я могу вставить "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() );
}

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

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

 

/* !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;
}

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

  • Upvote 2

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Верно.

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...