私はZendアプリケーションを作成し、ブログ用にWordpressを含めました。Wordpressを最初にインストールしたとき、メインアプリケーションと同じヘッダーなどを使用するようにテーマを設定しました。それ以来、メインテーマを2回やり直し、それに合わせてWordpressテーマをやり直さなければなりませんでした。Wordpressが私のZendレイアウトを使用する方法はありますか?私の最初の考えは、レイアウトをヘッダー/フッターファイルに分割し、フルパスを使用してWordpressからそれらを含めることです。それは機能しますが、理想からはほど遠いです(レイアウトファイルを1つにまとめたいと思います)。
4 に答える
多くの Web サイトでは、ブログ統合のために Wordpress をインストールする必要がある場合があります。ブログのスキニングに関して言えば、Zend_Layout から HTML を Wordpress の header.php および footer.php ファイルにコピーすることにほとんど制限があります。これは重複です。レイアウトを変更した場合は、ブログのテーマも更新する必要があります。さて、別の方法があります!
Zend アプリケーションを変更する
Zend アプリケーション用に個別のブートストラップ ファイルを作成します (たとえば、次のガイドに従ってください: 他のアプリケーションから Zend アプリケーション リソースにアクセスします)。
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap();
index.php ファイルで、アプリケーションを実行するには:
include('bootstrap.php'); //where bootstrap.php is the file of the new bootstrap file
$application->run();
ワードプレスマジック
次に、Wordpress の魔法です。
Zend レイアウトを取得する
新しい Wordpress テーマ フォルダーで、「Zend_Layout.php」という名前のファイルを作成し、次のコードをコピーして貼り付けます。
<?php
//load Zend_Layout
$layout = new Zend_Layout();
//add the blog's stylesheet to the header
$view = $layout->getView();
$view->headLink()->appendStylesheet(get_bloginfo( 'stylesheet_url' ));
// Set a layout script path:
$layout->setLayoutPath(APPLICATION_PATH . "/modules/default/views/scripts");
$layout = $layout->render();
ヘッダ
header.php ファイルを次のように変更します。
<?php
include('zend_layout.php');
echo substr($layout, 0, strpos($layout, '<div id="container">'));
?>
<div id="container">
これにより、前のスクリプトから $layout 変数が読み込まれ、メイン コンテナーの div まですべてがエコーされます。フッター
footer.php も同様です。
</div><!-- #main -->
<?php
include('zend_layout.php');
echo substr($layout, strpos($layout, '<div id="footer">'));
layout.phtml ファイルをヘッダーとフッターのパーシャルに分割しました。
私のWordpressテーマファイルには、パーシャルが含まれています。
より洗練された解決策は、これらのパーシャルを含む独自の get_header/footer 関数を作成することでしょうか? これはテーマの function.php ファイルに入ると思いますか?
レイアウト/ビュー スクリプトが使用するページ クラスなどがある場合は、wordpress テーマ ファイルで次のようなことを行うことができます。
$page = new Page;
$page->setTitle(get_the_title());
$content = '';
if (have_posts())
{
while (have_posts())
{
ob_start();
the_post();
$content .= ob_get_clean();
}
}
$page->setContent($content);
...
$view = new Zend_View();
$view->page = $page;
...
Wordpress は、返す代わりに出力する関数を使用することを容易にしないため、ob_start() が使用されます。
これが最善の方法かどうかはわかりませんが、より良い方法があるかどうかを確認したいと思います。