[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Прошу помочь объяснить
sacret
Все привет. Тока начинаю работать с ООП... вопрос може быть глупый, но ника не могу разобраться в нем, суть вот такая.....
пишу небольшую MVC и пытаюсь парралелно разобраться с ООП. Есть вот такой класс моделей, это общий класс:

class Model {
private $_page_info = array();
public function get_data(){ }
public function set_infopage($name,$val){ $this -> _page_info[$name] = $val; }
public function get_infopage($name){ return $this -> _page_info[$name]; }
}



и вот такой класс моделей страниц, который загружается при вызове определенный страниц

class Model_Main extends Model{
private $_page_info = array();

$_page_info = new Model;
$_page_info->set_infopage('title','Test title page - public');
$_page_title = $_page_info -> get_infopage('title');


Я хочу в этом классе определить Title и description для страницы (забирать в дальнейшем из БД)....
так вот мне не понятно следующее, почему если я определяю $_page_info и $_page_title, при обращении к ним в дальнейшем (уже из шаблона страницы) при формировании самой страницы, у меня вываливается "Undefined variable: _page_title in".

Спасибо. Прошу объясните доступно, что я делаю не так....
Игорь_Vasinsky
class Model {
private $_page_info = array();

public function __construct(){

}


public function get_data(){

}


public function set_infopage($name,$val){
$this -> _page_info[$name] = $val;
}

public function get_infopage($name){
return $this -> _page_info[$name];
}
}


class Model_Main extends Model{
private $_page_info = array();
}

$_page_info = new Model;
$_page_info->set_infopage('title','Test title page - public');
$_page_title = $_page_info -> get_infopage('title');

echo $_page_title;


Test title page - public


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sacret
Я видимо не очень понятно описал.... сорри, когда я подключаю файл шаблона (include template.php) и уже из шаблона вывожу значение переменной $_page_title - "Undefined variable: _page_title in"

echo $_page_title;

как обратиться к переменной определенной $_page_title из подключенного файла template.php не создавая в коде этого файла еще раз экземпляр класса Model_Main....??
Игорь_Vasinsky
тебе нужен парсер

сам шаблон должен быть вида

<title>{title}</title>
<h1>{header}</h1>

потом в контроллере получить исходный код шаблона с file_get_contents()

потом strtr() - заменить метки

потом отдать шаблон на вывод

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sacret
ууу.... это как-то сложно пока для меня...
Я сделал так - в index.php, определил массив,
далее в этот масив глобально засунул данные из Model_Main (главная страница), при require template.php их просто забрал ..... тоже и для Model_Contact глобально засунул данные по странице контакты.....

Это наверно не правльно ..... но зато кода меньше.... Пожалуйста прокоментируйте....
Игорь_Vasinsky
template.tpl

<html>
<
head>
<
title>{TITLE}</title>
</
head>
<
body>
<
h1>{HEADER}</h1>
<
p>{CONTENT}</p>
</
body>
</
html>



Далее

class Controller{
public $tpl;
public $model;

public function __construct(){

}


public function setModel($model){
$this->model = new $model;
return $this->model;
}

public function setTpl($tplfile){
$html = file_get_contents($tplfile);
$this->tpl = $html;
}

public function renderTpl(){
return strtr($this->tpl, $this->model->get_infopage());
}
}


class Model {
private $_page_info = array();

public function __construct(){

}


public function get_data(){

}


public function set_infopage($name,$val){
$this -> _page_info[$name] = $val;
}

public function get_infopage(){
return $this -> _page_info;
}
}



$controller = new Controller;

$model = $controller->setModel('Model');

$model->set_infopage('{TITLE}','Test title page - public');
$model->set_infopage('{HEADER}','Header this page');
$model->set_infopage('{CONTENT}','bla-bla-bla');

$controller->setTpl('template.tpl');

echo $controller->renderTpl();



Результат


<html>
<head>
<title>
Test title page - public</title>
</head>
<body>
<h1>
Header this page</h1>
<p>
bla-bla-bla</p>
</body>
</html>

ест-но ты можешь создавать свои классы наследники - в базовых класса храниться функционал общий для все

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.