2012-04-25 57 views
4

不是一個線程,但仍然是最好的名字......打印可變上述

<?php include('inc/nav_bar.php'); ?> 
... 
<?php 
    main code block 
?> 

我需要從「主代碼塊」打印一個變量「nav_bar」塊, 有沒有什麼好辦法做到這一點?

到目前爲止我發現的唯一解決方案就是使用javascript。

+0

如何你有你的一類nav_bar的內容,你那算什麼?像navBar($ mainBlockVariable) – 2012-04-25 10:10:05

+0

你想從上面的塊中用PHP打印出一個變量。如果你不這麼想,那將是不可能的。 – snaderss 2012-04-25 10:10:16

+1

可能對你有意思http://twig.sensiolabs.org/ – KingCrunch 2012-04-25 10:10:38

回答

1

如果我正確理解你,你的nav_bar.php將打印出一些應該包含主代碼塊中變量值的東西。

然後,你可以嘗試「抓住」 nav_bar.php的輸出:

ob_start(); 
include('inc/nav_bar.php'); 
$navBarContent = ob_get_contents(); 
ob_end_clean(); 
// main code block: replace some placeholders in $navBarContent with variables content 

編輯:但我與其他人同意。更好的解決方案是更改代碼設計並使用類/函數。

0

您可以使用不同的方法 - 重新排列代碼塊或使用輸出緩衝。

'nav_bar.php'是否回顯任何內容?試試這個:

{nav_bar.php} 
... 
echo "some text %VAR% some text"; 
... 

{main.php} 
ob_start(); 
include 'inc/nav_bar.php'; 
$content = ob_get_contents(); 
ob_end_clean(); 
$var = doSomeCalc(); 
$content = str_replace('%VAR%', $var, $content); 

echo $content; 

或者您可能會用這樣的方式:

{main.php} 
$main_var = doSomeCalc(); 
... 
include 'inc/nav_bar.php'; 
... 
echo "something else"; 


{nav_bar.php} 
... 
echo "some text $main_var some text"; // use $main_var defined earlier 
... 
-1

我會去這個模式:

<?php 
// main code block 

include('inc/nav_bar.php'); 

但是如果你想向前走的步驟與自己的技巧,讓你的生活更輕鬆,使用模板(從內而外採取一種方法,而不是其他方式)。

如果您想使用某些現有的模板引擎,請查閱Twig或Smarty。我還強烈推薦Zend Framework,它主要使用純粹基於PHP的模板(您也可以使用其他引擎)和Symfony(主要使用Twig)。

0

我覺得是時候讓你開始使用MVC模式在您的應用程序:)

這將解決所有的輸出優先級的問題。

在這裏閱讀更多: "What is MVC ?"