2016-04-08 9 views
4

PHP'yi kodlamaya başladım, PHP'yi nasıl ekleyeceğimi biliyorum ancak bu durumda zorluklarla karşılaştım. Bir LAMP sunucum var, kök klasöründe kendi çerçevemi aşağıdaki gibi kurdum (klasörler büyük harflerle).Bir PHP betiğini diğerine bölmek ve entegre etmek için doğru yöntem nedir?

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 Bu SOURCES ve page.php bunu yankı iç VIEWS her sayfası yaratılır benim skins.php dosya

<?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; 
    } 
} 
?> 

olduğunu index.php

<?php // index.php 
$skin = new skin('wrapper'); 
echo $skin->make(); 

içine oluşturulur.


Senaryo

Her şey gayet iyi çalışıyor entegre etmek, ama şimdi (içerik) (baş etikettir) sarıcı ve bir görünümde

arasındaki bu komut entegre gerekiyor

<?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'; 
: amaçla

<?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> 
bazı şablonları oluşturmak için çalıştı Benim dahil dosyalar aşağıda belirtilmiştir

<?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); 
?> 

böyle, benim sargı üzerinde

Ben flow_init içerecek şekilde çalıştı

ve flow_head elde etmek beklenir Ne:

// 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> 

Ve içeriğime

// 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> 

Sonuçlar, boş bir sayfadır, ancak 3 şablonun tümünü index.php'da birlikte eklerseniz, bunun bir kaynak yolu sorunu olmadığını düşünüyorum.

Bir PHP betiğini bölmek ve çalıştırılabilir yapmak için doğru yöntem nedir?

cevap

0

Dosyalarda dosyaları dahil etmeye başlamak istiyorsanız PSR-4 otomatik yüklemesini ve Composer'ı nasıl kullanacağınızı öğrenmeniz gerekir. Bu, bir dosyanın dahil olmasını istediğiniz her yerde require_once'ı kullanmaktan daha kolay hale getirecektir.

Tekerlekler hakkında daha fazla bilgi edinmek istemiyorsanız, şablon görünümünden bahsediyorsanız, Tekerleği Yeniden İnşa Etmeyin. Kullandığım iki en iyi şablon motor Laravel'in Blade ve Symfony's Twig. Sadece PHP'nin sadece PHP'yi kullanan PHP Developer's templating motorunu deneyebilirsiniz.

+0

Temel olarak 'classes.php' yeni' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' fonksiyon 'işlevinin içine yerleştirmem gerek, doğru mu? Başka bir çerçeve kullanamıyorum, bu noktada gerçekten zor. –

+1

Besteci ve PSR-4'e bakın. Adımlar: Besteci yükle. Besteci değiştir.json dosyası, tüm sınıflarınızın nerede olduğu PSR-4 araması kullanacaktır. Kullanmak istediğiniz her bir sınıfa "MyFolder \ MyClass kullan" seçeneğini ekleyin. Kodunuzu göstermek için bir PHPFiddle'ı ayarlamayı deneyebilirsiniz, bunun neden yaşandığını görmeksizin yanlış olduğunu bilmek zordur. –

İlgili konular