Я написал приложение Zend и включил Wordpress для ведения блога. Когда я впервые установил Wordpress, я настроил его так, чтобы он использовал тот же заголовок и т. д., что и основное приложение. С тех пор я дважды переделывал основную тему, и мне пришлось переделывать тему Wordpress, чтобы она соответствовала. Есть ли способ для Wordpress использовать мой макет Zend? Мои первые мысли — разбить мой макет на файлы верхнего и нижнего колонтитула и включить их из Wordpress, используя полные пути. Хотя это сработало бы, но далеко не идеально (я бы предпочел сохранить файл макета в целости и сохранности).
Как использовать макет Zend в качестве темы Wordpress?
Ответы (4)
Если у вас есть класс страницы, который использует сценарий макета/представления или аналогичный, вы можете сделать что-то подобное в файле темы 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().
Я не знаю, лучший ли это способ, мне было бы интересно посмотреть, есть ли лучший способ.
Я разделил файл layout.phtml на части верхнего и нижнего колонтитула.
В моих файлах темы Wordpress я включаю свои части.
Более элегантным решением может быть написание моей собственной функции get_header/footer, включающей эти партиалы? Я думаю, это будет в файле function.php темы?
Для многих веб-сайтов вам может потребоваться установить Wordpress для интеграции с блогами. Когда дело доходит до оформления блога, вы в значительной степени ограничены копированием html из вашего Zend_Layout в файлы 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
Теперь приходит магия 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. Нижний колонтитул
Нижний колонтитул.php похож:
</div><!-- #main -->
<?php
include('zend_layout.php');
echo substr($layout, strpos($layout, '<div id="footer">'));
Zend_Application
— это абсолютное безумие! Вы можете, если хотите, использовать Zend_Layout
и Zend_View
как отдельные компоненты, не загружая все остальное, что поставляется с Zend_Application
. Читать документацию -›
- person adlawson; 21.09.2011
Вам просто нужно передать переменные объекта представления (модель из Wordpress) в ваш макет.
Это своего рода пример того, как я использую его в своих проектах (я использую полный Zend_Layout: headLink, headTitle, headStyle...), но пункт 1 — это смешанный пример:
<?php
// Layout: New; or get from registry if it's stored in;
// or set your own new Layout with ->setLayout().
$Layout = new Zend_Layout();
$view = $Layout->getView(); ?>
<!-- Header -->
<?php echo $Layout->render('header.phtml'); ?>
<!-- /Header -->
<?php // 1. Now assume you have an usual Wordpress loop:
// (but IMHO I prefer use $wp_query->posts and partialLoop)
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
$view->post = get_post(get_the_ID());
$view->render('partials/article.phtml');
// article.phtml works with $this->post as model.
}
}
// 2. Example out of loop with $wp_query:
if ( $wp_query instanceof WP_Query && $wp_query->have_posts() ) {
// Now, we can render your partial article template
// passing the posts as model:
$view->partialLoop()->setObjectKey('post'); // $this->post in article partial template.
$view->posts = $view->partialLoop( 'partials/article.phtml',
$wp_query->posts);
// You can render here your $view->posts var or passing anything.
}
?>
<!-- Sidebar -->
<?php echo $Layout->render('sidebar.phtml');
// or call your Wordpress sidebars: get_sidebar('my_sidebar');
// but, again, I prefer use placeholders for that. ?>
<!-- /Sidebar -->
<!-- Footer -->
<?php echo $Layout->render('footer.phtml'); ?>
<!-- /Footer -->
Надеюсь, поможет ;)