2016-04-08 3 views
4

Я только начал программировать 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-скрипт и сделать его исполняемым?

ответ

0

Вам необходимо изучить автозагрузку PSR-4 и как использовать Composer, если вы хотите включить файлы в файлы. Это сделает его намного проще, чем использовать require_once везде, где вы хотите включить файл.

Если вы говорите о шаблоне просмотра, не Reinvent the Wheel, если вы не хотите больше узнать о колесах. Два лучших шаблонных двигателя, которые я использовал, - Blade Laravel и Twig Symfony. Вы также можете попробовать движок шаблонов Лиги PHP Developer, который использует только PHP.

+0

Так что в основном мне нужно вставить внутри моего 'classes.php' новый' class' с некоторой 'public function', правильно? Я не могу использовать другую фреймворк, на самом деле это сложно. –

+1

Посмотрите композитор и PSR-4. Шаги: установка композитора. Измените композитора.json, чтобы использовать PSR-4 для поиска всех ваших классов. Добавьте «использовать MyFolder \ MyClass» для каждого класса, который вы хотите использовать. Вы можете попробовать настроить PHPFiddle, чтобы продемонстрировать свой код, так как трудно понять, что пошло не так, не увидев его вживую. –

Смежные вопросы