Идентификация параметра в методах php / ООП

O
На сайте с 23.09.2014
Offline
76
530

Здравствуйте. Имеется свой шаблонизатор skn. Если кратко описать его работу - он имеет методы compl (собирает в html-шаблоне теги вида [%tag%] и присваивает им значения) и метод load который загружает html-файл в строку для дальнейшей обработки. Этот шаблонизатор меня полностью устраивает, но возникла потребность идентификации методов compl.

Нример если взять один из классов-модулей моей cms, - Main. Здесь есть три метода compl которые нужно идентифицировать и как-то передать третий параметр идентичный имени параметру из метода load('main.tpl');

То есть должно быть так:

$this->skn->compl('[%info%]', 'INFORM', 'main.tpl');

$this->skn->compl('[%content%]', 'CONTENT', 'main.tpl');

$this->skn->compl('[%footer%]', 'FOOTER. 'main.tpl');

Можно этот третий параметр прописывать в ручную, но если таких методов compl десятки и больше и 'main.tpl' нужно постоянно добавлять и повторять - это будить не правильно.

Вопрос: Как методам compl можно передать третий параметр идентичный с именем параметра метода load('main.tpl'), который в еще добавок выполняется самом конце после всех compl ?


class Login
{
public function pick()
{
$this->skn->compl('[%info%]', 'INFORM222');
$this->skn->compl('[%login%]', 'PLATTON');
$this->skn->compl('[%group%]', 'ADMIM');

return $this->skn->load('login.tpl');
}
}

class News
{
public function pick()
{
$this->skn->compl('[%title%]', 'NEVS-1');
$this->skn->compl('[%deskript%]', 'DESK');
return $this->skn->load('news.tpl');
}
}

class Main
{
public function pick()
{
$login_main = new Login();
$this->skn->sknBlock('[%login_main%]', $login_main->pick());

$news_main = new News();
$this-skn->sknBlock('[%news_main%]', $news_main->pick());

$this->skn->compl('[%info%]', 'INFORM');
$this->skn->compl('[%content%]', 'CONTENT');
$this->skn->compl('[%footer%]', 'FOOTER');

return $this->skn->load('main.tpl');
}
}

$main = new Main();
print($main->pick());

Использование __CLASS__ иил get_called_class() не подходить, поскольку всегда будет выдавать имя класса шаблонизатора - Skn

LovelAss
На сайте с 05.06.2009
Offline
96
#1

Используйте аргументы функции и переменные класса.

Оптимизайка
На сайте с 11.03.2012
Offline
396
#2

А вы сделайте, чтобы compl не "собирал тэги", а просто составлял массив (член класса вашего шаблонизатора) для замен в будущем. А метод load потом по этому массиву пусть "собирает", после чего делает что раньше делал.

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
O
На сайте с 23.09.2014
Offline
76
#3
Оптимизайка:
А вы сделайте, чтобы compl не "собирал тэги", а просто составлял массив (член класса вашего шаблонизатора) для замен в будущем. А метод load потом по этому массиву пусть "собирает", после чего делает что раньше делал.

Не совсем понял что Вы имеете ввиду. По сути все методы compl в шаблонизаторе создает свойство- массив $this->skn->data;



public function skn($name, $var)
{
$this->data[$name] = $var;
//var_dump(get_called_class());
}

далее происходить замены на основе массива $this->data в строке которая получена с помощью метода : load('main.tpl');

Оптимизайка
На сайте с 11.03.2012
Offline
396
#4
Osavul:
Не совсем понял что Вы имеете ввиду. По сути все методы compl в шаблонизаторе создает свойство- массив

Это я и имел ввиду - значит у вас уже так и есть. Тогда непонятно, зачем передавать в compl имя шаблона main.tpl, когда в методе load он становится известен и вся работа уже проводится там?

O
На сайте с 23.09.2014
Offline
76
#5
Оптимизайка:
Это я и имел ввиду - значит у вас уже так и есть. Тогда непонятно, зачем передавать в compl имя шаблона main.tpl, когда в методе load он становится известен и вся работа уже проводится там?

Это связано с тем что мне нужно идентифицировать каждое compl своему шаблону, потому что если этого не сделать и рассматривать код в целом, происходят не контролированные подмены идентичных тегов в шаблонах. А нужно каждому шаблону html принадлежать только свои теги.

Ну например если взять выше мой пример можно увидеть тег [%info%] который встречается в двух модулях Login и Main, что в конечном результате приводит перезапись перемены из $this->skn->compl('[%info%]', 'INFORM222');

в $this->skn->compl('[%info%]', 'INFORM');

Я могу вам сбросить папку тестового скрипта с локального сервера для наглядности.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий