Я только начал программировать PHP, я знаю, как включить PHP, но в этом случае я столкнулся с трудностями. У меня есть LAMP-сервер, в корневой папке я установил свою собственную структуру, как показано ниже (папки заглавными буквами).Какой правильный способ разделить и интегрировать скрипт PHP внутри другого?
index.php
page.php
INCLUDES
- classes.php
- skins.php
- flow_init.php
- flow_head.php
- flow_body.php
SOURCES
- page1.php
- page2.php
...
THEME_HTML
- wrapper.html
VIEWS
- page1.html
- page2.html
...
wrapper.html
создан в index.php
<?php // index.php
$skin = new skin('wrapper');
echo $skin->make();
Это мой skins.php
файл
<?php // INCLUDES/skins.php
class skin {
var $filename;
public function __construct($filename) {
$this->filename = $filename;
}
public function mk($filename) {
$this->filename = $filename;
return $this->make();
}
public function make() {
global $CONF;
$file = sprintf('./'.$CONF['theme_path'].'/'.$CONF['theme_name'].'/html/%s.html', $this->filename);
$fh_skin = fopen($file, 'r');
$skin = @fread($fh_skin, filesize($file));
fclose($fh_skin);
return $this->parse($skin);
}
private function parse($skin) {
global $TMPL, $LNG;
$skin = preg_replace_callback('/{\$lng->(.+?)}/i', create_function('$matches', 'global $LNG; return $LNG[$matches[1]];'), $skin);
$skin = preg_replace_callback('/{\$([a-zA-Z0-9_]+)}/', create_function('$matches', 'global $TMPL; return (isset($TMPL[$matches[1]])?$TMPL[$matches[1]]:"");'), $skin);
return $skin;
}
}
?>
Каждая страница VIEWS
создается внутри SOURCES
и page.php
эхо его.
сценария интеграции
Все работает отлично, но теперь мне нужно интегрировать этот скрипт между оболочкой (где головка тега) и одной точки зрения (где содержание есть)
<?php
session_start();
require_once('admin/plugins/flow-flow/ff-injector.php');
$injector = new FFInjector();
?>
<!DOCTYPE html>
<html lang="en-US">
<head><?php echo $injector->head(true,true); ?>
</head>
<body>
<table width="100%">
<tr>
<td style="width: 300px;vertical-align: top">
<?php
$stream_id = isset($_REQUEST['stream']) ? $_REQUEST['stream'] : 1;
$injector->stream($stream_id);
?>
</td>
</tr>
</table>
</body>
</html>
для целей я попытался создать несколько шаблонов:
<?PHP // index.php
$TMPL['flow_init'] = include './includes/flow_init.php';
$TMPL['flow_head'] = include './includes/flow_head.php';
<?PHP // SOURCES/page1.php
$TMPL['flow_body'] = include './includes/flow_body.php';
Где мои входящие файлы установлены, как показано ниже
<?PHP // flow_init.php
session_start();
require_once('admin/plugins/flow-flow/ff-injector.php');
$injector = new FFInjector();
?>
<?PHP // flow_head.php
echo $injector->head(true,true);
?>
<?PHP // flow_body.php
$stream_id = isset($_REQUEST['stream']) ? $_REQUEST['stream'] : 1;
$injector->stream($stream_id);
?>
То, что я бы ожидать, чтобы достичь
Я попытался включить flow_init
и flow_head
на мою обертку, как это:
// THEME_HTML/wrapper.html
{$flow_init}
<!DOCTYPE html>
<html lang="en">
<head>
{$flow_head}
</head>
<body>
<div id="content" class="wrapper">
{$content}
</div>
</body>
</html>
И flow_body
в мое содержание
// THEME_HTML/VIEWS/page1.html
<div class="row-body{$content_class}">
<div class="body-content">
<div class="nine columns" id="main-content">
{$flow_body}
</div>
<div class="three columns">
{$sidebar}
</div>
</div>
</div>
Результаты пустая страница, однако если включить все 3 шаблоны вместе в index.php
он работает, так что я думаю, что это не проблема истока.
Какой правильный способ разделить PHP-скрипт и сделать его исполняемым?
Так что в основном мне нужно вставить внутри моего 'classes.php' новый' class' с некоторой 'public function', правильно? Я не могу использовать другую фреймворк, на самом деле это сложно. –
Посмотрите композитор и PSR-4. Шаги: установка композитора. Измените композитора.json, чтобы использовать PSR-4 для поиска всех ваших классов. Добавьте «использовать MyFolder \ MyClass» для каждого класса, который вы хотите использовать. Вы можете попробовать настроить PHPFiddle, чтобы продемонстрировать свой код, так как трудно понять, что пошло не так, не увидев его вживую. –