[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Считывание 2 классов в одном
Страницы: 1, 2
dima9595
Доброго времени суток! Возникла некая проблемма, без которой я не могу продолжить разработку своего сайта.

Проблема в следующем:
Есть 2 файла, а в нём 2 класса. В одном файле я делал простой шаблонизатор, а во втором парсер ini файла. И мне хотелось бы что бы с парсера ini файла считывалась инфа и выводилась в шаблонизатор.

Шаблонизатор:
Скрытый текст

/* 
* ================================== 
* Copyright 2014 Дмитрий Кузнецов 
* ================================== 
* Шаблонизатор 
* ================================== 
*/ 

require_once(ENGINE_DIR . 'engine.php'; // Подключаю движок 

class Template{ 
       var $dir_templates = 'templates/';   // Директория с шаблонами 
       var $dir_template = 'default/';   // Директория с шаблоном 
       var $tpl_file = 'main.tpl';   // Файл главной страницы 

    function __construct(){ 
          $this->dir = $this->dir_templates . $this->dir_template;   // Получаем директорию до папки с шаблоном 
    } 

    function load_tpl(){ 
          $tpl = file_get_contents($this->dir . $this->tpl_file);   // Считываем файл для дальнейшего парсинга 

          ## Замены 
          $tpl = str_replace('{title}', 'da', $tpl); 
          $tpl = str_replace('{templates}', $ini['Templates'], $tpl); // Вот здесь, вместо "$ini['Templates'] " должно подставиться значение с массива (парсинг ini файла) 

          return $tpl; 
    } 


$template = new Template(); 
?>



Движок:
Скрытый текст
<?php 
/* 
* ================================== 
* Copyright 2014 Дмитрий Кузнецов 
* ================================== 
* Движок 
* ================================== 
*/ 

// Подключаем БД 
require_once(ENGINE_DIR . '/db.php'; 
// Подключаем шаблонизатор 
require_once(ENGINE_DIR . '/modules/templates.php'; 

class engine{ 

      function parse_ini(){ 
            $ini = parse_ini_file(ENGINE_DIR . 'data/engine.ini'; 
      } 


$engine = new engine(); 
$engine->parse_ini(); 
?>


Извените за кривоту письма, просто первый раз пишу на данном форуме и мне не понятно как здесь работать.(
dima9595
Ну что, кто нить знает как это решить?
Игорь_Vasinsky
знает))

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

в классе шаблона создаёшь объект класса парсера и работаешь с ним.

а в чём проблема?

а зачем использовать синтаксис php 4 ? он устарел как бэ

вообще оба класса кривые, т.е. имеют недостатки - в т.ч. - если вдруг файлы не прочитаются или отсутствуют - тебя засыпет ошибками - а по логики - должны бросаться исключения, ну и соот-но проверка возможности работы с файлами

str_replace в юникоде ведёт себя не адекватно с кириллицей - в юникоде использую strtr() ну и для строковых функций - функции с префиксом mb_*

_____________
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
dima9595
Цитата
синтаксис php 4

С синтаксисом 5 версии не сильно таки знаком. Например, что поменять нужно?

Цитата
если вдруг файлы не прочитаются или отсутствуют - тебя засыпет ошибками

Это не имеет значения. Так как они должны быть)

Цитата
str_replace в юникоде ведёт себя не адекватно с кириллицей

Не замечал подобного

Цитата
ну и для строковых функций - функции с префиксом mb_*

Возьму на заметку

Если не сложно, не мог бы показать пример реализации? Просто я ещё зелёный в ООП)
Игорь_Vasinsky
Когда отвечают на дельное замечание

Цитата
Это не имеет значения. Так как они должны быть)


то зачем я буду тратить своё время на на разъяснения и примеры)))

я вроде ничего сложного не сказал.

ты как объект класса создаётся знаешь?

_____________
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
dima9595
Цитата
Это не имеет значения. Так как они должны быть)

Я имел ввиду то, что файл точно должен существовать. И ни каких ошибок не должно быть.

Цитата
ты как объект класса создаётся знаешь?

Если не ошибаюсь:
$name = new name();
Игорь_Vasinsky
ага. ну в чём проблема создать экземпляр объекта класса в методе другого класса?

Цитата
Copyright 2014 Дмитрий Кузнецов 
такие вещи просто так не пишутся)

_____________
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
dima9595
Цитата
такие вещи просто так не пишутся)

Такие вещи можно увидеть почти на любом сайте.
Либо Copyright, либо Powered by...

Цитата
ну в чём проблема создать экземпляр объекта класса в методе другого класса?

Из-за того, что я ещё изучаю ООП - мне не совсем понятно что нужно делать(

Т.е. в шаблонизаторе дописать в конце:
$engine = new parse_ini();
Так что ли?
Игорь_Vasinsky
class A{
public function __construct(){
}


public function methodNameA(){
return 'this methodName of class A';
}
}


class B{
public function __construct(){
}


public function methodNameB(){
$a = new A;
return $a->methodNameA();
}
}


$b = new B;
$mnB = $b->methodNameB();

echo $mnB;//this methodName of class A


_____________
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
dima9595
Vasinsky, спасибо. Завтра посмотрю пример поконкретней)
dima9595
Vasinsky, всё работает, ещё раз спасибо. Вот только я не пойму, как мне вывести определённое значение. Пример:

Engine:
// Подключаем БД
require_once(ENGINE_DIR . '/db.php');
// Подключаем шаблонизатор
require_once(ENGINE_DIR . '/modules/template.php');

class Engine{

public function parse_ini(){
// Парсер ini файла движка
$pini = parse_ini_file(ENGINE_DIR . '/data/engine.ini');
}
}

$engine = new Engine();


Template:
require_once(ENGINE_DIR . 'engine.php');	// Подключаем движок

class Template{
var $dir_templates = 'templates/'; // Директория с шаблонами
var $dir_template = 'default'; // Директория с шаблоном
var $tpl_file = 'main.tpl'; // Файл главной страницы

function __construct(){
$this->dir = $this->dir_templates . $this->dir_template; // Получаем директорию до папки с шаблоном
}

function load_tpl(){
$engine = new Engine; // Создаём объект движка
print $engine->parse_ini();

$tpl = file_get_contents($this->dir .'/'. $this->tpl_file); // Считываем файл для дальнейшего парсинга

$start = microtime(true);
usleep(320);
$end = microtime(true);
$runtime = $end - $start;
$l_time = 'Время выполнения скрипта в микросекундах: '. $runtime;

## Замены
$tpl = str_replace('{title}', 'Заголовок', $tpl); // Получаем заголовок
$tpl = str_replace('{theme}', $this->dir, $tpl);
$tpl = str_replace('{copyright}', $this->copyright, $tpl); // Получаем копирайт
$tpl = str_replace('{load_time}', $l_time, $tpl);
$tpl = str_replace('{lo}', $pini['Title'], $tpl);

return $tpl;
}

}
$template = new Template(); // Создаём объект
print $template->load_tpl(); // Выводит шаблон


Как мне вывести $pini['Title']?
Пробовал разными способами, но так и не получилось(
Игорь_Vasinsky
у тебя задача вывести title
Цитата
Как мне вывести $pini['Title']?


или вывести шаблон, где уже всё заменено?
Цитата
print $template->load_tpl(); // Выводит шаблон


  class Template{
public $title;
public $body;
public $tpl;

public function __construct($tpl){
$this->tpl = $tpl;
}

public function loadTpl(){
$replacement = array(
'{title}'=>$this->title,
'{body}'=>$this->body
);

return strtr($this->tpl, $replacement);
}
}


$tpl = '<html>
<head>
<title>{title}</title>
</head>
<body>
{body}
</body>
</html>'
;

$title = 'Заголовок';
$body = 'Тело документа';

$obj = new Template($tpl);
$obj->title = $title;
$obj->body = $body;

echo $obj->loadTpl();


_____________
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-2025 Invision Power Services, Inc.