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
Benflow_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?
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. –
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. –