2015-07-20 23 views
0

我們的任務是整合fuelPHP在WordPress網站上運行,以獲得這兩個優惠給開發者的優勢。我們一直在通過互聯網尋找如何做到這一點的方法,我們來到this siteFuelPHP to WordPress

我們照着所有的說明,是的,它成功地安裝的WordPress,但未能與FuelPHP整合,當我們試圖打開fuelphp,它返回一個錯誤:

Fatal error: Cannot redeclare class Fuel\Core\Autoloader in C:\xampp\htdocs\game-bootcamp\fuel\core\classes\autoloader.php on line 24.

是因爲有第三者存在誰成功地做到這一點?你能給我們說明如何做到這一點嗎?

回答

1

對不起,我回答了一個老問題,但它沒有在互聯網上的任何地方回答。這是一個重要的問題,因爲Wordpress對最終用戶很有用,Fuel PHP非常適合程序員使用。

您可以通過兩種方式集成Wordpress和Fuel PHP。

  1. 的WordPress在燃油PHP
  2. 燃料PHP運行在WordPress的

第一種方式

我敢打賭,你問的第二個跑不過你發佈一個鏈接第一個教程。我只能給你第二個答案。

一般來說,第一種方式可能會很痛苦,但這裏有一些提示可以幫助您入門。 Wordpress Codex - Integrating Wordpress with Your Website

通過這種方式,您可以重寫使用Wordpress主題並輸出任何內容,並讓Fuel請求帶頭使用Wordpress查詢功能。如果您想要Wordpress面板和Fuel PHP顯示器,這似乎是一種很好的集成方式,但我不認爲這是一個好主意,但是如果您願意的話 - 就可以了。

第二種方式

我想實現基於燃料PHP和WordPress網站從與WordPress碼內的燃料PHP類新這個後臺面板所採取的數據後臺面板。

這樣,您應該保持Wordpress應用程序路由不變,並利用Fuel PHP的HMVC模式。

我發現這其中一個給我的總體思路如何讓這樣的: https://github.com/robertosobachi/wp-fuel-framework

步驟#1 - WordPress的基礎

不要修改核心WordPress的。不要修改WordPress主題。要麼創建你自己的孩子主題或你自己的主題。如果你想使一切正確 - 你應該爲此創建Wordpress插件。

然後,您可以將Fuel PHP集成到functions.php文件中,但最好的方法是使用Sidebar(Widget)Areas創建您自己的主題,並創建插件,使用主題定義的側邊欄,定義的PHP函數或/和簡碼。

在您的主題/插件代碼中,您需要加載Fuel PHP。您可以使用Widget Init操作,但是您可以選擇正確加載。

以下代碼適用於Fuel PHP 1.8,但您可以按照此步驟使用更多版本。

第二步 - 燃油index.php文件複製

假設以下文件夾結構:

/阿帕奇/ WWW /後勤/(燃料和公共文件夾)

/阿帕奇/ www/wordpress /(帶wordpress)

打開/apache/www/backoffice/public/index.php,看看那裏發生了什麼。首先要做的是複製Fuel在Wordpress中執行的步驟。我粘貼的每個代碼都應放置在Wordpress插件或主題中(如您所願)。 ABSPATH由Wordpress定義。

$dir = realpath(ABSPATH.'../backoffice/public'); 
define('DOCROOT', $dir.DIRECTORY_SEPARATOR); 
define('APPPATH', realpath($dir.'/../fuel/app/').DIRECTORY_SEPARATOR); 
define('PKGPATH', realpath($dir.'/../fuel/packages/').DIRECTORY_SEPARATOR); 
define('COREPATH', realpath($dir.'/../fuel/core/').DIRECTORY_SEPARATOR); 

現在您可以複製燃油的index.php的休息:

defined('FUEL_START_TIME') or define('FUEL_START_TIME', microtime(true)); 
defined('FUEL_START_MEM') or define('FUEL_START_MEM', memory_get_usage()); 

// Load in the Fuel autoloader 
if (! file_exists(COREPATH.'classes'.DIRECTORY_SEPARATOR.'autoloader.php')) 
{ 
    die('No composer autoloader found. Please run composer to install the FuelPHP framework dependencies first!'); 
} 

// Activate the framework class autoloader 
require COREPATH.'classes'.DIRECTORY_SEPARATOR.'autoloader.php'; 
class_alias('Fuel\\Core\\Autoloader', 'Autoloader'); 

在index.php代碼的其餘部分是基於我們現在不想使用Request類,所以不要複製它。但是,您可以看到以下行:

require APPPATH.'bootstrap.php'; 

讓我們轉到該文件。在第一行中你可以找到:

require COREPATH.'bootstrap.php'; 

所以我們先從這個開始。

步驟#3 - CORE bootstrap.php中重複

它保存,可能需要複製該文件的第一行。

define('DS', DIRECTORY_SEPARATOR); 
define('CRLF', chr(13).chr(10)); 

define('MBSTRING', function_exists('mb_get_info')); 

require COREPATH.'base.php'; 

setup_autoloader(); 

get_composer(); 

不要複製register_shutdown_functionset_exception_handlerset_error_handler除非你知道自己在做什麼。您可能想要使用默認的Wordpress錯誤處理。如果你願意,使用燃料錯誤處理非常棘手 - 嘗試一下。我個人放棄了。

您必須複製setup_autoloaderget_composer功能。它們很長,但它們對於使這種集成起作用至關重要。我沒有複製它在這裏,使這個職位更具可讀性。

步驟#4 - APP bootstrap.php中重複

希望你不會丟失呢。我們必須回到APP bootstrap.php並複製這些行。

\Autoloader::add_classes(array(
    // Add classes you want to override here 
    // Example: 'View' => APPPATH.'classes/view.php', 
)); 

\Autoloader::register(); 

\Fuel::$env = \Arr::get($_SERVER, 'FUEL_ENV', \Arr::get($_ENV, 'FUEL_ENV', \Fuel::DEVELOPMENT)); 

\Fuel::init('config.php'); 

我不確定Fuel :: init是否加載非常重要,還沒有測試過。但是你必須知道Fuel :: init方法正在設置一些全局變量,如date_default_timezone_set(根據配置),所以它可以以某種方式修改Wordpress的工作方式。

就是這樣。現在在您的插件/主題文件中,您可以向您的控制器發出HMVC請求。你可以訪問你的模型,燃料類 - 就像你以前做的一樣。不要忘記在Wordpress中激活你的插件。

$widget = Request::forge('widget/sample')->execute(); 

您必須意識到,它不會自動回顯視圖 - 請參閱Fuel文檔瞭解更多信息。

下面是引擎收錄:link

編輯:

還有就是我發現使用會話另一個棘手的問題:當您只使用HMVC請求會話時不保存,所以你必須調用Session::write()在你的代碼中手動(無論你想保存它)。你必須在Wordpress輸出之前調用它,所以試圖掛鉤到init或者只是把它放在你的主插件文件中。

編輯#2:

由於目前尚未與WordPress的汽車 「magic_quotes_gpc的」 功能的另一個棘手的部分。 不要只需將其關閉$_POST = stripslashes_deep($_POST);,因爲它可能會打破Wordpress安全。更好的方法是在Fuel代碼中添加數據庫之前使用stripslashes,並且只使用那些需要去除的變量。